Version Description
Download this release
Release Info
Developer | cory@lamle.org |
Plugin | Duplicator – WordPress Migration Plugin |
Version | 1.3.34 |
Comparing to | |
See all releases |
Code changes from version 1.3.32 to 1.3.34
- assets/css/images/index.php +1 -1
- assets/css/index.php +1 -1
- assets/img/index.php +1 -1
- assets/js/handlebars.min.js +28 -28
- assets/js/index.php +1 -1
- assets/js/jquery.qtip/index.php +1 -1
- assets/js/jquery.qtip/jquery.qtip.min.js +4 -4
- assets/webfonts/index.php +1 -1
- classes/class.constants.php +6 -6
- classes/class.server.php +1 -1
- classes/host/class.godaddy.host.php +14 -14
- classes/host/class.wpengine.host.php +33 -33
- classes/index.php +1 -1
- classes/package/duparchive/index.php +1 -1
- classes/package/index.php +1 -1
- classes/ui/class.ui.screen.base.php +1 -1
- classes/ui/index.php +1 -1
- ctrls/index.php +1 -1
- define.php +2 -2
- duplicator.php +1 -1
- installer/dup-installer/assets/font-awesome/webfonts/index.php +1 -1
- installer/dup-installer/classes/Crypt/Base.php +2660 -2660
- installer/dup-installer/classes/Crypt/Random.php +340 -340
- installer/dup-installer/classes/Crypt/Rijndael.php +1050 -1050
- installer/dup-installer/classes/Crypt/index.php +1 -1
- installer/dup-installer/classes/class.csrf.php +177 -177
- installer/dup-installer/classes/class.package.php +99 -99
- installer/dup-installer/classes/config/class.boot.php +103 -103
- installer/dup-installer/classes/utilities/class.u.exceptions.php +86 -86
- installer/dup-installer/classes/utilities/class.u.search.reaplce.manager.php +610 -610
- installer/dup-installer/favicon/browserconfig.xml +9 -9
- installer/dup-installer/favicon/lite01_safari-pinned-tab.svg +42 -42
- installer/dup-installer/favicon/site.webmanifest +19 -19
- installer/dup-installer/views/view.exception.php +39 -39
- languages/duplicator-en_US.po +3856 -3856
- languages/duplicator.pot +2606 -3408
assets/css/images/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
assets/css/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
assets/img/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
assets/js/handlebars.min.js
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
/**!
|
2 |
-
|
3 |
-
@license
|
4 |
-
handlebars v4.0.10
|
5 |
-
|
6 |
-
Copyright (C) 2011-2016 by Yehuda Katz
|
7 |
-
|
8 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
of this software and associated documentation files (the "Software"), to deal
|
10 |
-
in the Software without restriction, including without limitation the rights
|
11 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
copies of the Software, and to permit persons to whom the Software is
|
13 |
-
furnished to do so, subject to the following conditions:
|
14 |
-
|
15 |
-
The above copyright notice and this permission notice shall be included in
|
16 |
-
all copies or substantial portions of the Software.
|
17 |
-
|
18 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24 |
-
THE SOFTWARE.
|
25 |
-
|
26 |
-
*/
|
27 |
-
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
|
28 |
-
85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
|
29 |
var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
|
1 |
+
/**!
|
2 |
+
|
3 |
+
@license
|
4 |
+
handlebars v4.0.10
|
5 |
+
|
6 |
+
Copyright (C) 2011-2016 by Yehuda Katz
|
7 |
+
|
8 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
+
of this software and associated documentation files (the "Software"), to deal
|
10 |
+
in the Software without restriction, including without limitation the rights
|
11 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
+
copies of the Software, and to permit persons to whom the Software is
|
13 |
+
furnished to do so, subject to the following conditions:
|
14 |
+
|
15 |
+
The above copyright notice and this permission notice shall be included in
|
16 |
+
all copies or substantial portions of the Software.
|
17 |
+
|
18 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24 |
+
THE SOFTWARE.
|
25 |
+
|
26 |
+
*/
|
27 |
+
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
|
28 |
+
85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
|
29 |
var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
|
assets/js/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
assets/js/jquery.qtip/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
assets/js/jquery.qtip/jquery.qtip.min.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
|
2 |
-
|
3 |
-
!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
|
4 |
-
e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
|
5 |
//# sourceMappingURL=jquery.qtip.min.js.map
|
1 |
+
/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */
|
2 |
+
|
3 |
+
!function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l;
|
4 |
+
e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document);
|
5 |
//# sourceMappingURL=jquery.qtip.min.js.map
|
assets/webfonts/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
classes/class.constants.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
defined("ABSPATH") || exit;
|
3 |
-
class DUP_Constants
|
4 |
-
{
|
5 |
-
const ZIP_STRING_LIMIT = 70000; // Cutoff for using ZipArchive addtostring vs addfile
|
6 |
-
}
|
1 |
+
<?php
|
2 |
+
defined("ABSPATH") || exit;
|
3 |
+
class DUP_Constants
|
4 |
+
{
|
5 |
+
const ZIP_STRING_LIMIT = 70000; // Cutoff for using ZipArchive addtostring vs addfile
|
6 |
+
}
|
classes/class.server.php
CHANGED
@@ -173,7 +173,7 @@ class DUP_Server
|
|
173 |
if (strcmp($max_execution_time, 'Off') == 0) {
|
174 |
$max_execution_time_error_message = '$max_execution_time should not be'.$max_execution_time;
|
175 |
} else {
|
176 |
-
$max_execution_time_error_message = '$max_execution_time ('.$max_execution_time.') should not be lower than the
|
177 |
}
|
178 |
self::logCheckFalse($php_test2, $max_execution_time_error_message);
|
179 |
|
173 |
if (strcmp($max_execution_time, 'Off') == 0) {
|
174 |
$max_execution_time_error_message = '$max_execution_time should not be'.$max_execution_time;
|
175 |
} else {
|
176 |
+
$max_execution_time_error_message = '$max_execution_time ('.$max_execution_time.') should not be lower than the DUPLICATOR_SCAN_TIMEOUT'.DUPLICATOR_SCAN_TIMEOUT;
|
177 |
}
|
178 |
self::logCheckFalse($php_test2, $max_execution_time_error_message);
|
179 |
|
classes/host/class.godaddy.host.php
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
defined("ABSPATH") or die("");
|
3 |
-
|
4 |
-
class DUP_GoDaddy_Host {
|
5 |
-
public static function init() {
|
6 |
-
add_filter('duplicator_defaults_settings', array('DUP_GoDaddy_Host', 'defaultsSettings'));
|
7 |
-
}
|
8 |
-
|
9 |
-
public static function defaultsSettings($defaults) {
|
10 |
-
$defaults['archive_build_mode'] = DUP_Archive_Build_Mode::DupArchive;
|
11 |
-
return $defaults;
|
12 |
-
}
|
13 |
-
}
|
14 |
-
|
15 |
DUP_GoDaddy_Host::init();
|
1 |
+
<?php
|
2 |
+
defined("ABSPATH") or die("");
|
3 |
+
|
4 |
+
class DUP_GoDaddy_Host {
|
5 |
+
public static function init() {
|
6 |
+
add_filter('duplicator_defaults_settings', array('DUP_GoDaddy_Host', 'defaultsSettings'));
|
7 |
+
}
|
8 |
+
|
9 |
+
public static function defaultsSettings($defaults) {
|
10 |
+
$defaults['archive_build_mode'] = DUP_Archive_Build_Mode::DupArchive;
|
11 |
+
return $defaults;
|
12 |
+
}
|
13 |
+
}
|
14 |
+
|
15 |
DUP_GoDaddy_Host::init();
|
classes/host/class.wpengine.host.php
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
defined("ABSPATH") or die("");
|
3 |
-
// New encryption class
|
4 |
-
|
5 |
-
class DUP_WPEngine_Host {
|
6 |
-
public static function init() {
|
7 |
-
add_filter('duplicator_installer_file_path', array('DUP_WPEngine_Host', 'installerFilePath'), 10, 1);
|
8 |
-
add_filter('duplicator_global_file_filters_on', '__return_true');
|
9 |
-
add_filter('duplicator_global_file_filters', array('DUP_WPEngine_Host', 'globalFileFilters'), 10, 1);
|
10 |
-
add_filter('duplicator_defaults_settings', array('DUP_WPEngine_Host', 'defaultsSettings'));
|
11 |
-
}
|
12 |
-
|
13 |
-
public static function installerFilePath($path) {
|
14 |
-
$path_info = pathinfo($path);
|
15 |
-
$newPath = $path;
|
16 |
-
if ('php' == $path_info['extension']) {
|
17 |
-
$newPath = substr_replace($path, '.txt', -4);
|
18 |
-
}
|
19 |
-
return $newPath;
|
20 |
-
}
|
21 |
-
|
22 |
-
public static function globalFileFilters($files) {
|
23 |
-
$files[] = wp_normalize_path(WP_CONTENT_DIR).'/mysql.sql';
|
24 |
-
return $files;
|
25 |
-
}
|
26 |
-
|
27 |
-
public static function defaultsSettings($defaults) {
|
28 |
-
$defaults['package_zip_flush'] = '1';
|
29 |
-
return $defaults;
|
30 |
-
}
|
31 |
-
|
32 |
-
}
|
33 |
-
|
34 |
DUP_WPEngine_Host::init();
|
1 |
+
<?php
|
2 |
+
defined("ABSPATH") or die("");
|
3 |
+
// New encryption class
|
4 |
+
|
5 |
+
class DUP_WPEngine_Host {
|
6 |
+
public static function init() {
|
7 |
+
add_filter('duplicator_installer_file_path', array('DUP_WPEngine_Host', 'installerFilePath'), 10, 1);
|
8 |
+
add_filter('duplicator_global_file_filters_on', '__return_true');
|
9 |
+
add_filter('duplicator_global_file_filters', array('DUP_WPEngine_Host', 'globalFileFilters'), 10, 1);
|
10 |
+
add_filter('duplicator_defaults_settings', array('DUP_WPEngine_Host', 'defaultsSettings'));
|
11 |
+
}
|
12 |
+
|
13 |
+
public static function installerFilePath($path) {
|
14 |
+
$path_info = pathinfo($path);
|
15 |
+
$newPath = $path;
|
16 |
+
if ('php' == $path_info['extension']) {
|
17 |
+
$newPath = substr_replace($path, '.txt', -4);
|
18 |
+
}
|
19 |
+
return $newPath;
|
20 |
+
}
|
21 |
+
|
22 |
+
public static function globalFileFilters($files) {
|
23 |
+
$files[] = wp_normalize_path(WP_CONTENT_DIR).'/mysql.sql';
|
24 |
+
return $files;
|
25 |
+
}
|
26 |
+
|
27 |
+
public static function defaultsSettings($defaults) {
|
28 |
+
$defaults['package_zip_flush'] = '1';
|
29 |
+
return $defaults;
|
30 |
+
}
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
DUP_WPEngine_Host::init();
|
classes/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
classes/package/duparchive/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
classes/package/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
classes/ui/class.ui.screen.base.php
CHANGED
@@ -66,7 +66,7 @@ class DUP_UI_Screen
|
|
66 |
if (isset($_wp_admin_css_colors[$colorScheme])) {
|
67 |
return $_wp_admin_css_colors[$colorScheme];
|
68 |
} else {
|
69 |
-
|
70 |
}
|
71 |
}
|
72 |
|
66 |
if (isset($_wp_admin_css_colors[$colorScheme])) {
|
67 |
return $_wp_admin_css_colors[$colorScheme];
|
68 |
} else {
|
69 |
+
return $_wp_admin_css_colors[DupLiteSnapLibUtil::arrayKeyFirst($_wp_admin_css_colors)];
|
70 |
}
|
71 |
}
|
72 |
|
classes/ui/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
ctrls/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
define.php
CHANGED
@@ -4,8 +4,8 @@ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
|
4 |
//Prevent directly browsing to the file
|
5 |
if (function_exists('plugin_dir_url'))
|
6 |
{
|
7 |
-
define('DUPLICATOR_VERSION', '1.3.
|
8 |
-
define('DUPLICATOR_VERSION_BUILD', '2020-05-
|
9 |
define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
|
10 |
define('DUPLICATOR_SITE_URL', get_site_url());
|
11 |
|
4 |
//Prevent directly browsing to the file
|
5 |
if (function_exists('plugin_dir_url'))
|
6 |
{
|
7 |
+
define('DUPLICATOR_VERSION', '1.3.34');
|
8 |
+
define('DUPLICATOR_VERSION_BUILD', '2020-05-16_10:30');
|
9 |
define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
|
10 |
define('DUPLICATOR_SITE_URL', get_site_url());
|
11 |
|
duplicator.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Duplicator
|
4 |
Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
|
5 |
Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
|
6 |
-
Version: 1.3.
|
7 |
Author: Snap Creek
|
8 |
Author URI: http://www.snapcreek.com/duplicator/
|
9 |
Text Domain: duplicator
|
3 |
Plugin Name: Duplicator
|
4 |
Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
|
5 |
Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
|
6 |
+
Version: 1.3.34
|
7 |
Author: Snap Creek
|
8 |
Author URI: http://www.snapcreek.com/duplicator/
|
9 |
Text Domain: duplicator
|
installer/dup-installer/assets/font-awesome/webfonts/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
installer/dup-installer/classes/Crypt/Base.php
CHANGED
@@ -1,2660 +1,2660 @@
|
|
1 |
-
<?php
|
2 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
-
/**
|
4 |
-
* Base Class for all Crypt_* cipher classes
|
5 |
-
*
|
6 |
-
* PHP versions 4 and 5
|
7 |
-
*
|
8 |
-
* Internally for phpseclib developers:
|
9 |
-
* If you plan to add a new cipher class, please note following rules:
|
10 |
-
*
|
11 |
-
* - The new Crypt_* cipher class should extend Crypt_Base
|
12 |
-
*
|
13 |
-
* - Following methods are then required to be overridden/overloaded:
|
14 |
-
*
|
15 |
-
* - _encryptBlock()
|
16 |
-
*
|
17 |
-
* - _decryptBlock()
|
18 |
-
*
|
19 |
-
* - _setupKey()
|
20 |
-
*
|
21 |
-
* - All other methods are optional to be overridden/overloaded
|
22 |
-
*
|
23 |
-
* - Look at the source code of the current ciphers how they extend Crypt_Base
|
24 |
-
* and take one of them as a start up for the new cipher class.
|
25 |
-
*
|
26 |
-
* - Please read all the other comments/notes/hints here also for each class var/method
|
27 |
-
*
|
28 |
-
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
29 |
-
* of this software and associated documentation files (the "Software"), to deal
|
30 |
-
* in the Software without restriction, including without limitation the rights
|
31 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
32 |
-
* copies of the Software, and to permit persons to whom the Software is
|
33 |
-
* furnished to do so, subject to the following conditions:
|
34 |
-
*
|
35 |
-
* The above copyright notice and this permission notice shall be included in
|
36 |
-
* all copies or substantial portions of the Software.
|
37 |
-
*
|
38 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
39 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
40 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
41 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
42 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
43 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
44 |
-
* THE SOFTWARE.
|
45 |
-
*
|
46 |
-
* @category Crypt
|
47 |
-
* @package Crypt_Base
|
48 |
-
* @author Jim Wigginton <terrafrost@php.net>
|
49 |
-
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
50 |
-
* @copyright 2007 Jim Wigginton
|
51 |
-
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
52 |
-
* @link http://phpseclib.sourceforge.net
|
53 |
-
*/
|
54 |
-
|
55 |
-
/**#@+
|
56 |
-
* @access public
|
57 |
-
* @see self::encrypt()
|
58 |
-
* @see self::decrypt()
|
59 |
-
*/
|
60 |
-
/**
|
61 |
-
* Encrypt / decrypt using the Counter mode.
|
62 |
-
*
|
63 |
-
* Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
|
64 |
-
*
|
65 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
|
66 |
-
*/
|
67 |
-
define('CRYPT_MODE_CTR', -1);
|
68 |
-
/**
|
69 |
-
* Encrypt / decrypt using the Electronic Code Book mode.
|
70 |
-
*
|
71 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
|
72 |
-
*/
|
73 |
-
define('CRYPT_MODE_ECB', 1);
|
74 |
-
/**
|
75 |
-
* Encrypt / decrypt using the Code Book Chaining mode.
|
76 |
-
*
|
77 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
|
78 |
-
*/
|
79 |
-
define('CRYPT_MODE_CBC', 2);
|
80 |
-
/**
|
81 |
-
* Encrypt / decrypt using the Cipher Feedback mode.
|
82 |
-
*
|
83 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
|
84 |
-
*/
|
85 |
-
define('CRYPT_MODE_CFB', 3);
|
86 |
-
/**
|
87 |
-
* Encrypt / decrypt using the Output Feedback mode.
|
88 |
-
*
|
89 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
|
90 |
-
*/
|
91 |
-
define('CRYPT_MODE_OFB', 4);
|
92 |
-
/**
|
93 |
-
* Encrypt / decrypt using streaming mode.
|
94 |
-
*/
|
95 |
-
define('CRYPT_MODE_STREAM', 5);
|
96 |
-
/**#@-*/
|
97 |
-
|
98 |
-
/**#@+
|
99 |
-
* @access private
|
100 |
-
* @see self::Crypt_Base()
|
101 |
-
* @internal These constants are for internal use only
|
102 |
-
*/
|
103 |
-
/**
|
104 |
-
* Base value for the internal implementation $engine switch
|
105 |
-
*/
|
106 |
-
define('CRYPT_ENGINE_INTERNAL', 1);
|
107 |
-
/**
|
108 |
-
* Base value for the mcrypt implementation $engine switch
|
109 |
-
*/
|
110 |
-
define('CRYPT_ENGINE_MCRYPT', 2);
|
111 |
-
/**
|
112 |
-
* Base value for the OpenSSL implementation $engine switch
|
113 |
-
*/
|
114 |
-
define('CRYPT_ENGINE_OPENSSL', 3);
|
115 |
-
/**#@-*/
|
116 |
-
|
117 |
-
/**
|
118 |
-
* Base Class for all Crypt_* cipher classes
|
119 |
-
*
|
120 |
-
* @package Crypt_Base
|
121 |
-
* @author Jim Wigginton <terrafrost@php.net>
|
122 |
-
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
123 |
-
* @access public
|
124 |
-
*/
|
125 |
-
class Crypt_Base
|
126 |
-
{
|
127 |
-
/**
|
128 |
-
* The Encryption Mode
|
129 |
-
*
|
130 |
-
* @see self::Crypt_Base()
|
131 |
-
* @var int
|
132 |
-
* @access private
|
133 |
-
*/
|
134 |
-
var $mode;
|
135 |
-
|
136 |
-
/**
|
137 |
-
* The Block Length of the block cipher
|
138 |
-
*
|
139 |
-
* @var int
|
140 |
-
* @access private
|
141 |
-
*/
|
142 |
-
var $block_size = 16;
|
143 |
-
|
144 |
-
/**
|
145 |
-
* The Key
|
146 |
-
*
|
147 |
-
* @see self::setKey()
|
148 |
-
* @var string
|
149 |
-
* @access private
|
150 |
-
*/
|
151 |
-
var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
|
152 |
-
|
153 |
-
/**
|
154 |
-
* The Initialization Vector
|
155 |
-
*
|
156 |
-
* @see self::setIV()
|
157 |
-
* @var string
|
158 |
-
* @access private
|
159 |
-
*/
|
160 |
-
var $iv;
|
161 |
-
|
162 |
-
/**
|
163 |
-
* A "sliding" Initialization Vector
|
164 |
-
*
|
165 |
-
* @see self::enableContinuousBuffer()
|
166 |
-
* @see self::_clearBuffers()
|
167 |
-
* @var string
|
168 |
-
* @access private
|
169 |
-
*/
|
170 |
-
var $encryptIV;
|
171 |
-
|
172 |
-
/**
|
173 |
-
* A "sliding" Initialization Vector
|
174 |
-
*
|
175 |
-
* @see self::enableContinuousBuffer()
|
176 |
-
* @see self::_clearBuffers()
|
177 |
-
* @var string
|
178 |
-
* @access private
|
179 |
-
*/
|
180 |
-
var $decryptIV;
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Continuous Buffer status
|
184 |
-
*
|
185 |
-
* @see self::enableContinuousBuffer()
|
186 |
-
* @var bool
|
187 |
-
* @access private
|
188 |
-
*/
|
189 |
-
var $continuousBuffer = false;
|
190 |
-
|
191 |
-
/**
|
192 |
-
* Encryption buffer for CTR, OFB and CFB modes
|
193 |
-
*
|
194 |
-
* @see self::encrypt()
|
195 |
-
* @see self::_clearBuffers()
|
196 |
-
* @var array
|
197 |
-
* @access private
|
198 |
-
*/
|
199 |
-
var $enbuffer;
|
200 |
-
|
201 |
-
/**
|
202 |
-
* Decryption buffer for CTR, OFB and CFB modes
|
203 |
-
*
|
204 |
-
* @see self::decrypt()
|
205 |
-
* @see self::_clearBuffers()
|
206 |
-
* @var array
|
207 |
-
* @access private
|
208 |
-
*/
|
209 |
-
var $debuffer;
|
210 |
-
|
211 |
-
/**
|
212 |
-
* mcrypt resource for encryption
|
213 |
-
*
|
214 |
-
* The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
|
215 |
-
* Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
|
216 |
-
*
|
217 |
-
* @see self::encrypt()
|
218 |
-
* @var resource
|
219 |
-
* @access private
|
220 |
-
*/
|
221 |
-
var $enmcrypt;
|
222 |
-
|
223 |
-
/**
|
224 |
-
* mcrypt resource for decryption
|
225 |
-
*
|
226 |
-
* The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
|
227 |
-
* Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
|
228 |
-
*
|
229 |
-
* @see self::decrypt()
|
230 |
-
* @var resource
|
231 |
-
* @access private
|
232 |
-
*/
|
233 |
-
var $demcrypt;
|
234 |
-
|
235 |
-
/**
|
236 |
-
* Does the enmcrypt resource need to be (re)initialized?
|
237 |
-
*
|
238 |
-
* @see Crypt_Twofish::setKey()
|
239 |
-
* @see Crypt_Twofish::setIV()
|
240 |
-
* @var bool
|
241 |
-
* @access private
|
242 |
-
*/
|
243 |
-
var $enchanged = true;
|
244 |
-
|
245 |
-
/**
|
246 |
-
* Does the demcrypt resource need to be (re)initialized?
|
247 |
-
*
|
248 |
-
* @see Crypt_Twofish::setKey()
|
249 |
-
* @see Crypt_Twofish::setIV()
|
250 |
-
* @var bool
|
251 |
-
* @access private
|
252 |
-
*/
|
253 |
-
var $dechanged = true;
|
254 |
-
|
255 |
-
/**
|
256 |
-
* mcrypt resource for CFB mode
|
257 |
-
*
|
258 |
-
* mcrypt's CFB mode, in (and only in) buffered context,
|
259 |
-
* is broken, so phpseclib implements the CFB mode by it self,
|
260 |
-
* even when the mcrypt php extension is available.
|
261 |
-
*
|
262 |
-
* In order to do the CFB-mode work (fast) phpseclib
|
263 |
-
* use a separate ECB-mode mcrypt resource.
|
264 |
-
*
|
265 |
-
* @link http://phpseclib.sourceforge.net/cfb-demo.phps
|
266 |
-
* @see self::encrypt()
|
267 |
-
* @see self::decrypt()
|
268 |
-
* @see self::_setupMcrypt()
|
269 |
-
* @var resource
|
270 |
-
* @access private
|
271 |
-
*/
|
272 |
-
var $ecb;
|
273 |
-
|
274 |
-
/**
|
275 |
-
* Optimizing value while CFB-encrypting
|
276 |
-
*
|
277 |
-
* Only relevant if $continuousBuffer enabled
|
278 |
-
* and $engine == CRYPT_ENGINE_MCRYPT
|
279 |
-
*
|
280 |
-
* It's faster to re-init $enmcrypt if
|
281 |
-
* $buffer bytes > $cfb_init_len than
|
282 |
-
* using the $ecb resource furthermore.
|
283 |
-
*
|
284 |
-
* This value depends of the chosen cipher
|
285 |
-
* and the time it would be needed for it's
|
286 |
-
* initialization [by mcrypt_generic_init()]
|
287 |
-
* which, typically, depends on the complexity
|
288 |
-
* on its internaly Key-expanding algorithm.
|
289 |
-
*
|
290 |
-
* @see self::encrypt()
|
291 |
-
* @var int
|
292 |
-
* @access private
|
293 |
-
*/
|
294 |
-
var $cfb_init_len = 600;
|
295 |
-
|
296 |
-
/**
|
297 |
-
* Does internal cipher state need to be (re)initialized?
|
298 |
-
*
|
299 |
-
* @see self::setKey()
|
300 |
-
* @see self::setIV()
|
301 |
-
* @see self::disableContinuousBuffer()
|
302 |
-
* @var bool
|
303 |
-
* @access private
|
304 |
-
*/
|
305 |
-
var $changed = true;
|
306 |
-
|
307 |
-
/**
|
308 |
-
* Padding status
|
309 |
-
*
|
310 |
-
* @see self::enablePadding()
|
311 |
-
* @var bool
|
312 |
-
* @access private
|
313 |
-
*/
|
314 |
-
var $padding = true;
|
315 |
-
|
316 |
-
/**
|
317 |
-
* Is the mode one that is paddable?
|
318 |
-
*
|
319 |
-
* @see self::Crypt_Base()
|
320 |
-
* @var bool
|
321 |
-
* @access private
|
322 |
-
*/
|
323 |
-
var $paddable = false;
|
324 |
-
|
325 |
-
/**
|
326 |
-
* Holds which crypt engine internaly should be use,
|
327 |
-
* which will be determined automatically on __construct()
|
328 |
-
*
|
329 |
-
* Currently available $engines are:
|
330 |
-
* - CRYPT_ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required)
|
331 |
-
* - CRYPT_ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
|
332 |
-
* - CRYPT_ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
|
333 |
-
*
|
334 |
-
* @see self::_setEngine()
|
335 |
-
* @see self::encrypt()
|
336 |
-
* @see self::decrypt()
|
337 |
-
* @var int
|
338 |
-
* @access private
|
339 |
-
*/
|
340 |
-
var $engine;
|
341 |
-
|
342 |
-
/**
|
343 |
-
* Holds the preferred crypt engine
|
344 |
-
*
|
345 |
-
* @see self::_setEngine()
|
346 |
-
* @see self::setPreferredEngine()
|
347 |
-
* @var int
|
348 |
-
* @access private
|
349 |
-
*/
|
350 |
-
var $preferredEngine;
|
351 |
-
|
352 |
-
/**
|
353 |
-
* The mcrypt specific name of the cipher
|
354 |
-
*
|
355 |
-
* Only used if $engine == CRYPT_ENGINE_MCRYPT
|
356 |
-
*
|
357 |
-
* @link http://www.php.net/mcrypt_module_open
|
358 |
-
* @link http://www.php.net/mcrypt_list_algorithms
|
359 |
-
* @see self::_setupMcrypt()
|
360 |
-
* @var string
|
361 |
-
* @access private
|
362 |
-
*/
|
363 |
-
var $cipher_name_mcrypt;
|
364 |
-
|
365 |
-
/**
|
366 |
-
* The openssl specific name of the cipher
|
367 |
-
*
|
368 |
-
* Only used if $engine == CRYPT_ENGINE_OPENSSL
|
369 |
-
*
|
370 |
-
* @link http://www.php.net/openssl-get-cipher-methods
|
371 |
-
* @var string
|
372 |
-
* @access private
|
373 |
-
*/
|
374 |
-
var $cipher_name_openssl;
|
375 |
-
|
376 |
-
/**
|
377 |
-
* The openssl specific name of the cipher in ECB mode
|
378 |
-
*
|
379 |
-
* If OpenSSL does not support the mode we're trying to use (CTR)
|
380 |
-
* it can still be emulated with ECB mode.
|
381 |
-
*
|
382 |
-
* @link http://www.php.net/openssl-get-cipher-methods
|
383 |
-
* @var string
|
384 |
-
* @access private
|
385 |
-
*/
|
386 |
-
var $cipher_name_openssl_ecb;
|
387 |
-
|
388 |
-
/**
|
389 |
-
* The default salt used by setPassword()
|
390 |
-
*
|
391 |
-
* @see self::setPassword()
|
392 |
-
* @var string
|
393 |
-
* @access private
|
394 |
-
*/
|
395 |
-
var $password_default_salt = 'phpseclib/salt';
|
396 |
-
|
397 |
-
/**
|
398 |
-
* The namespace used by the cipher for its constants.
|
399 |
-
*
|
400 |
-
* ie: AES.php is using CRYPT_AES_MODE_* for its constants
|
401 |
-
* so $const_namespace is AES
|
402 |
-
*
|
403 |
-
* DES.php is using CRYPT_DES_MODE_* for its constants
|
404 |
-
* so $const_namespace is DES... and so on
|
405 |
-
*
|
406 |
-
* All CRYPT_<$const_namespace>_MODE_* are aliases of
|
407 |
-
* the generic CRYPT_MODE_* constants, so both could be used
|
408 |
-
* for each cipher.
|
409 |
-
*
|
410 |
-
* Example:
|
411 |
-
* $aes = new Crypt_AES(CRYPT_AES_MODE_CFB); // $aes will operate in cfb mode
|
412 |
-
* $aes = new Crypt_AES(CRYPT_MODE_CFB); // identical
|
413 |
-
*
|
414 |
-
* @see self::Crypt_Base()
|
415 |
-
* @var string
|
416 |
-
* @access private
|
417 |
-
*/
|
418 |
-
var $const_namespace;
|
419 |
-
|
420 |
-
/**
|
421 |
-
* The name of the performance-optimized callback function
|
422 |
-
*
|
423 |
-
* Used by encrypt() / decrypt()
|
424 |
-
* only if $engine == CRYPT_ENGINE_INTERNAL
|
425 |
-
*
|
426 |
-
* @see self::encrypt()
|
427 |
-
* @see self::decrypt()
|
428 |
-
* @see self::_setupInlineCrypt()
|
429 |
-
* @see self::$use_inline_crypt
|
430 |
-
* @var Callback
|
431 |
-
* @access private
|
432 |
-
*/
|
433 |
-
var $inline_crypt;
|
434 |
-
|
435 |
-
/**
|
436 |
-
* Holds whether performance-optimized $inline_crypt() can/should be used.
|
437 |
-
*
|
438 |
-
* @see self::encrypt()
|
439 |
-
* @see self::decrypt()
|
440 |
-
* @see self::inline_crypt
|
441 |
-
* @var mixed
|
442 |
-
* @access private
|
443 |
-
*/
|
444 |
-
var $use_inline_crypt;
|
445 |
-
|
446 |
-
/**
|
447 |
-
* If OpenSSL can be used in ECB but not in CTR we can emulate CTR
|
448 |
-
*
|
449 |
-
* @see self::_openssl_ctr_process()
|
450 |
-
* @var bool
|
451 |
-
* @access private
|
452 |
-
*/
|
453 |
-
var $openssl_emulate_ctr = false;
|
454 |
-
|
455 |
-
/**
|
456 |
-
* Determines what options are passed to openssl_encrypt/decrypt
|
457 |
-
*
|
458 |
-
* @see self::isValidEngine()
|
459 |
-
* @var mixed
|
460 |
-
* @access private
|
461 |
-
*/
|
462 |
-
var $openssl_options;
|
463 |
-
|
464 |
-
/**
|
465 |
-
* Has the key length explicitly been set or should it be derived from the key, itself?
|
466 |
-
*
|
467 |
-
* @see self::setKeyLength()
|
468 |
-
* @var bool
|
469 |
-
* @access private
|
470 |
-
*/
|
471 |
-
var $explicit_key_length = false;
|
472 |
-
|
473 |
-
/**
|
474 |
-
* Don't truncate / null pad key
|
475 |
-
*
|
476 |
-
* @see self::_clearBuffers()
|
477 |
-
* @var bool
|
478 |
-
* @access private
|
479 |
-
*/
|
480 |
-
var $skip_key_adjustment = false;
|
481 |
-
|
482 |
-
/**
|
483 |
-
* Default Constructor.
|
484 |
-
*
|
485 |
-
* Determines whether or not the mcrypt extension should be used.
|
486 |
-
*
|
487 |
-
* $mode could be:
|
488 |
-
*
|
489 |
-
* - CRYPT_MODE_ECB
|
490 |
-
*
|
491 |
-
* - CRYPT_MODE_CBC
|
492 |
-
*
|
493 |
-
* - CRYPT_MODE_CTR
|
494 |
-
*
|
495 |
-
* - CRYPT_MODE_CFB
|
496 |
-
*
|
497 |
-
* - CRYPT_MODE_OFB
|
498 |
-
*
|
499 |
-
* (or the alias constants of the chosen cipher, for example for AES: CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC ...)
|
500 |
-
*
|
501 |
-
* If not explicitly set, CRYPT_MODE_CBC will be used.
|
502 |
-
*
|
503 |
-
* @param int $mode
|
504 |
-
* @access public
|
505 |
-
*/
|
506 |
-
function __construct($mode = CRYPT_MODE_CBC)
|
507 |
-
{
|
508 |
-
// $mode dependent settings
|
509 |
-
switch ($mode) {
|
510 |
-
case CRYPT_MODE_ECB:
|
511 |
-
$this->paddable = true;
|
512 |
-
$this->mode = CRYPT_MODE_ECB;
|
513 |
-
break;
|
514 |
-
case CRYPT_MODE_CTR:
|
515 |
-
case CRYPT_MODE_CFB:
|
516 |
-
case CRYPT_MODE_OFB:
|
517 |
-
case CRYPT_MODE_STREAM:
|
518 |
-
$this->mode = $mode;
|
519 |
-
break;
|
520 |
-
case CRYPT_MODE_CBC:
|
521 |
-
default:
|
522 |
-
$this->paddable = true;
|
523 |
-
$this->mode = CRYPT_MODE_CBC;
|
524 |
-
}
|
525 |
-
|
526 |
-
$this->_setEngine();
|
527 |
-
|
528 |
-
// Determining whether inline crypting can be used by the cipher
|
529 |
-
if ($this->use_inline_crypt !== false) {
|
530 |
-
$this->use_inline_crypt = version_compare(PHP_VERSION, '5.3.0') >= 0 || function_exists('create_function');
|
531 |
-
}
|
532 |
-
}
|
533 |
-
|
534 |
-
/**
|
535 |
-
* PHP4 compatible Default Constructor.
|
536 |
-
*
|
537 |
-
* @see self::__construct()
|
538 |
-
* @param int $mode
|
539 |
-
* @access public
|
540 |
-
*/
|
541 |
-
function Crypt_Base($mode = CRYPT_MODE_CBC)
|
542 |
-
{
|
543 |
-
$this->__construct($mode);
|
544 |
-
}
|
545 |
-
|
546 |
-
/**
|
547 |
-
* Sets the initialization vector. (optional)
|
548 |
-
*
|
549 |
-
* SetIV is not required when CRYPT_MODE_ECB (or ie for AES: CRYPT_AES_MODE_ECB) is being used. If not explicitly set, it'll be assumed
|
550 |
-
* to be all zero's.
|
551 |
-
*
|
552 |
-
* @access public
|
553 |
-
* @param string $iv
|
554 |
-
* @internal Can be overwritten by a sub class, but does not have to be
|
555 |
-
*/
|
556 |
-
function setIV($iv)
|
557 |
-
{
|
558 |
-
if ($this->mode == CRYPT_MODE_ECB) {
|
559 |
-
return;
|
560 |
-
}
|
561 |
-
|
562 |
-
$this->iv = $iv;
|
563 |
-
$this->changed = true;
|
564 |
-
}
|
565 |
-
|
566 |
-
/**
|
567 |
-
* Sets the key length.
|
568 |
-
*
|
569 |
-
* Keys with explicitly set lengths need to be treated accordingly
|
570 |
-
*
|
571 |
-
* @access public
|
572 |
-
* @param int $length
|
573 |
-
*/
|
574 |
-
function setKeyLength($length)
|
575 |
-
{
|
576 |
-
$this->explicit_key_length = true;
|
577 |
-
$this->changed = true;
|
578 |
-
$this->_setEngine();
|
579 |
-
}
|
580 |
-
|
581 |
-
/**
|
582 |
-
* Returns the current key length in bits
|
583 |
-
*
|
584 |
-
* @access public
|
585 |
-
* @return int
|
586 |
-
*/
|
587 |
-
function getKeyLength()
|
588 |
-
{
|
589 |
-
return $this->key_length << 3;
|
590 |
-
}
|
591 |
-
|
592 |
-
/**
|
593 |
-
* Returns the current block length in bits
|
594 |
-
*
|
595 |
-
* @access public
|
596 |
-
* @return int
|
597 |
-
*/
|
598 |
-
function getBlockLength()
|
599 |
-
{
|
600 |
-
return $this->block_size << 3;
|
601 |
-
}
|
602 |
-
|
603 |
-
/**
|
604 |
-
* Sets the key.
|
605 |
-
*
|
606 |
-
* The min/max length(s) of the key depends on the cipher which is used.
|
607 |
-
* If the key not fits the length(s) of the cipher it will paded with null bytes
|
608 |
-
* up to the closest valid key length. If the key is more than max length,
|
609 |
-
* we trim the excess bits.
|
610 |
-
*
|
611 |
-
* If the key is not explicitly set, it'll be assumed to be all null bytes.
|
612 |
-
*
|
613 |
-
* @access public
|
614 |
-
* @param string $key
|
615 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
616 |
-
*/
|
617 |
-
function setKey($key)
|
618 |
-
{
|
619 |
-
if (!$this->explicit_key_length) {
|
620 |
-
$this->setKeyLength(strlen($key) << 3);
|
621 |
-
$this->explicit_key_length = false;
|
622 |
-
}
|
623 |
-
|
624 |
-
$this->key = $key;
|
625 |
-
$this->changed = true;
|
626 |
-
$this->_setEngine();
|
627 |
-
}
|
628 |
-
|
629 |
-
/**
|
630 |
-
* Sets the password.
|
631 |
-
*
|
632 |
-
* Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
|
633 |
-
* {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
|
634 |
-
* $hash, $salt, $count, $dkLen
|
635 |
-
*
|
636 |
-
* Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
|
637 |
-
*
|
638 |
-
* @see Crypt/Hash.php
|
639 |
-
* @param string $password
|
640 |
-
* @param string $method
|
641 |
-
* @return bool
|
642 |
-
* @access public
|
643 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
644 |
-
*/
|
645 |
-
function setPassword($password, $method = 'pbkdf2')
|
646 |
-
{
|
647 |
-
$key = '';
|
648 |
-
|
649 |
-
switch ($method) {
|
650 |
-
default: // 'pbkdf2' or 'pbkdf1'
|
651 |
-
$func_args = func_get_args();
|
652 |
-
|
653 |
-
// Hash function
|
654 |
-
$hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
|
655 |
-
|
656 |
-
// WPA and WPA2 use the SSID as the salt
|
657 |
-
$salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
|
658 |
-
|
659 |
-
// RFC2898#section-4.2 uses 1,000 iterations by default
|
660 |
-
// WPA and WPA2 use 4,096.
|
661 |
-
$count = isset($func_args[4]) ? $func_args[4] : 1000;
|
662 |
-
|
663 |
-
// Keylength
|
664 |
-
if (isset($func_args[5]) && $func_args[5] > 0) {
|
665 |
-
$dkLen = $func_args[5];
|
666 |
-
} else {
|
667 |
-
$dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
|
668 |
-
}
|
669 |
-
|
670 |
-
switch (true) {
|
671 |
-
case $method == 'pbkdf1':
|
672 |
-
if (!class_exists('Crypt_Hash')) {
|
673 |
-
include_once 'Crypt/Hash.php';
|
674 |
-
}
|
675 |
-
$hashObj = new Crypt_Hash();
|
676 |
-
$hashObj->setHash($hash);
|
677 |
-
if ($dkLen > $hashObj->getLength()) {
|
678 |
-
user_error('Derived key too long');
|
679 |
-
return false;
|
680 |
-
}
|
681 |
-
$t = $password . $salt;
|
682 |
-
for ($i = 0; $i < $count; ++$i) {
|
683 |
-
$t = $hashObj->hash($t);
|
684 |
-
}
|
685 |
-
$key = substr($t, 0, $dkLen);
|
686 |
-
|
687 |
-
$this->setKey(substr($key, 0, $dkLen >> 1));
|
688 |
-
$this->setIV(substr($key, $dkLen >> 1));
|
689 |
-
|
690 |
-
return true;
|
691 |
-
// Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
|
692 |
-
case !function_exists('hash_pbkdf2'):
|
693 |
-
case !function_exists('hash_algos'):
|
694 |
-
case !in_array($hash, hash_algos()):
|
695 |
-
if (!class_exists('Crypt_Hash')) {
|
696 |
-
include_once 'Crypt/Hash.php';
|
697 |
-
}
|
698 |
-
$i = 1;
|
699 |
-
$hmac = new Crypt_Hash();
|
700 |
-
$hmac->setHash($hash);
|
701 |
-
$hmac->setKey($password);
|
702 |
-
while (strlen($key) < $dkLen) {
|
703 |
-
$f = $u = $hmac->hash($salt . pack('N', $i++));
|
704 |
-
for ($j = 2; $j <= $count; ++$j) {
|
705 |
-
$u = $hmac->hash($u);
|
706 |
-
$f^= $u;
|
707 |
-
}
|
708 |
-
$key.= $f;
|
709 |
-
}
|
710 |
-
$key = substr($key, 0, $dkLen);
|
711 |
-
break;
|
712 |
-
default:
|
713 |
-
$key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
|
714 |
-
}
|
715 |
-
}
|
716 |
-
|
717 |
-
$this->setKey($key);
|
718 |
-
|
719 |
-
return true;
|
720 |
-
}
|
721 |
-
|
722 |
-
/**
|
723 |
-
* Encrypts a message.
|
724 |
-
*
|
725 |
-
* $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
|
726 |
-
* implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
|
727 |
-
* necessary are discussed in the following
|
728 |
-
* URL:
|
729 |
-
*
|
730 |
-
* {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
|
731 |
-
*
|
732 |
-
* An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
|
733 |
-
* strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
|
734 |
-
* length.
|
735 |
-
*
|
736 |
-
* @see self::decrypt()
|
737 |
-
* @access public
|
738 |
-
* @param string $plaintext
|
739 |
-
* @return string $ciphertext
|
740 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
741 |
-
*/
|
742 |
-
function encrypt($plaintext)
|
743 |
-
{
|
744 |
-
if ($this->paddable) {
|
745 |
-
$plaintext = $this->_pad($plaintext);
|
746 |
-
}
|
747 |
-
|
748 |
-
if ($this->engine === CRYPT_ENGINE_OPENSSL) {
|
749 |
-
if ($this->changed) {
|
750 |
-
$this->_clearBuffers();
|
751 |
-
$this->changed = false;
|
752 |
-
}
|
753 |
-
switch ($this->mode) {
|
754 |
-
case CRYPT_MODE_STREAM:
|
755 |
-
return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
756 |
-
case CRYPT_MODE_ECB:
|
757 |
-
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
758 |
-
return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
|
759 |
-
case CRYPT_MODE_CBC:
|
760 |
-
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
|
761 |
-
if (!defined('OPENSSL_RAW_DATA')) {
|
762 |
-
$result = substr($result, 0, -$this->block_size);
|
763 |
-
}
|
764 |
-
if ($this->continuousBuffer) {
|
765 |
-
$this->encryptIV = substr($result, -$this->block_size);
|
766 |
-
}
|
767 |
-
return $result;
|
768 |
-
case CRYPT_MODE_CTR:
|
769 |
-
return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
|
770 |
-
case CRYPT_MODE_CFB:
|
771 |
-
// cfb loosely routines inspired by openssl's:
|
772 |
-
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
773 |
-
$ciphertext = '';
|
774 |
-
if ($this->continuousBuffer) {
|
775 |
-
$iv = &$this->encryptIV;
|
776 |
-
$pos = &$this->enbuffer['pos'];
|
777 |
-
} else {
|
778 |
-
$iv = $this->encryptIV;
|
779 |
-
$pos = 0;
|
780 |
-
}
|
781 |
-
$len = strlen($plaintext);
|
782 |
-
$i = 0;
|
783 |
-
if ($pos) {
|
784 |
-
$orig_pos = $pos;
|
785 |
-
$max = $this->block_size - $pos;
|
786 |
-
if ($len >= $max) {
|
787 |
-
$i = $max;
|
788 |
-
$len-= $max;
|
789 |
-
$pos = 0;
|
790 |
-
} else {
|
791 |
-
$i = $len;
|
792 |
-
$pos+= $len;
|
793 |
-
$len = 0;
|
794 |
-
}
|
795 |
-
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
796 |
-
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
797 |
-
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
798 |
-
$plaintext = substr($plaintext, $i);
|
799 |
-
}
|
800 |
-
|
801 |
-
$overflow = $len % $this->block_size;
|
802 |
-
|
803 |
-
if ($overflow) {
|
804 |
-
$ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
805 |
-
$iv = $this->_string_pop($ciphertext, $this->block_size);
|
806 |
-
|
807 |
-
$size = $len - $overflow;
|
808 |
-
$block = $iv ^ substr($plaintext, -$overflow);
|
809 |
-
$iv = substr_replace($iv, $block, 0, $overflow);
|
810 |
-
$ciphertext.= $block;
|
811 |
-
$pos = $overflow;
|
812 |
-
} elseif ($len) {
|
813 |
-
$ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
814 |
-
$iv = substr($ciphertext, -$this->block_size);
|
815 |
-
}
|
816 |
-
|
817 |
-
return $ciphertext;
|
818 |
-
case CRYPT_MODE_OFB:
|
819 |
-
return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
|
820 |
-
}
|
821 |
-
}
|
822 |
-
|
823 |
-
if ($this->engine === CRYPT_ENGINE_MCRYPT) {
|
824 |
-
if ($this->changed) {
|
825 |
-
$this->_setupMcrypt();
|
826 |
-
$this->changed = false;
|
827 |
-
}
|
828 |
-
if ($this->enchanged) {
|
829 |
-
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
|
830 |
-
$this->enchanged = false;
|
831 |
-
}
|
832 |
-
|
833 |
-
// re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
|
834 |
-
// using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
|
835 |
-
// rewritten CFB implementation the above outputs the same thing twice.
|
836 |
-
if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
|
837 |
-
$block_size = $this->block_size;
|
838 |
-
$iv = &$this->encryptIV;
|
839 |
-
$pos = &$this->enbuffer['pos'];
|
840 |
-
$len = strlen($plaintext);
|
841 |
-
$ciphertext = '';
|
842 |
-
$i = 0;
|
843 |
-
if ($pos) {
|
844 |
-
$orig_pos = $pos;
|
845 |
-
$max = $block_size - $pos;
|
846 |
-
if ($len >= $max) {
|
847 |
-
$i = $max;
|
848 |
-
$len-= $max;
|
849 |
-
$pos = 0;
|
850 |
-
} else {
|
851 |
-
$i = $len;
|
852 |
-
$pos+= $len;
|
853 |
-
$len = 0;
|
854 |
-
}
|
855 |
-
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
856 |
-
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
857 |
-
$this->enbuffer['enmcrypt_init'] = true;
|
858 |
-
}
|
859 |
-
if ($len >= $block_size) {
|
860 |
-
if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
|
861 |
-
if ($this->enbuffer['enmcrypt_init'] === true) {
|
862 |
-
@mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
|
863 |
-
$this->enbuffer['enmcrypt_init'] = false;
|
864 |
-
}
|
865 |
-
$ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
|
866 |
-
$iv = substr($ciphertext, -$block_size);
|
867 |
-
$len%= $block_size;
|
868 |
-
} else {
|
869 |
-
while ($len >= $block_size) {
|
870 |
-
$iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
|
871 |
-
$ciphertext.= $iv;
|
872 |
-
$len-= $block_size;
|
873 |
-
$i+= $block_size;
|
874 |
-
}
|
875 |
-
}
|
876 |
-
}
|
877 |
-
|
878 |
-
if ($len) {
|
879 |
-
$iv = @mcrypt_generic($this->ecb, $iv);
|
880 |
-
$block = $iv ^ substr($plaintext, -$len);
|
881 |
-
$iv = substr_replace($iv, $block, 0, $len);
|
882 |
-
$ciphertext.= $block;
|
883 |
-
$pos = $len;
|
884 |
-
}
|
885 |
-
|
886 |
-
return $ciphertext;
|
887 |
-
}
|
888 |
-
|
889 |
-
$ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
|
890 |
-
|
891 |
-
if (!$this->continuousBuffer) {
|
892 |
-
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
|
893 |
-
}
|
894 |
-
|
895 |
-
return $ciphertext;
|
896 |
-
}
|
897 |
-
|
898 |
-
if ($this->changed) {
|
899 |
-
$this->_setup();
|
900 |
-
$this->changed = false;
|
901 |
-
}
|
902 |
-
if ($this->use_inline_crypt) {
|
903 |
-
$inline = $this->inline_crypt;
|
904 |
-
return $inline('encrypt', $this, $plaintext);
|
905 |
-
}
|
906 |
-
|
907 |
-
$buffer = &$this->enbuffer;
|
908 |
-
$block_size = $this->block_size;
|
909 |
-
$ciphertext = '';
|
910 |
-
switch ($this->mode) {
|
911 |
-
case CRYPT_MODE_ECB:
|
912 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
913 |
-
$ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
|
914 |
-
}
|
915 |
-
break;
|
916 |
-
case CRYPT_MODE_CBC:
|
917 |
-
$xor = $this->encryptIV;
|
918 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
919 |
-
$block = substr($plaintext, $i, $block_size);
|
920 |
-
$block = $this->_encryptBlock($block ^ $xor);
|
921 |
-
$xor = $block;
|
922 |
-
$ciphertext.= $block;
|
923 |
-
}
|
924 |
-
if ($this->continuousBuffer) {
|
925 |
-
$this->encryptIV = $xor;
|
926 |
-
}
|
927 |
-
break;
|
928 |
-
case CRYPT_MODE_CTR:
|
929 |
-
$xor = $this->encryptIV;
|
930 |
-
if (strlen($buffer['ciphertext'])) {
|
931 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
932 |
-
$block = substr($plaintext, $i, $block_size);
|
933 |
-
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
934 |
-
$buffer['ciphertext'].= $this->_encryptBlock($xor);
|
935 |
-
}
|
936 |
-
$this->_increment_str($xor);
|
937 |
-
$key = $this->_string_shift($buffer['ciphertext'], $block_size);
|
938 |
-
$ciphertext.= $block ^ $key;
|
939 |
-
}
|
940 |
-
} else {
|
941 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
942 |
-
$block = substr($plaintext, $i, $block_size);
|
943 |
-
$key = $this->_encryptBlock($xor);
|
944 |
-
$this->_increment_str($xor);
|
945 |
-
$ciphertext.= $block ^ $key;
|
946 |
-
}
|
947 |
-
}
|
948 |
-
if ($this->continuousBuffer) {
|
949 |
-
$this->encryptIV = $xor;
|
950 |
-
if ($start = strlen($plaintext) % $block_size) {
|
951 |
-
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
952 |
-
}
|
953 |
-
}
|
954 |
-
break;
|
955 |
-
case CRYPT_MODE_CFB:
|
956 |
-
// cfb loosely routines inspired by openssl's:
|
957 |
-
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
958 |
-
if ($this->continuousBuffer) {
|
959 |
-
$iv = &$this->encryptIV;
|
960 |
-
$pos = &$buffer['pos'];
|
961 |
-
} else {
|
962 |
-
$iv = $this->encryptIV;
|
963 |
-
$pos = 0;
|
964 |
-
}
|
965 |
-
$len = strlen($plaintext);
|
966 |
-
$i = 0;
|
967 |
-
if ($pos) {
|
968 |
-
$orig_pos = $pos;
|
969 |
-
$max = $block_size - $pos;
|
970 |
-
if ($len >= $max) {
|
971 |
-
$i = $max;
|
972 |
-
$len-= $max;
|
973 |
-
$pos = 0;
|
974 |
-
} else {
|
975 |
-
$i = $len;
|
976 |
-
$pos+= $len;
|
977 |
-
$len = 0;
|
978 |
-
}
|
979 |
-
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
980 |
-
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
981 |
-
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
982 |
-
}
|
983 |
-
while ($len >= $block_size) {
|
984 |
-
$iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
|
985 |
-
$ciphertext.= $iv;
|
986 |
-
$len-= $block_size;
|
987 |
-
$i+= $block_size;
|
988 |
-
}
|
989 |
-
if ($len) {
|
990 |
-
$iv = $this->_encryptBlock($iv);
|
991 |
-
$block = $iv ^ substr($plaintext, $i);
|
992 |
-
$iv = substr_replace($iv, $block, 0, $len);
|
993 |
-
$ciphertext.= $block;
|
994 |
-
$pos = $len;
|
995 |
-
}
|
996 |
-
break;
|
997 |
-
case CRYPT_MODE_OFB:
|
998 |
-
$xor = $this->encryptIV;
|
999 |
-
if (strlen($buffer['xor'])) {
|
1000 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1001 |
-
$block = substr($plaintext, $i, $block_size);
|
1002 |
-
if (strlen($block) > strlen($buffer['xor'])) {
|
1003 |
-
$xor = $this->_encryptBlock($xor);
|
1004 |
-
$buffer['xor'].= $xor;
|
1005 |
-
}
|
1006 |
-
$key = $this->_string_shift($buffer['xor'], $block_size);
|
1007 |
-
$ciphertext.= $block ^ $key;
|
1008 |
-
}
|
1009 |
-
} else {
|
1010 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1011 |
-
$xor = $this->_encryptBlock($xor);
|
1012 |
-
$ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
|
1013 |
-
}
|
1014 |
-
$key = $xor;
|
1015 |
-
}
|
1016 |
-
if ($this->continuousBuffer) {
|
1017 |
-
$this->encryptIV = $xor;
|
1018 |
-
if ($start = strlen($plaintext) % $block_size) {
|
1019 |
-
$buffer['xor'] = substr($key, $start) . $buffer['xor'];
|
1020 |
-
}
|
1021 |
-
}
|
1022 |
-
break;
|
1023 |
-
case CRYPT_MODE_STREAM:
|
1024 |
-
$ciphertext = $this->_encryptBlock($plaintext);
|
1025 |
-
break;
|
1026 |
-
}
|
1027 |
-
|
1028 |
-
return $ciphertext;
|
1029 |
-
}
|
1030 |
-
|
1031 |
-
/**
|
1032 |
-
* Decrypts a message.
|
1033 |
-
*
|
1034 |
-
* If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
|
1035 |
-
* it is.
|
1036 |
-
*
|
1037 |
-
* @see self::encrypt()
|
1038 |
-
* @access public
|
1039 |
-
* @param string $ciphertext
|
1040 |
-
* @return string $plaintext
|
1041 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1042 |
-
*/
|
1043 |
-
function decrypt($ciphertext)
|
1044 |
-
{
|
1045 |
-
if ($this->paddable) {
|
1046 |
-
// we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}:
|
1047 |
-
// "The data is padded with "\0" to make sure the length of the data is n * blocksize."
|
1048 |
-
$ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
|
1049 |
-
}
|
1050 |
-
|
1051 |
-
if ($this->engine === CRYPT_ENGINE_OPENSSL) {
|
1052 |
-
if ($this->changed) {
|
1053 |
-
$this->_clearBuffers();
|
1054 |
-
$this->changed = false;
|
1055 |
-
}
|
1056 |
-
switch ($this->mode) {
|
1057 |
-
case CRYPT_MODE_STREAM:
|
1058 |
-
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
1059 |
-
break;
|
1060 |
-
case CRYPT_MODE_ECB:
|
1061 |
-
if (!defined('OPENSSL_RAW_DATA')) {
|
1062 |
-
$ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
|
1063 |
-
}
|
1064 |
-
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
1065 |
-
break;
|
1066 |
-
case CRYPT_MODE_CBC:
|
1067 |
-
if (!defined('OPENSSL_RAW_DATA')) {
|
1068 |
-
$padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
|
1069 |
-
$ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
|
1070 |
-
$offset = 2 * $this->block_size;
|
1071 |
-
} else {
|
1072 |
-
$offset = $this->block_size;
|
1073 |
-
}
|
1074 |
-
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
|
1075 |
-
if ($this->continuousBuffer) {
|
1076 |
-
$this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
|
1077 |
-
}
|
1078 |
-
break;
|
1079 |
-
case CRYPT_MODE_CTR:
|
1080 |
-
$plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
|
1081 |
-
break;
|
1082 |
-
case CRYPT_MODE_CFB:
|
1083 |
-
// cfb loosely routines inspired by openssl's:
|
1084 |
-
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
1085 |
-
$plaintext = '';
|
1086 |
-
if ($this->continuousBuffer) {
|
1087 |
-
$iv = &$this->decryptIV;
|
1088 |
-
$pos = &$this->buffer['pos'];
|
1089 |
-
} else {
|
1090 |
-
$iv = $this->decryptIV;
|
1091 |
-
$pos = 0;
|
1092 |
-
}
|
1093 |
-
$len = strlen($ciphertext);
|
1094 |
-
$i = 0;
|
1095 |
-
if ($pos) {
|
1096 |
-
$orig_pos = $pos;
|
1097 |
-
$max = $this->block_size - $pos;
|
1098 |
-
if ($len >= $max) {
|
1099 |
-
$i = $max;
|
1100 |
-
$len-= $max;
|
1101 |
-
$pos = 0;
|
1102 |
-
} else {
|
1103 |
-
$i = $len;
|
1104 |
-
$pos+= $len;
|
1105 |
-
$len = 0;
|
1106 |
-
}
|
1107 |
-
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
|
1108 |
-
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1109 |
-
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1110 |
-
$ciphertext = substr($ciphertext, $i);
|
1111 |
-
}
|
1112 |
-
$overflow = $len % $this->block_size;
|
1113 |
-
if ($overflow) {
|
1114 |
-
$plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1115 |
-
if ($len - $overflow) {
|
1116 |
-
$iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
|
1117 |
-
}
|
1118 |
-
$iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1119 |
-
$plaintext.= $iv ^ substr($ciphertext, -$overflow);
|
1120 |
-
$iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
|
1121 |
-
$pos = $overflow;
|
1122 |
-
} elseif ($len) {
|
1123 |
-
$plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1124 |
-
$iv = substr($ciphertext, -$this->block_size);
|
1125 |
-
}
|
1126 |
-
break;
|
1127 |
-
case CRYPT_MODE_OFB:
|
1128 |
-
$plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
|
1129 |
-
}
|
1130 |
-
|
1131 |
-
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1132 |
-
}
|
1133 |
-
|
1134 |
-
if ($this->engine === CRYPT_ENGINE_MCRYPT) {
|
1135 |
-
$block_size = $this->block_size;
|
1136 |
-
if ($this->changed) {
|
1137 |
-
$this->_setupMcrypt();
|
1138 |
-
$this->changed = false;
|
1139 |
-
}
|
1140 |
-
if ($this->dechanged) {
|
1141 |
-
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
|
1142 |
-
$this->dechanged = false;
|
1143 |
-
}
|
1144 |
-
|
1145 |
-
if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
|
1146 |
-
$iv = &$this->decryptIV;
|
1147 |
-
$pos = &$this->debuffer['pos'];
|
1148 |
-
$len = strlen($ciphertext);
|
1149 |
-
$plaintext = '';
|
1150 |
-
$i = 0;
|
1151 |
-
if ($pos) {
|
1152 |
-
$orig_pos = $pos;
|
1153 |
-
$max = $block_size - $pos;
|
1154 |
-
if ($len >= $max) {
|
1155 |
-
$i = $max;
|
1156 |
-
$len-= $max;
|
1157 |
-
$pos = 0;
|
1158 |
-
} else {
|
1159 |
-
$i = $len;
|
1160 |
-
$pos+= $len;
|
1161 |
-
$len = 0;
|
1162 |
-
}
|
1163 |
-
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
1164 |
-
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1165 |
-
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1166 |
-
}
|
1167 |
-
if ($len >= $block_size) {
|
1168 |
-
$cb = substr($ciphertext, $i, $len - $len % $block_size);
|
1169 |
-
$plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
|
1170 |
-
$iv = substr($cb, -$block_size);
|
1171 |
-
$len%= $block_size;
|
1172 |
-
}
|
1173 |
-
if ($len) {
|
1174 |
-
$iv = @mcrypt_generic($this->ecb, $iv);
|
1175 |
-
$plaintext.= $iv ^ substr($ciphertext, -$len);
|
1176 |
-
$iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
|
1177 |
-
$pos = $len;
|
1178 |
-
}
|
1179 |
-
|
1180 |
-
return $plaintext;
|
1181 |
-
}
|
1182 |
-
|
1183 |
-
$plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
|
1184 |
-
|
1185 |
-
if (!$this->continuousBuffer) {
|
1186 |
-
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
|
1187 |
-
}
|
1188 |
-
|
1189 |
-
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1190 |
-
}
|
1191 |
-
|
1192 |
-
if ($this->changed) {
|
1193 |
-
$this->_setup();
|
1194 |
-
$this->changed = false;
|
1195 |
-
}
|
1196 |
-
if ($this->use_inline_crypt) {
|
1197 |
-
$inline = $this->inline_crypt;
|
1198 |
-
return $inline('decrypt', $this, $ciphertext);
|
1199 |
-
}
|
1200 |
-
|
1201 |
-
$block_size = $this->block_size;
|
1202 |
-
|
1203 |
-
$buffer = &$this->debuffer;
|
1204 |
-
$plaintext = '';
|
1205 |
-
switch ($this->mode) {
|
1206 |
-
case CRYPT_MODE_ECB:
|
1207 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1208 |
-
$plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
|
1209 |
-
}
|
1210 |
-
break;
|
1211 |
-
case CRYPT_MODE_CBC:
|
1212 |
-
$xor = $this->decryptIV;
|
1213 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1214 |
-
$block = substr($ciphertext, $i, $block_size);
|
1215 |
-
$plaintext.= $this->_decryptBlock($block) ^ $xor;
|
1216 |
-
$xor = $block;
|
1217 |
-
}
|
1218 |
-
if ($this->continuousBuffer) {
|
1219 |
-
$this->decryptIV = $xor;
|
1220 |
-
}
|
1221 |
-
break;
|
1222 |
-
case CRYPT_MODE_CTR:
|
1223 |
-
$xor = $this->decryptIV;
|
1224 |
-
if (strlen($buffer['ciphertext'])) {
|
1225 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1226 |
-
$block = substr($ciphertext, $i, $block_size);
|
1227 |
-
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
1228 |
-
$buffer['ciphertext'].= $this->_encryptBlock($xor);
|
1229 |
-
$this->_increment_str($xor);
|
1230 |
-
}
|
1231 |
-
$key = $this->_string_shift($buffer['ciphertext'], $block_size);
|
1232 |
-
$plaintext.= $block ^ $key;
|
1233 |
-
}
|
1234 |
-
} else {
|
1235 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1236 |
-
$block = substr($ciphertext, $i, $block_size);
|
1237 |
-
$key = $this->_encryptBlock($xor);
|
1238 |
-
$this->_increment_str($xor);
|
1239 |
-
$plaintext.= $block ^ $key;
|
1240 |
-
}
|
1241 |
-
}
|
1242 |
-
if ($this->continuousBuffer) {
|
1243 |
-
$this->decryptIV = $xor;
|
1244 |
-
if ($start = strlen($ciphertext) % $block_size) {
|
1245 |
-
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
1246 |
-
}
|
1247 |
-
}
|
1248 |
-
break;
|
1249 |
-
case CRYPT_MODE_CFB:
|
1250 |
-
if ($this->continuousBuffer) {
|
1251 |
-
$iv = &$this->decryptIV;
|
1252 |
-
$pos = &$buffer['pos'];
|
1253 |
-
} else {
|
1254 |
-
$iv = $this->decryptIV;
|
1255 |
-
$pos = 0;
|
1256 |
-
}
|
1257 |
-
$len = strlen($ciphertext);
|
1258 |
-
$i = 0;
|
1259 |
-
if ($pos) {
|
1260 |
-
$orig_pos = $pos;
|
1261 |
-
$max = $block_size - $pos;
|
1262 |
-
if ($len >= $max) {
|
1263 |
-
$i = $max;
|
1264 |
-
$len-= $max;
|
1265 |
-
$pos = 0;
|
1266 |
-
} else {
|
1267 |
-
$i = $len;
|
1268 |
-
$pos+= $len;
|
1269 |
-
$len = 0;
|
1270 |
-
}
|
1271 |
-
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
1272 |
-
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1273 |
-
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1274 |
-
}
|
1275 |
-
while ($len >= $block_size) {
|
1276 |
-
$iv = $this->_encryptBlock($iv);
|
1277 |
-
$cb = substr($ciphertext, $i, $block_size);
|
1278 |
-
$plaintext.= $iv ^ $cb;
|
1279 |
-
$iv = $cb;
|
1280 |
-
$len-= $block_size;
|
1281 |
-
$i+= $block_size;
|
1282 |
-
}
|
1283 |
-
if ($len) {
|
1284 |
-
$iv = $this->_encryptBlock($iv);
|
1285 |
-
$plaintext.= $iv ^ substr($ciphertext, $i);
|
1286 |
-
$iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
|
1287 |
-
$pos = $len;
|
1288 |
-
}
|
1289 |
-
break;
|
1290 |
-
case CRYPT_MODE_OFB:
|
1291 |
-
$xor = $this->decryptIV;
|
1292 |
-
if (strlen($buffer['xor'])) {
|
1293 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1294 |
-
$block = substr($ciphertext, $i, $block_size);
|
1295 |
-
if (strlen($block) > strlen($buffer['xor'])) {
|
1296 |
-
$xor = $this->_encryptBlock($xor);
|
1297 |
-
$buffer['xor'].= $xor;
|
1298 |
-
}
|
1299 |
-
$key = $this->_string_shift($buffer['xor'], $block_size);
|
1300 |
-
$plaintext.= $block ^ $key;
|
1301 |
-
}
|
1302 |
-
} else {
|
1303 |
-
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1304 |
-
$xor = $this->_encryptBlock($xor);
|
1305 |
-
$plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
|
1306 |
-
}
|
1307 |
-
$key = $xor;
|
1308 |
-
}
|
1309 |
-
if ($this->continuousBuffer) {
|
1310 |
-
$this->decryptIV = $xor;
|
1311 |
-
if ($start = strlen($ciphertext) % $block_size) {
|
1312 |
-
$buffer['xor'] = substr($key, $start) . $buffer['xor'];
|
1313 |
-
}
|
1314 |
-
}
|
1315 |
-
break;
|
1316 |
-
case CRYPT_MODE_STREAM:
|
1317 |
-
$plaintext = $this->_decryptBlock($ciphertext);
|
1318 |
-
break;
|
1319 |
-
}
|
1320 |
-
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1321 |
-
}
|
1322 |
-
|
1323 |
-
/**
|
1324 |
-
* OpenSSL CTR Processor
|
1325 |
-
*
|
1326 |
-
* PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
|
1327 |
-
* for CTR is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
|
1328 |
-
* and Crypt_Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
|
1329 |
-
* function will emulate CTR with ECB when necessary.
|
1330 |
-
*
|
1331 |
-
* @see self::encrypt()
|
1332 |
-
* @see self::decrypt()
|
1333 |
-
* @param string $plaintext
|
1334 |
-
* @param string $encryptIV
|
1335 |
-
* @param array $buffer
|
1336 |
-
* @return string
|
1337 |
-
* @access private
|
1338 |
-
*/
|
1339 |
-
function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
|
1340 |
-
{
|
1341 |
-
$ciphertext = '';
|
1342 |
-
|
1343 |
-
$block_size = $this->block_size;
|
1344 |
-
$key = $this->key;
|
1345 |
-
|
1346 |
-
if ($this->openssl_emulate_ctr) {
|
1347 |
-
$xor = $encryptIV;
|
1348 |
-
if (strlen($buffer['ciphertext'])) {
|
1349 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1350 |
-
$block = substr($plaintext, $i, $block_size);
|
1351 |
-
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
1352 |
-
$result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1353 |
-
$result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
|
1354 |
-
$buffer['ciphertext'].= $result;
|
1355 |
-
}
|
1356 |
-
$this->_increment_str($xor);
|
1357 |
-
$otp = $this->_string_shift($buffer['ciphertext'], $block_size);
|
1358 |
-
$ciphertext.= $block ^ $otp;
|
1359 |
-
}
|
1360 |
-
} else {
|
1361 |
-
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1362 |
-
$block = substr($plaintext, $i, $block_size);
|
1363 |
-
$otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1364 |
-
$otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
|
1365 |
-
$this->_increment_str($xor);
|
1366 |
-
$ciphertext.= $block ^ $otp;
|
1367 |
-
}
|
1368 |
-
}
|
1369 |
-
if ($this->continuousBuffer) {
|
1370 |
-
$encryptIV = $xor;
|
1371 |
-
if ($start = strlen($plaintext) % $block_size) {
|
1372 |
-
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
1373 |
-
}
|
1374 |
-
}
|
1375 |
-
|
1376 |
-
return $ciphertext;
|
1377 |
-
}
|
1378 |
-
|
1379 |
-
if (strlen($buffer['ciphertext'])) {
|
1380 |
-
$ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
|
1381 |
-
$plaintext = substr($plaintext, strlen($ciphertext));
|
1382 |
-
|
1383 |
-
if (!strlen($plaintext)) {
|
1384 |
-
return $ciphertext;
|
1385 |
-
}
|
1386 |
-
}
|
1387 |
-
|
1388 |
-
$overflow = strlen($plaintext) % $block_size;
|
1389 |
-
if ($overflow) {
|
1390 |
-
$plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
|
1391 |
-
$encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1392 |
-
$temp = $this->_string_pop($encrypted, $block_size);
|
1393 |
-
$ciphertext.= $encrypted . ($plaintext2 ^ $temp);
|
1394 |
-
if ($this->continuousBuffer) {
|
1395 |
-
$buffer['ciphertext'] = substr($temp, $overflow);
|
1396 |
-
$encryptIV = $temp;
|
1397 |
-
}
|
1398 |
-
} elseif (!strlen($buffer['ciphertext'])) {
|
1399 |
-
$ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1400 |
-
$temp = $this->_string_pop($ciphertext, $block_size);
|
1401 |
-
if ($this->continuousBuffer) {
|
1402 |
-
$encryptIV = $temp;
|
1403 |
-
}
|
1404 |
-
}
|
1405 |
-
if ($this->continuousBuffer) {
|
1406 |
-
if (!defined('OPENSSL_RAW_DATA')) {
|
1407 |
-
$encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1408 |
-
}
|
1409 |
-
$encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1410 |
-
if ($overflow) {
|
1411 |
-
$this->_increment_str($encryptIV);
|
1412 |
-
}
|
1413 |
-
}
|
1414 |
-
|
1415 |
-
return $ciphertext;
|
1416 |
-
}
|
1417 |
-
|
1418 |
-
/**
|
1419 |
-
* OpenSSL OFB Processor
|
1420 |
-
*
|
1421 |
-
* PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
|
1422 |
-
* for OFB is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
|
1423 |
-
* and Crypt_Base::decrypt().
|
1424 |
-
*
|
1425 |
-
* @see self::encrypt()
|
1426 |
-
* @see self::decrypt()
|
1427 |
-
* @param string $plaintext
|
1428 |
-
* @param string $encryptIV
|
1429 |
-
* @param array $buffer
|
1430 |
-
* @return string
|
1431 |
-
* @access private
|
1432 |
-
*/
|
1433 |
-
function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
|
1434 |
-
{
|
1435 |
-
if (strlen($buffer['xor'])) {
|
1436 |
-
$ciphertext = $plaintext ^ $buffer['xor'];
|
1437 |
-
$buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
|
1438 |
-
$plaintext = substr($plaintext, strlen($ciphertext));
|
1439 |
-
} else {
|
1440 |
-
$ciphertext = '';
|
1441 |
-
}
|
1442 |
-
|
1443 |
-
$block_size = $this->block_size;
|
1444 |
-
|
1445 |
-
$len = strlen($plaintext);
|
1446 |
-
$key = $this->key;
|
1447 |
-
$overflow = $len % $block_size;
|
1448 |
-
|
1449 |
-
if (strlen($plaintext)) {
|
1450 |
-
if ($overflow) {
|
1451 |
-
$ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1452 |
-
$xor = $this->_string_pop($ciphertext, $block_size);
|
1453 |
-
if ($this->continuousBuffer) {
|
1454 |
-
$encryptIV = $xor;
|
1455 |
-
}
|
1456 |
-
$ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
|
1457 |
-
if ($this->continuousBuffer) {
|
1458 |
-
$buffer['xor'] = $xor;
|
1459 |
-
}
|
1460 |
-
} else {
|
1461 |
-
$ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1462 |
-
if ($this->continuousBuffer) {
|
1463 |
-
$encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
|
1464 |
-
}
|
1465 |
-
}
|
1466 |
-
}
|
1467 |
-
|
1468 |
-
return $ciphertext;
|
1469 |
-
}
|
1470 |
-
|
1471 |
-
/**
|
1472 |
-
* phpseclib <-> OpenSSL Mode Mapper
|
1473 |
-
*
|
1474 |
-
* May need to be overwritten by classes extending this one in some cases
|
1475 |
-
*
|
1476 |
-
* @return int
|
1477 |
-
* @access private
|
1478 |
-
*/
|
1479 |
-
function _openssl_translate_mode()
|
1480 |
-
{
|
1481 |
-
switch ($this->mode) {
|
1482 |
-
case CRYPT_MODE_ECB:
|
1483 |
-
return 'ecb';
|
1484 |
-
case CRYPT_MODE_CBC:
|
1485 |
-
return 'cbc';
|
1486 |
-
case CRYPT_MODE_CTR:
|
1487 |
-
return 'ctr';
|
1488 |
-
case CRYPT_MODE_CFB:
|
1489 |
-
return 'cfb';
|
1490 |
-
case CRYPT_MODE_OFB:
|
1491 |
-
return 'ofb';
|
1492 |
-
}
|
1493 |
-
}
|
1494 |
-
|
1495 |
-
/**
|
1496 |
-
* Pad "packets".
|
1497 |
-
*
|
1498 |
-
* Block ciphers working by encrypting between their specified [$this->]block_size at a time
|
1499 |
-
* If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
|
1500 |
-
* pad the input so that it is of the proper length.
|
1501 |
-
*
|
1502 |
-
* Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
|
1503 |
-
* where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
|
1504 |
-
* away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
|
1505 |
-
* transmitted separately)
|
1506 |
-
*
|
1507 |
-
* @see self::disablePadding()
|
1508 |
-
* @access public
|
1509 |
-
*/
|
1510 |
-
function enablePadding()
|
1511 |
-
{
|
1512 |
-
$this->padding = true;
|
1513 |
-
}
|
1514 |
-
|
1515 |
-
/**
|
1516 |
-
* Do not pad packets.
|
1517 |
-
*
|
1518 |
-
* @see self::enablePadding()
|
1519 |
-
* @access public
|
1520 |
-
*/
|
1521 |
-
function disablePadding()
|
1522 |
-
{
|
1523 |
-
$this->padding = false;
|
1524 |
-
}
|
1525 |
-
|
1526 |
-
/**
|
1527 |
-
* Treat consecutive "packets" as if they are a continuous buffer.
|
1528 |
-
*
|
1529 |
-
* Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
|
1530 |
-
* will yield different outputs:
|
1531 |
-
*
|
1532 |
-
* <code>
|
1533 |
-
* echo $rijndael->encrypt(substr($plaintext, 0, 16));
|
1534 |
-
* echo $rijndael->encrypt(substr($plaintext, 16, 16));
|
1535 |
-
* </code>
|
1536 |
-
* <code>
|
1537 |
-
* echo $rijndael->encrypt($plaintext);
|
1538 |
-
* </code>
|
1539 |
-
*
|
1540 |
-
* The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
|
1541 |
-
* another, as demonstrated with the following:
|
1542 |
-
*
|
1543 |
-
* <code>
|
1544 |
-
* $rijndael->encrypt(substr($plaintext, 0, 16));
|
1545 |
-
* echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
|
1546 |
-
* </code>
|
1547 |
-
* <code>
|
1548 |
-
* echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
|
1549 |
-
* </code>
|
1550 |
-
*
|
1551 |
-
* With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
|
1552 |
-
* outputs. The reason is due to the fact that the initialization vector's change after every encryption /
|
1553 |
-
* decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
|
1554 |
-
*
|
1555 |
-
* Put another way, when the continuous buffer is enabled, the state of the Crypt_*() object changes after each
|
1556 |
-
* encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
|
1557 |
-
* continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
|
1558 |
-
* however, they are also less intuitive and more likely to cause you problems.
|
1559 |
-
*
|
1560 |
-
* @see self::disableContinuousBuffer()
|
1561 |
-
* @access public
|
1562 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1563 |
-
*/
|
1564 |
-
function enableContinuousBuffer()
|
1565 |
-
{
|
1566 |
-
if ($this->mode == CRYPT_MODE_ECB) {
|
1567 |
-
return;
|
1568 |
-
}
|
1569 |
-
|
1570 |
-
$this->continuousBuffer = true;
|
1571 |
-
|
1572 |
-
$this->_setEngine();
|
1573 |
-
}
|
1574 |
-
|
1575 |
-
/**
|
1576 |
-
* Treat consecutive packets as if they are a discontinuous buffer.
|
1577 |
-
*
|
1578 |
-
* The default behavior.
|
1579 |
-
*
|
1580 |
-
* @see self::enableContinuousBuffer()
|
1581 |
-
* @access public
|
1582 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1583 |
-
*/
|
1584 |
-
function disableContinuousBuffer()
|
1585 |
-
{
|
1586 |
-
if ($this->mode == CRYPT_MODE_ECB) {
|
1587 |
-
return;
|
1588 |
-
}
|
1589 |
-
if (!$this->continuousBuffer) {
|
1590 |
-
return;
|
1591 |
-
}
|
1592 |
-
|
1593 |
-
$this->continuousBuffer = false;
|
1594 |
-
$this->changed = true;
|
1595 |
-
|
1596 |
-
$this->_setEngine();
|
1597 |
-
}
|
1598 |
-
|
1599 |
-
/**
|
1600 |
-
* Test for engine validity
|
1601 |
-
*
|
1602 |
-
* @see self::Crypt_Base()
|
1603 |
-
* @param int $engine
|
1604 |
-
* @access public
|
1605 |
-
* @return bool
|
1606 |
-
*/
|
1607 |
-
function isValidEngine($engine)
|
1608 |
-
{
|
1609 |
-
switch ($engine) {
|
1610 |
-
case CRYPT_ENGINE_OPENSSL:
|
1611 |
-
if ($this->mode == CRYPT_MODE_STREAM && $this->continuousBuffer) {
|
1612 |
-
return false;
|
1613 |
-
}
|
1614 |
-
$this->openssl_emulate_ctr = false;
|
1615 |
-
$result = $this->cipher_name_openssl &&
|
1616 |
-
extension_loaded('openssl') &&
|
1617 |
-
// PHP 5.3.0 - 5.3.2 did not let you set IV's
|
1618 |
-
version_compare(PHP_VERSION, '5.3.3', '>=');
|
1619 |
-
if (!$result) {
|
1620 |
-
return false;
|
1621 |
-
}
|
1622 |
-
|
1623 |
-
// prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
|
1624 |
-
// $options openssl_encrypt expected a boolean $raw_data.
|
1625 |
-
if (!defined('OPENSSL_RAW_DATA')) {
|
1626 |
-
$this->openssl_options = true;
|
1627 |
-
} else {
|
1628 |
-
$this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
|
1629 |
-
}
|
1630 |
-
|
1631 |
-
$methods = openssl_get_cipher_methods();
|
1632 |
-
if (in_array($this->cipher_name_openssl, $methods)) {
|
1633 |
-
return true;
|
1634 |
-
}
|
1635 |
-
// not all of openssl's symmetric cipher's support ctr. for those
|
1636 |
-
// that don't we'll emulate it
|
1637 |
-
switch ($this->mode) {
|
1638 |
-
case CRYPT_MODE_CTR:
|
1639 |
-
if (in_array($this->cipher_name_openssl_ecb, $methods)) {
|
1640 |
-
$this->openssl_emulate_ctr = true;
|
1641 |
-
return true;
|
1642 |
-
}
|
1643 |
-
}
|
1644 |
-
return false;
|
1645 |
-
case CRYPT_ENGINE_MCRYPT:
|
1646 |
-
return $this->cipher_name_mcrypt &&
|
1647 |
-
extension_loaded('mcrypt') &&
|
1648 |
-
in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
|
1649 |
-
case CRYPT_ENGINE_INTERNAL:
|
1650 |
-
return true;
|
1651 |
-
}
|
1652 |
-
|
1653 |
-
return false;
|
1654 |
-
}
|
1655 |
-
|
1656 |
-
/**
|
1657 |
-
* Sets the preferred crypt engine
|
1658 |
-
*
|
1659 |
-
* Currently, $engine could be:
|
1660 |
-
*
|
1661 |
-
* - CRYPT_ENGINE_OPENSSL [very fast]
|
1662 |
-
*
|
1663 |
-
* - CRYPT_ENGINE_MCRYPT [fast]
|
1664 |
-
*
|
1665 |
-
* - CRYPT_ENGINE_INTERNAL [slow]
|
1666 |
-
*
|
1667 |
-
* If the preferred crypt engine is not available the fastest available one will be used
|
1668 |
-
*
|
1669 |
-
* @see self::Crypt_Base()
|
1670 |
-
* @param int $engine
|
1671 |
-
* @access public
|
1672 |
-
*/
|
1673 |
-
function setPreferredEngine($engine)
|
1674 |
-
{
|
1675 |
-
switch ($engine) {
|
1676 |
-
//case CRYPT_ENGINE_OPENSSL:
|
1677 |
-
case CRYPT_ENGINE_MCRYPT:
|
1678 |
-
case CRYPT_ENGINE_INTERNAL:
|
1679 |
-
$this->preferredEngine = $engine;
|
1680 |
-
break;
|
1681 |
-
default:
|
1682 |
-
$this->preferredEngine = CRYPT_ENGINE_OPENSSL;
|
1683 |
-
}
|
1684 |
-
|
1685 |
-
$this->_setEngine();
|
1686 |
-
}
|
1687 |
-
|
1688 |
-
/**
|
1689 |
-
* Returns the engine currently being utilized
|
1690 |
-
*
|
1691 |
-
* @see self::_setEngine()
|
1692 |
-
* @access public
|
1693 |
-
*/
|
1694 |
-
function getEngine()
|
1695 |
-
{
|
1696 |
-
return $this->engine;
|
1697 |
-
}
|
1698 |
-
|
1699 |
-
/**
|
1700 |
-
* Sets the engine as appropriate
|
1701 |
-
*
|
1702 |
-
* @see self::Crypt_Base()
|
1703 |
-
* @access private
|
1704 |
-
*/
|
1705 |
-
function _setEngine()
|
1706 |
-
{
|
1707 |
-
$this->engine = null;
|
1708 |
-
|
1709 |
-
$candidateEngines = array(
|
1710 |
-
$this->preferredEngine,
|
1711 |
-
CRYPT_ENGINE_OPENSSL,
|
1712 |
-
CRYPT_ENGINE_MCRYPT
|
1713 |
-
);
|
1714 |
-
foreach ($candidateEngines as $engine) {
|
1715 |
-
if ($this->isValidEngine($engine)) {
|
1716 |
-
$this->engine = $engine;
|
1717 |
-
break;
|
1718 |
-
}
|
1719 |
-
}
|
1720 |
-
if (!$this->engine) {
|
1721 |
-
$this->engine = CRYPT_ENGINE_INTERNAL;
|
1722 |
-
}
|
1723 |
-
|
1724 |
-
if ($this->engine != CRYPT_ENGINE_MCRYPT && $this->enmcrypt) {
|
1725 |
-
// Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
|
1726 |
-
// (re)open them with the module named in $this->cipher_name_mcrypt
|
1727 |
-
@mcrypt_module_close($this->enmcrypt);
|
1728 |
-
@mcrypt_module_close($this->demcrypt);
|
1729 |
-
$this->enmcrypt = null;
|
1730 |
-
$this->demcrypt = null;
|
1731 |
-
|
1732 |
-
if ($this->ecb) {
|
1733 |
-
@mcrypt_module_close($this->ecb);
|
1734 |
-
$this->ecb = null;
|
1735 |
-
}
|
1736 |
-
}
|
1737 |
-
|
1738 |
-
$this->changed = true;
|
1739 |
-
}
|
1740 |
-
|
1741 |
-
/**
|
1742 |
-
* Encrypts a block
|
1743 |
-
*
|
1744 |
-
* @access private
|
1745 |
-
* @param string $in
|
1746 |
-
* @return string
|
1747 |
-
* @internal Must be extended by the child Crypt_* class
|
1748 |
-
*/
|
1749 |
-
function _encryptBlock($in)
|
1750 |
-
{
|
1751 |
-
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1752 |
-
}
|
1753 |
-
|
1754 |
-
/**
|
1755 |
-
* Decrypts a block
|
1756 |
-
*
|
1757 |
-
* @access private
|
1758 |
-
* @param string $in
|
1759 |
-
* @return string
|
1760 |
-
* @internal Must be extended by the child Crypt_* class
|
1761 |
-
*/
|
1762 |
-
function _decryptBlock($in)
|
1763 |
-
{
|
1764 |
-
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1765 |
-
}
|
1766 |
-
|
1767 |
-
/**
|
1768 |
-
* Setup the key (expansion)
|
1769 |
-
*
|
1770 |
-
* Only used if $engine == CRYPT_ENGINE_INTERNAL
|
1771 |
-
*
|
1772 |
-
* @see self::_setup()
|
1773 |
-
* @access private
|
1774 |
-
* @internal Must be extended by the child Crypt_* class
|
1775 |
-
*/
|
1776 |
-
function _setupKey()
|
1777 |
-
{
|
1778 |
-
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1779 |
-
}
|
1780 |
-
|
1781 |
-
/**
|
1782 |
-
* Setup the CRYPT_ENGINE_INTERNAL $engine
|
1783 |
-
*
|
1784 |
-
* (re)init, if necessary, the internal cipher $engine and flush all $buffers
|
1785 |
-
* Used (only) if $engine == CRYPT_ENGINE_INTERNAL
|
1786 |
-
*
|
1787 |
-
* _setup() will be called each time if $changed === true
|
1788 |
-
* typically this happens when using one or more of following public methods:
|
1789 |
-
*
|
1790 |
-
* - setKey()
|
1791 |
-
*
|
1792 |
-
* - setIV()
|
1793 |
-
*
|
1794 |
-
* - disableContinuousBuffer()
|
1795 |
-
*
|
1796 |
-
* - First run of encrypt() / decrypt() with no init-settings
|
1797 |
-
*
|
1798 |
-
* @see self::setKey()
|
1799 |
-
* @see self::setIV()
|
1800 |
-
* @see self::disableContinuousBuffer()
|
1801 |
-
* @access private
|
1802 |
-
* @internal _setup() is always called before en/decryption.
|
1803 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1804 |
-
*/
|
1805 |
-
function _setup()
|
1806 |
-
{
|
1807 |
-
$this->_clearBuffers();
|
1808 |
-
$this->_setupKey();
|
1809 |
-
|
1810 |
-
if ($this->use_inline_crypt) {
|
1811 |
-
$this->_setupInlineCrypt();
|
1812 |
-
}
|
1813 |
-
}
|
1814 |
-
|
1815 |
-
/**
|
1816 |
-
* Setup the CRYPT_ENGINE_MCRYPT $engine
|
1817 |
-
*
|
1818 |
-
* (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
|
1819 |
-
* Used (only) if $engine = CRYPT_ENGINE_MCRYPT
|
1820 |
-
*
|
1821 |
-
* _setupMcrypt() will be called each time if $changed === true
|
1822 |
-
* typically this happens when using one or more of following public methods:
|
1823 |
-
*
|
1824 |
-
* - setKey()
|
1825 |
-
*
|
1826 |
-
* - setIV()
|
1827 |
-
*
|
1828 |
-
* - disableContinuousBuffer()
|
1829 |
-
*
|
1830 |
-
* - First run of encrypt() / decrypt()
|
1831 |
-
*
|
1832 |
-
* @see self::setKey()
|
1833 |
-
* @see self::setIV()
|
1834 |
-
* @see self::disableContinuousBuffer()
|
1835 |
-
* @access private
|
1836 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1837 |
-
*/
|
1838 |
-
function _setupMcrypt()
|
1839 |
-
{
|
1840 |
-
$this->_clearBuffers();
|
1841 |
-
$this->enchanged = $this->dechanged = true;
|
1842 |
-
|
1843 |
-
if (!isset($this->enmcrypt)) {
|
1844 |
-
static $mcrypt_modes = array(
|
1845 |
-
CRYPT_MODE_CTR => 'ctr',
|
1846 |
-
CRYPT_MODE_ECB => MCRYPT_MODE_ECB,
|
1847 |
-
CRYPT_MODE_CBC => MCRYPT_MODE_CBC,
|
1848 |
-
CRYPT_MODE_CFB => 'ncfb',
|
1849 |
-
CRYPT_MODE_OFB => MCRYPT_MODE_NOFB,
|
1850 |
-
CRYPT_MODE_STREAM => MCRYPT_MODE_STREAM,
|
1851 |
-
);
|
1852 |
-
|
1853 |
-
$this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
|
1854 |
-
$this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
|
1855 |
-
|
1856 |
-
// we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
|
1857 |
-
// to workaround mcrypt's broken ncfb implementation in buffered mode
|
1858 |
-
// see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
|
1859 |
-
if ($this->mode == CRYPT_MODE_CFB) {
|
1860 |
-
$this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
|
1861 |
-
}
|
1862 |
-
} // else should mcrypt_generic_deinit be called?
|
1863 |
-
|
1864 |
-
if ($this->mode == CRYPT_MODE_CFB) {
|
1865 |
-
@mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
|
1866 |
-
}
|
1867 |
-
}
|
1868 |
-
|
1869 |
-
/**
|
1870 |
-
* Pads a string
|
1871 |
-
*
|
1872 |
-
* Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
|
1873 |
-
* $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
|
1874 |
-
* chr($this->block_size - (strlen($text) % $this->block_size)
|
1875 |
-
*
|
1876 |
-
* If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
|
1877 |
-
* and padding will, hence forth, be enabled.
|
1878 |
-
*
|
1879 |
-
* @see self::_unpad()
|
1880 |
-
* @param string $text
|
1881 |
-
* @access private
|
1882 |
-
* @return string
|
1883 |
-
*/
|
1884 |
-
function _pad($text)
|
1885 |
-
{
|
1886 |
-
$length = strlen($text);
|
1887 |
-
|
1888 |
-
if (!$this->padding) {
|
1889 |
-
if ($length % $this->block_size == 0) {
|
1890 |
-
return $text;
|
1891 |
-
} else {
|
1892 |
-
user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
|
1893 |
-
$this->padding = true;
|
1894 |
-
}
|
1895 |
-
}
|
1896 |
-
|
1897 |
-
$pad = $this->block_size - ($length % $this->block_size);
|
1898 |
-
|
1899 |
-
return str_pad($text, $length + $pad, chr($pad));
|
1900 |
-
}
|
1901 |
-
|
1902 |
-
/**
|
1903 |
-
* Unpads a string.
|
1904 |
-
*
|
1905 |
-
* If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
|
1906 |
-
* and false will be returned.
|
1907 |
-
*
|
1908 |
-
* @see self::_pad()
|
1909 |
-
* @param string $text
|
1910 |
-
* @access private
|
1911 |
-
* @return string
|
1912 |
-
*/
|
1913 |
-
function _unpad($text)
|
1914 |
-
{
|
1915 |
-
if (!$this->padding) {
|
1916 |
-
return $text;
|
1917 |
-
}
|
1918 |
-
|
1919 |
-
$length = ord($text[strlen($text) - 1]);
|
1920 |
-
|
1921 |
-
if (!$length || $length > $this->block_size) {
|
1922 |
-
return false;
|
1923 |
-
}
|
1924 |
-
|
1925 |
-
return substr($text, 0, -$length);
|
1926 |
-
}
|
1927 |
-
|
1928 |
-
/**
|
1929 |
-
* Clears internal buffers
|
1930 |
-
*
|
1931 |
-
* Clearing/resetting the internal buffers is done everytime
|
1932 |
-
* after disableContinuousBuffer() or on cipher $engine (re)init
|
1933 |
-
* ie after setKey() or setIV()
|
1934 |
-
*
|
1935 |
-
* @access public
|
1936 |
-
* @internal Could, but not must, extend by the child Crypt_* class
|
1937 |
-
*/
|
1938 |
-
function _clearBuffers()
|
1939 |
-
{
|
1940 |
-
$this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
|
1941 |
-
|
1942 |
-
// mcrypt's handling of invalid's $iv:
|
1943 |
-
// $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
|
1944 |
-
$this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
|
1945 |
-
|
1946 |
-
if (!$this->skip_key_adjustment) {
|
1947 |
-
$this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
|
1948 |
-
}
|
1949 |
-
}
|
1950 |
-
|
1951 |
-
/**
|
1952 |
-
* String Shift
|
1953 |
-
*
|
1954 |
-
* Inspired by array_shift
|
1955 |
-
*
|
1956 |
-
* @param string $string
|
1957 |
-
* @param int $index
|
1958 |
-
* @access private
|
1959 |
-
* @return string
|
1960 |
-
*/
|
1961 |
-
function _string_shift(&$string, $index = 1)
|
1962 |
-
{
|
1963 |
-
$substr = substr($string, 0, $index);
|
1964 |
-
$string = substr($string, $index);
|
1965 |
-
return $substr;
|
1966 |
-
}
|
1967 |
-
|
1968 |
-
/**
|
1969 |
-
* String Pop
|
1970 |
-
*
|
1971 |
-
* Inspired by array_pop
|
1972 |
-
*
|
1973 |
-
* @param string $string
|
1974 |
-
* @param int $index
|
1975 |
-
* @access private
|
1976 |
-
* @return string
|
1977 |
-
*/
|
1978 |
-
function _string_pop(&$string, $index = 1)
|
1979 |
-
{
|
1980 |
-
$substr = substr($string, -$index);
|
1981 |
-
$string = substr($string, 0, -$index);
|
1982 |
-
return $substr;
|
1983 |
-
}
|
1984 |
-
|
1985 |
-
/**
|
1986 |
-
* Increment the current string
|
1987 |
-
*
|
1988 |
-
* @see self::decrypt()
|
1989 |
-
* @see self::encrypt()
|
1990 |
-
* @param string $var
|
1991 |
-
* @access private
|
1992 |
-
*/
|
1993 |
-
function _increment_str(&$var)
|
1994 |
-
{
|
1995 |
-
for ($i = 4; $i <= strlen($var); $i+= 4) {
|
1996 |
-
$temp = substr($var, -$i, 4);
|
1997 |
-
switch ($temp) {
|
1998 |
-
case "\xFF\xFF\xFF\xFF":
|
1999 |
-
$var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
|
2000 |
-
break;
|
2001 |
-
case "\x7F\xFF\xFF\xFF":
|
2002 |
-
$var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
|
2003 |
-
return;
|
2004 |
-
default:
|
2005 |
-
$temp = unpack('Nnum', $temp);
|
2006 |
-
$var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
|
2007 |
-
return;
|
2008 |
-
}
|
2009 |
-
}
|
2010 |
-
|
2011 |
-
$remainder = strlen($var) % 4;
|
2012 |
-
|
2013 |
-
if ($remainder == 0) {
|
2014 |
-
return;
|
2015 |
-
}
|
2016 |
-
|
2017 |
-
$temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
|
2018 |
-
$temp = substr(pack('N', $temp['num'] + 1), -$remainder);
|
2019 |
-
$var = substr_replace($var, $temp, 0, $remainder);
|
2020 |
-
}
|
2021 |
-
|
2022 |
-
/**
|
2023 |
-
* Setup the performance-optimized function for de/encrypt()
|
2024 |
-
*
|
2025 |
-
* Stores the created (or existing) callback function-name
|
2026 |
-
* in $this->inline_crypt
|
2027 |
-
*
|
2028 |
-
* Internally for phpseclib developers:
|
2029 |
-
*
|
2030 |
-
* _setupInlineCrypt() would be called only if:
|
2031 |
-
*
|
2032 |
-
* - $engine == CRYPT_ENGINE_INTERNAL and
|
2033 |
-
*
|
2034 |
-
* - $use_inline_crypt === true
|
2035 |
-
*
|
2036 |
-
* - each time on _setup(), after(!) _setupKey()
|
2037 |
-
*
|
2038 |
-
*
|
2039 |
-
* This ensures that _setupInlineCrypt() has always a
|
2040 |
-
* full ready2go initializated internal cipher $engine state
|
2041 |
-
* where, for example, the keys allready expanded,
|
2042 |
-
* keys/block_size calculated and such.
|
2043 |
-
*
|
2044 |
-
* It is, each time if called, the responsibility of _setupInlineCrypt():
|
2045 |
-
*
|
2046 |
-
* - to set $this->inline_crypt to a valid and fully working callback function
|
2047 |
-
* as a (faster) replacement for encrypt() / decrypt()
|
2048 |
-
*
|
2049 |
-
* - NOT to create unlimited callback functions (for memory reasons!)
|
2050 |
-
* no matter how often _setupInlineCrypt() would be called. At some
|
2051 |
-
* point of amount they must be generic re-useable.
|
2052 |
-
*
|
2053 |
-
* - the code of _setupInlineCrypt() it self,
|
2054 |
-
* and the generated callback code,
|
2055 |
-
* must be, in following order:
|
2056 |
-
* - 100% safe
|
2057 |
-
* - 100% compatible to encrypt()/decrypt()
|
2058 |
-
* - using only php5+ features/lang-constructs/php-extensions if
|
2059 |
-
* compatibility (down to php4) or fallback is provided
|
2060 |
-
* - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
|
2061 |
-
* - >= 10% faster than encrypt()/decrypt() [which is, by the way,
|
2062 |
-
* the reason for the existence of _setupInlineCrypt() :-)]
|
2063 |
-
* - memory-nice
|
2064 |
-
* - short (as good as possible)
|
2065 |
-
*
|
2066 |
-
* Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
|
2067 |
-
* - In case of using inline crypting, _setupInlineCrypt() must extend by the child Crypt_* class.
|
2068 |
-
* - The following variable names are reserved:
|
2069 |
-
* - $_* (all variable names prefixed with an underscore)
|
2070 |
-
* - $self (object reference to it self. Do not use $this, but $self instead)
|
2071 |
-
* - $in (the content of $in has to en/decrypt by the generated code)
|
2072 |
-
* - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
|
2073 |
-
*
|
2074 |
-
*
|
2075 |
-
* @see self::_setup()
|
2076 |
-
* @see self::_createInlineCryptFunction()
|
2077 |
-
* @see self::encrypt()
|
2078 |
-
* @see self::decrypt()
|
2079 |
-
* @access private
|
2080 |
-
* @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
|
2081 |
-
*/
|
2082 |
-
function _setupInlineCrypt()
|
2083 |
-
{
|
2084 |
-
// If, for any reason, an extending Crypt_Base() Crypt_* class
|
2085 |
-
// not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
|
2086 |
-
// ie in the class var declaration of $use_inline_crypt in general for the Crypt_* class,
|
2087 |
-
// in the constructor at object instance-time
|
2088 |
-
// or, if it's runtime-specific, at runtime
|
2089 |
-
|
2090 |
-
$this->use_inline_crypt = false;
|
2091 |
-
}
|
2092 |
-
|
2093 |
-
/**
|
2094 |
-
* Creates the performance-optimized function for en/decrypt()
|
2095 |
-
*
|
2096 |
-
* Internally for phpseclib developers:
|
2097 |
-
*
|
2098 |
-
* _createInlineCryptFunction():
|
2099 |
-
*
|
2100 |
-
* - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
|
2101 |
-
* with the current [$this->]mode of operation code
|
2102 |
-
*
|
2103 |
-
* - create the $inline function, which called by encrypt() / decrypt()
|
2104 |
-
* as its replacement to speed up the en/decryption operations.
|
2105 |
-
*
|
2106 |
-
* - return the name of the created $inline callback function
|
2107 |
-
*
|
2108 |
-
* - used to speed up en/decryption
|
2109 |
-
*
|
2110 |
-
*
|
2111 |
-
*
|
2112 |
-
* The main reason why can speed up things [up to 50%] this way are:
|
2113 |
-
*
|
2114 |
-
* - using variables more effective then regular.
|
2115 |
-
* (ie no use of expensive arrays but integers $k_0, $k_1 ...
|
2116 |
-
* or even, for example, the pure $key[] values hardcoded)
|
2117 |
-
*
|
2118 |
-
* - avoiding 1000's of function calls of ie _encryptBlock()
|
2119 |
-
* but inlining the crypt operations.
|
2120 |
-
* in the mode of operation for() loop.
|
2121 |
-
*
|
2122 |
-
* - full loop unroll the (sometimes key-dependent) rounds
|
2123 |
-
* avoiding this way ++$i counters and runtime-if's etc...
|
2124 |
-
*
|
2125 |
-
* The basic code architectur of the generated $inline en/decrypt()
|
2126 |
-
* lambda function, in pseudo php, is:
|
2127 |
-
*
|
2128 |
-
* <code>
|
2129 |
-
* +----------------------------------------------------------------------------------------------+
|
2130 |
-
* | callback $inline = create_function: |
|
2131 |
-
* | lambda_function_0001_crypt_ECB($action, $text) |
|
2132 |
-
* | { |
|
2133 |
-
* | INSERT PHP CODE OF: |
|
2134 |
-
* | $cipher_code['init_crypt']; // general init code. |
|
2135 |
-
* | // ie: $sbox'es declarations used for |
|
2136 |
-
* | // encrypt and decrypt'ing. |
|
2137 |
-
* | |
|
2138 |
-
* | switch ($action) { |
|
2139 |
-
* | case 'encrypt': |
|
2140 |
-
* | INSERT PHP CODE OF: |
|
2141 |
-
* | $cipher_code['init_encrypt']; // encrypt sepcific init code. |
|
2142 |
-
* | ie: specified $key or $box |
|
2143 |
-
* | declarations for encrypt'ing. |
|
2144 |
-
* | |
|
2145 |
-
* | foreach ($ciphertext) { |
|
2146 |
-
* | $in = $block_size of $ciphertext; |
|
2147 |
-
* | |
|
2148 |
-
* | INSERT PHP CODE OF: |
|
2149 |
-
* | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: |
|
2150 |
-
* | // strlen($in) == $this->block_size |
|
2151 |
-
* | // here comes the cipher algorithm in action |
|
2152 |
-
* | // for encryption. |
|
2153 |
-
* | // $cipher_code['encrypt_block'] has to |
|
2154 |
-
* | // encrypt the content of the $in variable |
|
2155 |
-
* | |
|
2156 |
-
* | $plaintext .= $in; |
|
2157 |
-
* | } |
|
2158 |
-
* | return $plaintext; |
|
2159 |
-
* | |
|
2160 |
-
* | case 'decrypt': |
|
2161 |
-
* | INSERT PHP CODE OF: |
|
2162 |
-
* | $cipher_code['init_decrypt']; // decrypt sepcific init code |
|
2163 |
-
* | ie: specified $key or $box |
|
2164 |
-
* | declarations for decrypt'ing. |
|
2165 |
-
* | foreach ($plaintext) { |
|
2166 |
-
* | $in = $block_size of $plaintext; |
|
2167 |
-
* | |
|
2168 |
-
* | INSERT PHP CODE OF: |
|
2169 |
-
* | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always |
|
2170 |
-
* | // strlen($in) == $this->block_size |
|
2171 |
-
* | // here comes the cipher algorithm in action |
|
2172 |
-
* | // for decryption. |
|
2173 |
-
* | // $cipher_code['decrypt_block'] has to |
|
2174 |
-
* | // decrypt the content of the $in variable |
|
2175 |
-
* | $ciphertext .= $in; |
|
2176 |
-
* | } |
|
2177 |
-
* | return $ciphertext; |
|
2178 |
-
* | } |
|
2179 |
-
* | } |
|
2180 |
-
* +----------------------------------------------------------------------------------------------+
|
2181 |
-
* </code>
|
2182 |
-
*
|
2183 |
-
* See also the Crypt_*::_setupInlineCrypt()'s for
|
2184 |
-
* productive inline $cipher_code's how they works.
|
2185 |
-
*
|
2186 |
-
* Structure of:
|
2187 |
-
* <code>
|
2188 |
-
* $cipher_code = array(
|
2189 |
-
* 'init_crypt' => (string) '', // optional
|
2190 |
-
* 'init_encrypt' => (string) '', // optional
|
2191 |
-
* 'init_decrypt' => (string) '', // optional
|
2192 |
-
* 'encrypt_block' => (string) '', // required
|
2193 |
-
* 'decrypt_block' => (string) '' // required
|
2194 |
-
* );
|
2195 |
-
* </code>
|
2196 |
-
*
|
2197 |
-
* @see self::_setupInlineCrypt()
|
2198 |
-
* @see self::encrypt()
|
2199 |
-
* @see self::decrypt()
|
2200 |
-
* @param array $cipher_code
|
2201 |
-
* @access private
|
2202 |
-
* @return string (the name of the created callback function)
|
2203 |
-
*/
|
2204 |
-
function _createInlineCryptFunction($cipher_code)
|
2205 |
-
{
|
2206 |
-
$block_size = $this->block_size;
|
2207 |
-
|
2208 |
-
// optional
|
2209 |
-
$init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : '';
|
2210 |
-
$init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : '';
|
2211 |
-
$init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : '';
|
2212 |
-
// required
|
2213 |
-
$encrypt_block = $cipher_code['encrypt_block'];
|
2214 |
-
$decrypt_block = $cipher_code['decrypt_block'];
|
2215 |
-
|
2216 |
-
// Generating mode of operation inline code,
|
2217 |
-
// merged with the $cipher_code algorithm
|
2218 |
-
// for encrypt- and decryption.
|
2219 |
-
switch ($this->mode) {
|
2220 |
-
case CRYPT_MODE_ECB:
|
2221 |
-
$encrypt = $init_encrypt . '
|
2222 |
-
$_ciphertext = "";
|
2223 |
-
$_plaintext_len = strlen($_text);
|
2224 |
-
|
2225 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2226 |
-
$in = substr($_text, $_i, '.$block_size.');
|
2227 |
-
'.$encrypt_block.'
|
2228 |
-
$_ciphertext.= $in;
|
2229 |
-
}
|
2230 |
-
|
2231 |
-
return $_ciphertext;
|
2232 |
-
';
|
2233 |
-
|
2234 |
-
$decrypt = $init_decrypt . '
|
2235 |
-
$_plaintext = "";
|
2236 |
-
$_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
|
2237 |
-
$_ciphertext_len = strlen($_text);
|
2238 |
-
|
2239 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2240 |
-
$in = substr($_text, $_i, '.$block_size.');
|
2241 |
-
'.$decrypt_block.'
|
2242 |
-
$_plaintext.= $in;
|
2243 |
-
}
|
2244 |
-
|
2245 |
-
return $self->_unpad($_plaintext);
|
2246 |
-
';
|
2247 |
-
break;
|
2248 |
-
case CRYPT_MODE_CTR:
|
2249 |
-
$encrypt = $init_encrypt . '
|
2250 |
-
$_ciphertext = "";
|
2251 |
-
$_plaintext_len = strlen($_text);
|
2252 |
-
$_xor = $self->encryptIV;
|
2253 |
-
$_buffer = &$self->enbuffer;
|
2254 |
-
if (strlen($_buffer["ciphertext"])) {
|
2255 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2256 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2257 |
-
if (strlen($_block) > strlen($_buffer["ciphertext"])) {
|
2258 |
-
$in = $_xor;
|
2259 |
-
'.$encrypt_block.'
|
2260 |
-
$self->_increment_str($_xor);
|
2261 |
-
$_buffer["ciphertext"].= $in;
|
2262 |
-
}
|
2263 |
-
$_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
|
2264 |
-
$_ciphertext.= $_block ^ $_key;
|
2265 |
-
}
|
2266 |
-
} else {
|
2267 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2268 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2269 |
-
$in = $_xor;
|
2270 |
-
'.$encrypt_block.'
|
2271 |
-
$self->_increment_str($_xor);
|
2272 |
-
$_key = $in;
|
2273 |
-
$_ciphertext.= $_block ^ $_key;
|
2274 |
-
}
|
2275 |
-
}
|
2276 |
-
if ($self->continuousBuffer) {
|
2277 |
-
$self->encryptIV = $_xor;
|
2278 |
-
if ($_start = $_plaintext_len % '.$block_size.') {
|
2279 |
-
$_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
|
2280 |
-
}
|
2281 |
-
}
|
2282 |
-
|
2283 |
-
return $_ciphertext;
|
2284 |
-
';
|
2285 |
-
|
2286 |
-
$decrypt = $init_encrypt . '
|
2287 |
-
$_plaintext = "";
|
2288 |
-
$_ciphertext_len = strlen($_text);
|
2289 |
-
$_xor = $self->decryptIV;
|
2290 |
-
$_buffer = &$self->debuffer;
|
2291 |
-
|
2292 |
-
if (strlen($_buffer["ciphertext"])) {
|
2293 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2294 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2295 |
-
if (strlen($_block) > strlen($_buffer["ciphertext"])) {
|
2296 |
-
$in = $_xor;
|
2297 |
-
'.$encrypt_block.'
|
2298 |
-
$self->_increment_str($_xor);
|
2299 |
-
$_buffer["ciphertext"].= $in;
|
2300 |
-
}
|
2301 |
-
$_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
|
2302 |
-
$_plaintext.= $_block ^ $_key;
|
2303 |
-
}
|
2304 |
-
} else {
|
2305 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2306 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2307 |
-
$in = $_xor;
|
2308 |
-
'.$encrypt_block.'
|
2309 |
-
$self->_increment_str($_xor);
|
2310 |
-
$_key = $in;
|
2311 |
-
$_plaintext.= $_block ^ $_key;
|
2312 |
-
}
|
2313 |
-
}
|
2314 |
-
if ($self->continuousBuffer) {
|
2315 |
-
$self->decryptIV = $_xor;
|
2316 |
-
if ($_start = $_ciphertext_len % '.$block_size.') {
|
2317 |
-
$_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
|
2318 |
-
}
|
2319 |
-
}
|
2320 |
-
|
2321 |
-
return $_plaintext;
|
2322 |
-
';
|
2323 |
-
break;
|
2324 |
-
case CRYPT_MODE_CFB:
|
2325 |
-
$encrypt = $init_encrypt . '
|
2326 |
-
$_ciphertext = "";
|
2327 |
-
$_buffer = &$self->enbuffer;
|
2328 |
-
|
2329 |
-
if ($self->continuousBuffer) {
|
2330 |
-
$_iv = &$self->encryptIV;
|
2331 |
-
$_pos = &$_buffer["pos"];
|
2332 |
-
} else {
|
2333 |
-
$_iv = $self->encryptIV;
|
2334 |
-
$_pos = 0;
|
2335 |
-
}
|
2336 |
-
$_len = strlen($_text);
|
2337 |
-
$_i = 0;
|
2338 |
-
if ($_pos) {
|
2339 |
-
$_orig_pos = $_pos;
|
2340 |
-
$_max = '.$block_size.' - $_pos;
|
2341 |
-
if ($_len >= $_max) {
|
2342 |
-
$_i = $_max;
|
2343 |
-
$_len-= $_max;
|
2344 |
-
$_pos = 0;
|
2345 |
-
} else {
|
2346 |
-
$_i = $_len;
|
2347 |
-
$_pos+= $_len;
|
2348 |
-
$_len = 0;
|
2349 |
-
}
|
2350 |
-
$_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
|
2351 |
-
$_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
|
2352 |
-
}
|
2353 |
-
while ($_len >= '.$block_size.') {
|
2354 |
-
$in = $_iv;
|
2355 |
-
'.$encrypt_block.';
|
2356 |
-
$_iv = $in ^ substr($_text, $_i, '.$block_size.');
|
2357 |
-
$_ciphertext.= $_iv;
|
2358 |
-
$_len-= '.$block_size.';
|
2359 |
-
$_i+= '.$block_size.';
|
2360 |
-
}
|
2361 |
-
if ($_len) {
|
2362 |
-
$in = $_iv;
|
2363 |
-
'.$encrypt_block.'
|
2364 |
-
$_iv = $in;
|
2365 |
-
$_block = $_iv ^ substr($_text, $_i);
|
2366 |
-
$_iv = substr_replace($_iv, $_block, 0, $_len);
|
2367 |
-
$_ciphertext.= $_block;
|
2368 |
-
$_pos = $_len;
|
2369 |
-
}
|
2370 |
-
return $_ciphertext;
|
2371 |
-
';
|
2372 |
-
|
2373 |
-
$decrypt = $init_encrypt . '
|
2374 |
-
$_plaintext = "";
|
2375 |
-
$_buffer = &$self->debuffer;
|
2376 |
-
|
2377 |
-
if ($self->continuousBuffer) {
|
2378 |
-
$_iv = &$self->decryptIV;
|
2379 |
-
$_pos = &$_buffer["pos"];
|
2380 |
-
} else {
|
2381 |
-
$_iv = $self->decryptIV;
|
2382 |
-
$_pos = 0;
|
2383 |
-
}
|
2384 |
-
$_len = strlen($_text);
|
2385 |
-
$_i = 0;
|
2386 |
-
if ($_pos) {
|
2387 |
-
$_orig_pos = $_pos;
|
2388 |
-
$_max = '.$block_size.' - $_pos;
|
2389 |
-
if ($_len >= $_max) {
|
2390 |
-
$_i = $_max;
|
2391 |
-
$_len-= $_max;
|
2392 |
-
$_pos = 0;
|
2393 |
-
} else {
|
2394 |
-
$_i = $_len;
|
2395 |
-
$_pos+= $_len;
|
2396 |
-
$_len = 0;
|
2397 |
-
}
|
2398 |
-
$_plaintext = substr($_iv, $_orig_pos) ^ $_text;
|
2399 |
-
$_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
|
2400 |
-
}
|
2401 |
-
while ($_len >= '.$block_size.') {
|
2402 |
-
$in = $_iv;
|
2403 |
-
'.$encrypt_block.'
|
2404 |
-
$_iv = $in;
|
2405 |
-
$cb = substr($_text, $_i, '.$block_size.');
|
2406 |
-
$_plaintext.= $_iv ^ $cb;
|
2407 |
-
$_iv = $cb;
|
2408 |
-
$_len-= '.$block_size.';
|
2409 |
-
$_i+= '.$block_size.';
|
2410 |
-
}
|
2411 |
-
if ($_len) {
|
2412 |
-
$in = $_iv;
|
2413 |
-
'.$encrypt_block.'
|
2414 |
-
$_iv = $in;
|
2415 |
-
$_plaintext.= $_iv ^ substr($_text, $_i);
|
2416 |
-
$_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
|
2417 |
-
$_pos = $_len;
|
2418 |
-
}
|
2419 |
-
|
2420 |
-
return $_plaintext;
|
2421 |
-
';
|
2422 |
-
break;
|
2423 |
-
case CRYPT_MODE_OFB:
|
2424 |
-
$encrypt = $init_encrypt . '
|
2425 |
-
$_ciphertext = "";
|
2426 |
-
$_plaintext_len = strlen($_text);
|
2427 |
-
$_xor = $self->encryptIV;
|
2428 |
-
$_buffer = &$self->enbuffer;
|
2429 |
-
|
2430 |
-
if (strlen($_buffer["xor"])) {
|
2431 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2432 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2433 |
-
if (strlen($_block) > strlen($_buffer["xor"])) {
|
2434 |
-
$in = $_xor;
|
2435 |
-
'.$encrypt_block.'
|
2436 |
-
$_xor = $in;
|
2437 |
-
$_buffer["xor"].= $_xor;
|
2438 |
-
}
|
2439 |
-
$_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
|
2440 |
-
$_ciphertext.= $_block ^ $_key;
|
2441 |
-
}
|
2442 |
-
} else {
|
2443 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2444 |
-
$in = $_xor;
|
2445 |
-
'.$encrypt_block.'
|
2446 |
-
$_xor = $in;
|
2447 |
-
$_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
|
2448 |
-
}
|
2449 |
-
$_key = $_xor;
|
2450 |
-
}
|
2451 |
-
if ($self->continuousBuffer) {
|
2452 |
-
$self->encryptIV = $_xor;
|
2453 |
-
if ($_start = $_plaintext_len % '.$block_size.') {
|
2454 |
-
$_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
|
2455 |
-
}
|
2456 |
-
}
|
2457 |
-
return $_ciphertext;
|
2458 |
-
';
|
2459 |
-
|
2460 |
-
$decrypt = $init_encrypt . '
|
2461 |
-
$_plaintext = "";
|
2462 |
-
$_ciphertext_len = strlen($_text);
|
2463 |
-
$_xor = $self->decryptIV;
|
2464 |
-
$_buffer = &$self->debuffer;
|
2465 |
-
|
2466 |
-
if (strlen($_buffer["xor"])) {
|
2467 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2468 |
-
$_block = substr($_text, $_i, '.$block_size.');
|
2469 |
-
if (strlen($_block) > strlen($_buffer["xor"])) {
|
2470 |
-
$in = $_xor;
|
2471 |
-
'.$encrypt_block.'
|
2472 |
-
$_xor = $in;
|
2473 |
-
$_buffer["xor"].= $_xor;
|
2474 |
-
}
|
2475 |
-
$_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
|
2476 |
-
$_plaintext.= $_block ^ $_key;
|
2477 |
-
}
|
2478 |
-
} else {
|
2479 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2480 |
-
$in = $_xor;
|
2481 |
-
'.$encrypt_block.'
|
2482 |
-
$_xor = $in;
|
2483 |
-
$_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
|
2484 |
-
}
|
2485 |
-
$_key = $_xor;
|
2486 |
-
}
|
2487 |
-
if ($self->continuousBuffer) {
|
2488 |
-
$self->decryptIV = $_xor;
|
2489 |
-
if ($_start = $_ciphertext_len % '.$block_size.') {
|
2490 |
-
$_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
|
2491 |
-
}
|
2492 |
-
}
|
2493 |
-
return $_plaintext;
|
2494 |
-
';
|
2495 |
-
break;
|
2496 |
-
case CRYPT_MODE_STREAM:
|
2497 |
-
$encrypt = $init_encrypt . '
|
2498 |
-
$_ciphertext = "";
|
2499 |
-
'.$encrypt_block.'
|
2500 |
-
return $_ciphertext;
|
2501 |
-
';
|
2502 |
-
$decrypt = $init_decrypt . '
|
2503 |
-
$_plaintext = "";
|
2504 |
-
'.$decrypt_block.'
|
2505 |
-
return $_plaintext;
|
2506 |
-
';
|
2507 |
-
break;
|
2508 |
-
// case CRYPT_MODE_CBC:
|
2509 |
-
default:
|
2510 |
-
$encrypt = $init_encrypt . '
|
2511 |
-
$_ciphertext = "";
|
2512 |
-
$_plaintext_len = strlen($_text);
|
2513 |
-
|
2514 |
-
$in = $self->encryptIV;
|
2515 |
-
|
2516 |
-
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2517 |
-
$in = substr($_text, $_i, '.$block_size.') ^ $in;
|
2518 |
-
'.$encrypt_block.'
|
2519 |
-
$_ciphertext.= $in;
|
2520 |
-
}
|
2521 |
-
|
2522 |
-
if ($self->continuousBuffer) {
|
2523 |
-
$self->encryptIV = $in;
|
2524 |
-
}
|
2525 |
-
|
2526 |
-
return $_ciphertext;
|
2527 |
-
';
|
2528 |
-
|
2529 |
-
$decrypt = $init_decrypt . '
|
2530 |
-
$_plaintext = "";
|
2531 |
-
$_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
|
2532 |
-
$_ciphertext_len = strlen($_text);
|
2533 |
-
|
2534 |
-
$_iv = $self->decryptIV;
|
2535 |
-
|
2536 |
-
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2537 |
-
$in = $_block = substr($_text, $_i, '.$block_size.');
|
2538 |
-
'.$decrypt_block.'
|
2539 |
-
$_plaintext.= $in ^ $_iv;
|
2540 |
-
$_iv = $_block;
|
2541 |
-
}
|
2542 |
-
|
2543 |
-
if ($self->continuousBuffer) {
|
2544 |
-
$self->decryptIV = $_iv;
|
2545 |
-
}
|
2546 |
-
|
2547 |
-
return $self->_unpad($_plaintext);
|
2548 |
-
';
|
2549 |
-
break;
|
2550 |
-
}
|
2551 |
-
|
2552 |
-
// Create the $inline function and return its name as string. Ready to run!
|
2553 |
-
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
2554 |
-
eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
|
2555 |
-
return $func;
|
2556 |
-
}
|
2557 |
-
|
2558 |
-
return create_function('$_action, &$self, $_text', $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }');
|
2559 |
-
}
|
2560 |
-
|
2561 |
-
/**
|
2562 |
-
* Holds the lambda_functions table (classwide)
|
2563 |
-
*
|
2564 |
-
* Each name of the lambda function, created from
|
2565 |
-
* _setupInlineCrypt() && _createInlineCryptFunction()
|
2566 |
-
* is stored, classwide (!), here for reusing.
|
2567 |
-
*
|
2568 |
-
* The string-based index of $function is a classwide
|
2569 |
-
* unique value representing, at least, the $mode of
|
2570 |
-
* operation (or more... depends of the optimizing level)
|
2571 |
-
* for which $mode the lambda function was created.
|
2572 |
-
*
|
2573 |
-
* @access private
|
2574 |
-
* @return array &$functions
|
2575 |
-
*/
|
2576 |
-
function &_getLambdaFunctions()
|
2577 |
-
{
|
2578 |
-
static $functions = array();
|
2579 |
-
return $functions;
|
2580 |
-
}
|
2581 |
-
|
2582 |
-
/**
|
2583 |
-
* Generates a digest from $bytes
|
2584 |
-
*
|
2585 |
-
* @see self::_setupInlineCrypt()
|
2586 |
-
* @access private
|
2587 |
-
* @param $bytes
|
2588 |
-
* @return string
|
2589 |
-
*/
|
2590 |
-
function _hashInlineCryptFunction($bytes)
|
2591 |
-
{
|
2592 |
-
if (!defined('CRYPT_BASE_WHIRLPOOL_AVAILABLE')) {
|
2593 |
-
define('CRYPT_BASE_WHIRLPOOL_AVAILABLE', (bool)(extension_loaded('hash') && in_array('whirlpool', hash_algos())));
|
2594 |
-
}
|
2595 |
-
|
2596 |
-
$result = '';
|
2597 |
-
$hash = $bytes;
|
2598 |
-
|
2599 |
-
switch (true) {
|
2600 |
-
case CRYPT_BASE_WHIRLPOOL_AVAILABLE:
|
2601 |
-
foreach (str_split($bytes, 64) as $t) {
|
2602 |
-
$hash = hash('whirlpool', $hash, true);
|
2603 |
-
$result .= $t ^ $hash;
|
2604 |
-
}
|
2605 |
-
return $result . hash('whirlpool', $hash, true);
|
2606 |
-
default:
|
2607 |
-
$len = strlen($bytes);
|
2608 |
-
for ($i = 0; $i < $len; $i+=20) {
|
2609 |
-
$t = substr($bytes, $i, 20);
|
2610 |
-
$hash = pack('H*', sha1($hash));
|
2611 |
-
$result .= $t ^ $hash;
|
2612 |
-
}
|
2613 |
-
return $result . pack('H*', sha1($hash));
|
2614 |
-
}
|
2615 |
-
}
|
2616 |
-
|
2617 |
-
/**
|
2618 |
-
* Convert float to int
|
2619 |
-
*
|
2620 |
-
* On 32-bit Linux installs running PHP < 5.3 converting floats to ints doesn't always work
|
2621 |
-
*
|
2622 |
-
* @access private
|
2623 |
-
* @param string $x
|
2624 |
-
* @return int
|
2625 |
-
*/
|
2626 |
-
function safe_intval($x)
|
2627 |
-
{
|
2628 |
-
switch (true) {
|
2629 |
-
case is_int($x):
|
2630 |
-
// PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
|
2631 |
-
case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
|
2632 |
-
// PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
|
2633 |
-
case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
|
2634 |
-
return $x;
|
2635 |
-
}
|
2636 |
-
return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
|
2637 |
-
((fmod(floor($x / 0x80000000), 2) & 1) << 31);
|
2638 |
-
}
|
2639 |
-
|
2640 |
-
/**
|
2641 |
-
* eval()'able string for in-line float to int
|
2642 |
-
*
|
2643 |
-
* @access private
|
2644 |
-
* @return string
|
2645 |
-
*/
|
2646 |
-
function safe_intval_inline()
|
2647 |
-
{
|
2648 |
-
// on 32-bit linux systems with PHP < 5.3 float to integer conversion is bad
|
2649 |
-
switch (true) {
|
2650 |
-
case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
|
2651 |
-
case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
|
2652 |
-
case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
|
2653 |
-
return '%s';
|
2654 |
-
break;
|
2655 |
-
default:
|
2656 |
-
$safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
|
2657 |
-
return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
|
2658 |
-
}
|
2659 |
-
}
|
2660 |
-
}
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
+
/**
|
4 |
+
* Base Class for all Crypt_* cipher classes
|
5 |
+
*
|
6 |
+
* PHP versions 4 and 5
|
7 |
+
*
|
8 |
+
* Internally for phpseclib developers:
|
9 |
+
* If you plan to add a new cipher class, please note following rules:
|
10 |
+
*
|
11 |
+
* - The new Crypt_* cipher class should extend Crypt_Base
|
12 |
+
*
|
13 |
+
* - Following methods are then required to be overridden/overloaded:
|
14 |
+
*
|
15 |
+
* - _encryptBlock()
|
16 |
+
*
|
17 |
+
* - _decryptBlock()
|
18 |
+
*
|
19 |
+
* - _setupKey()
|
20 |
+
*
|
21 |
+
* - All other methods are optional to be overridden/overloaded
|
22 |
+
*
|
23 |
+
* - Look at the source code of the current ciphers how they extend Crypt_Base
|
24 |
+
* and take one of them as a start up for the new cipher class.
|
25 |
+
*
|
26 |
+
* - Please read all the other comments/notes/hints here also for each class var/method
|
27 |
+
*
|
28 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
29 |
+
* of this software and associated documentation files (the "Software"), to deal
|
30 |
+
* in the Software without restriction, including without limitation the rights
|
31 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
32 |
+
* copies of the Software, and to permit persons to whom the Software is
|
33 |
+
* furnished to do so, subject to the following conditions:
|
34 |
+
*
|
35 |
+
* The above copyright notice and this permission notice shall be included in
|
36 |
+
* all copies or substantial portions of the Software.
|
37 |
+
*
|
38 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
39 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
40 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
41 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
42 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
43 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
44 |
+
* THE SOFTWARE.
|
45 |
+
*
|
46 |
+
* @category Crypt
|
47 |
+
* @package Crypt_Base
|
48 |
+
* @author Jim Wigginton <terrafrost@php.net>
|
49 |
+
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
50 |
+
* @copyright 2007 Jim Wigginton
|
51 |
+
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
52 |
+
* @link http://phpseclib.sourceforge.net
|
53 |
+
*/
|
54 |
+
|
55 |
+
/**#@+
|
56 |
+
* @access public
|
57 |
+
* @see self::encrypt()
|
58 |
+
* @see self::decrypt()
|
59 |
+
*/
|
60 |
+
/**
|
61 |
+
* Encrypt / decrypt using the Counter mode.
|
62 |
+
*
|
63 |
+
* Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
|
64 |
+
*
|
65 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
|
66 |
+
*/
|
67 |
+
define('CRYPT_MODE_CTR', -1);
|
68 |
+
/**
|
69 |
+
* Encrypt / decrypt using the Electronic Code Book mode.
|
70 |
+
*
|
71 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
|
72 |
+
*/
|
73 |
+
define('CRYPT_MODE_ECB', 1);
|
74 |
+
/**
|
75 |
+
* Encrypt / decrypt using the Code Book Chaining mode.
|
76 |
+
*
|
77 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
|
78 |
+
*/
|
79 |
+
define('CRYPT_MODE_CBC', 2);
|
80 |
+
/**
|
81 |
+
* Encrypt / decrypt using the Cipher Feedback mode.
|
82 |
+
*
|
83 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
|
84 |
+
*/
|
85 |
+
define('CRYPT_MODE_CFB', 3);
|
86 |
+
/**
|
87 |
+
* Encrypt / decrypt using the Output Feedback mode.
|
88 |
+
*
|
89 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
|
90 |
+
*/
|
91 |
+
define('CRYPT_MODE_OFB', 4);
|
92 |
+
/**
|
93 |
+
* Encrypt / decrypt using streaming mode.
|
94 |
+
*/
|
95 |
+
define('CRYPT_MODE_STREAM', 5);
|
96 |
+
/**#@-*/
|
97 |
+
|
98 |
+
/**#@+
|
99 |
+
* @access private
|
100 |
+
* @see self::Crypt_Base()
|
101 |
+
* @internal These constants are for internal use only
|
102 |
+
*/
|
103 |
+
/**
|
104 |
+
* Base value for the internal implementation $engine switch
|
105 |
+
*/
|
106 |
+
define('CRYPT_ENGINE_INTERNAL', 1);
|
107 |
+
/**
|
108 |
+
* Base value for the mcrypt implementation $engine switch
|
109 |
+
*/
|
110 |
+
define('CRYPT_ENGINE_MCRYPT', 2);
|
111 |
+
/**
|
112 |
+
* Base value for the OpenSSL implementation $engine switch
|
113 |
+
*/
|
114 |
+
define('CRYPT_ENGINE_OPENSSL', 3);
|
115 |
+
/**#@-*/
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Base Class for all Crypt_* cipher classes
|
119 |
+
*
|
120 |
+
* @package Crypt_Base
|
121 |
+
* @author Jim Wigginton <terrafrost@php.net>
|
122 |
+
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
123 |
+
* @access public
|
124 |
+
*/
|
125 |
+
class Crypt_Base
|
126 |
+
{
|
127 |
+
/**
|
128 |
+
* The Encryption Mode
|
129 |
+
*
|
130 |
+
* @see self::Crypt_Base()
|
131 |
+
* @var int
|
132 |
+
* @access private
|
133 |
+
*/
|
134 |
+
var $mode;
|
135 |
+
|
136 |
+
/**
|
137 |
+
* The Block Length of the block cipher
|
138 |
+
*
|
139 |
+
* @var int
|
140 |
+
* @access private
|
141 |
+
*/
|
142 |
+
var $block_size = 16;
|
143 |
+
|
144 |
+
/**
|
145 |
+
* The Key
|
146 |
+
*
|
147 |
+
* @see self::setKey()
|
148 |
+
* @var string
|
149 |
+
* @access private
|
150 |
+
*/
|
151 |
+
var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
|
152 |
+
|
153 |
+
/**
|
154 |
+
* The Initialization Vector
|
155 |
+
*
|
156 |
+
* @see self::setIV()
|
157 |
+
* @var string
|
158 |
+
* @access private
|
159 |
+
*/
|
160 |
+
var $iv;
|
161 |
+
|
162 |
+
/**
|
163 |
+
* A "sliding" Initialization Vector
|
164 |
+
*
|
165 |
+
* @see self::enableContinuousBuffer()
|
166 |
+
* @see self::_clearBuffers()
|
167 |
+
* @var string
|
168 |
+
* @access private
|
169 |
+
*/
|
170 |
+
var $encryptIV;
|
171 |
+
|
172 |
+
/**
|
173 |
+
* A "sliding" Initialization Vector
|
174 |
+
*
|
175 |
+
* @see self::enableContinuousBuffer()
|
176 |
+
* @see self::_clearBuffers()
|
177 |
+
* @var string
|
178 |
+
* @access private
|
179 |
+
*/
|
180 |
+
var $decryptIV;
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Continuous Buffer status
|
184 |
+
*
|
185 |
+
* @see self::enableContinuousBuffer()
|
186 |
+
* @var bool
|
187 |
+
* @access private
|
188 |
+
*/
|
189 |
+
var $continuousBuffer = false;
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Encryption buffer for CTR, OFB and CFB modes
|
193 |
+
*
|
194 |
+
* @see self::encrypt()
|
195 |
+
* @see self::_clearBuffers()
|
196 |
+
* @var array
|
197 |
+
* @access private
|
198 |
+
*/
|
199 |
+
var $enbuffer;
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Decryption buffer for CTR, OFB and CFB modes
|
203 |
+
*
|
204 |
+
* @see self::decrypt()
|
205 |
+
* @see self::_clearBuffers()
|
206 |
+
* @var array
|
207 |
+
* @access private
|
208 |
+
*/
|
209 |
+
var $debuffer;
|
210 |
+
|
211 |
+
/**
|
212 |
+
* mcrypt resource for encryption
|
213 |
+
*
|
214 |
+
* The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
|
215 |
+
* Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
|
216 |
+
*
|
217 |
+
* @see self::encrypt()
|
218 |
+
* @var resource
|
219 |
+
* @access private
|
220 |
+
*/
|
221 |
+
var $enmcrypt;
|
222 |
+
|
223 |
+
/**
|
224 |
+
* mcrypt resource for decryption
|
225 |
+
*
|
226 |
+
* The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
|
227 |
+
* Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
|
228 |
+
*
|
229 |
+
* @see self::decrypt()
|
230 |
+
* @var resource
|
231 |
+
* @access private
|
232 |
+
*/
|
233 |
+
var $demcrypt;
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Does the enmcrypt resource need to be (re)initialized?
|
237 |
+
*
|
238 |
+
* @see Crypt_Twofish::setKey()
|
239 |
+
* @see Crypt_Twofish::setIV()
|
240 |
+
* @var bool
|
241 |
+
* @access private
|
242 |
+
*/
|
243 |
+
var $enchanged = true;
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Does the demcrypt resource need to be (re)initialized?
|
247 |
+
*
|
248 |
+
* @see Crypt_Twofish::setKey()
|
249 |
+
* @see Crypt_Twofish::setIV()
|
250 |
+
* @var bool
|
251 |
+
* @access private
|
252 |
+
*/
|
253 |
+
var $dechanged = true;
|
254 |
+
|
255 |
+
/**
|
256 |
+
* mcrypt resource for CFB mode
|
257 |
+
*
|
258 |
+
* mcrypt's CFB mode, in (and only in) buffered context,
|
259 |
+
* is broken, so phpseclib implements the CFB mode by it self,
|
260 |
+
* even when the mcrypt php extension is available.
|
261 |
+
*
|
262 |
+
* In order to do the CFB-mode work (fast) phpseclib
|
263 |
+
* use a separate ECB-mode mcrypt resource.
|
264 |
+
*
|
265 |
+
* @link http://phpseclib.sourceforge.net/cfb-demo.phps
|
266 |
+
* @see self::encrypt()
|
267 |
+
* @see self::decrypt()
|
268 |
+
* @see self::_setupMcrypt()
|
269 |
+
* @var resource
|
270 |
+
* @access private
|
271 |
+
*/
|
272 |
+
var $ecb;
|
273 |
+
|
274 |
+
/**
|
275 |
+
* Optimizing value while CFB-encrypting
|
276 |
+
*
|
277 |
+
* Only relevant if $continuousBuffer enabled
|
278 |
+
* and $engine == CRYPT_ENGINE_MCRYPT
|
279 |
+
*
|
280 |
+
* It's faster to re-init $enmcrypt if
|
281 |
+
* $buffer bytes > $cfb_init_len than
|
282 |
+
* using the $ecb resource furthermore.
|
283 |
+
*
|
284 |
+
* This value depends of the chosen cipher
|
285 |
+
* and the time it would be needed for it's
|
286 |
+
* initialization [by mcrypt_generic_init()]
|
287 |
+
* which, typically, depends on the complexity
|
288 |
+
* on its internaly Key-expanding algorithm.
|
289 |
+
*
|
290 |
+
* @see self::encrypt()
|
291 |
+
* @var int
|
292 |
+
* @access private
|
293 |
+
*/
|
294 |
+
var $cfb_init_len = 600;
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Does internal cipher state need to be (re)initialized?
|
298 |
+
*
|
299 |
+
* @see self::setKey()
|
300 |
+
* @see self::setIV()
|
301 |
+
* @see self::disableContinuousBuffer()
|
302 |
+
* @var bool
|
303 |
+
* @access private
|
304 |
+
*/
|
305 |
+
var $changed = true;
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Padding status
|
309 |
+
*
|
310 |
+
* @see self::enablePadding()
|
311 |
+
* @var bool
|
312 |
+
* @access private
|
313 |
+
*/
|
314 |
+
var $padding = true;
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Is the mode one that is paddable?
|
318 |
+
*
|
319 |
+
* @see self::Crypt_Base()
|
320 |
+
* @var bool
|
321 |
+
* @access private
|
322 |
+
*/
|
323 |
+
var $paddable = false;
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Holds which crypt engine internaly should be use,
|
327 |
+
* which will be determined automatically on __construct()
|
328 |
+
*
|
329 |
+
* Currently available $engines are:
|
330 |
+
* - CRYPT_ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required)
|
331 |
+
* - CRYPT_ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
|
332 |
+
* - CRYPT_ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
|
333 |
+
*
|
334 |
+
* @see self::_setEngine()
|
335 |
+
* @see self::encrypt()
|
336 |
+
* @see self::decrypt()
|
337 |
+
* @var int
|
338 |
+
* @access private
|
339 |
+
*/
|
340 |
+
var $engine;
|
341 |
+
|
342 |
+
/**
|
343 |
+
* Holds the preferred crypt engine
|
344 |
+
*
|
345 |
+
* @see self::_setEngine()
|
346 |
+
* @see self::setPreferredEngine()
|
347 |
+
* @var int
|
348 |
+
* @access private
|
349 |
+
*/
|
350 |
+
var $preferredEngine;
|
351 |
+
|
352 |
+
/**
|
353 |
+
* The mcrypt specific name of the cipher
|
354 |
+
*
|
355 |
+
* Only used if $engine == CRYPT_ENGINE_MCRYPT
|
356 |
+
*
|
357 |
+
* @link http://www.php.net/mcrypt_module_open
|
358 |
+
* @link http://www.php.net/mcrypt_list_algorithms
|
359 |
+
* @see self::_setupMcrypt()
|
360 |
+
* @var string
|
361 |
+
* @access private
|
362 |
+
*/
|
363 |
+
var $cipher_name_mcrypt;
|
364 |
+
|
365 |
+
/**
|
366 |
+
* The openssl specific name of the cipher
|
367 |
+
*
|
368 |
+
* Only used if $engine == CRYPT_ENGINE_OPENSSL
|
369 |
+
*
|
370 |
+
* @link http://www.php.net/openssl-get-cipher-methods
|
371 |
+
* @var string
|
372 |
+
* @access private
|
373 |
+
*/
|
374 |
+
var $cipher_name_openssl;
|
375 |
+
|
376 |
+
/**
|
377 |
+
* The openssl specific name of the cipher in ECB mode
|
378 |
+
*
|
379 |
+
* If OpenSSL does not support the mode we're trying to use (CTR)
|
380 |
+
* it can still be emulated with ECB mode.
|
381 |
+
*
|
382 |
+
* @link http://www.php.net/openssl-get-cipher-methods
|
383 |
+
* @var string
|
384 |
+
* @access private
|
385 |
+
*/
|
386 |
+
var $cipher_name_openssl_ecb;
|
387 |
+
|
388 |
+
/**
|
389 |
+
* The default salt used by setPassword()
|
390 |
+
*
|
391 |
+
* @see self::setPassword()
|
392 |
+
* @var string
|
393 |
+
* @access private
|
394 |
+
*/
|
395 |
+
var $password_default_salt = 'phpseclib/salt';
|
396 |
+
|
397 |
+
/**
|
398 |
+
* The namespace used by the cipher for its constants.
|
399 |
+
*
|
400 |
+
* ie: AES.php is using CRYPT_AES_MODE_* for its constants
|
401 |
+
* so $const_namespace is AES
|
402 |
+
*
|
403 |
+
* DES.php is using CRYPT_DES_MODE_* for its constants
|
404 |
+
* so $const_namespace is DES... and so on
|
405 |
+
*
|
406 |
+
* All CRYPT_<$const_namespace>_MODE_* are aliases of
|
407 |
+
* the generic CRYPT_MODE_* constants, so both could be used
|
408 |
+
* for each cipher.
|
409 |
+
*
|
410 |
+
* Example:
|
411 |
+
* $aes = new Crypt_AES(CRYPT_AES_MODE_CFB); // $aes will operate in cfb mode
|
412 |
+
* $aes = new Crypt_AES(CRYPT_MODE_CFB); // identical
|
413 |
+
*
|
414 |
+
* @see self::Crypt_Base()
|
415 |
+
* @var string
|
416 |
+
* @access private
|
417 |
+
*/
|
418 |
+
var $const_namespace;
|
419 |
+
|
420 |
+
/**
|
421 |
+
* The name of the performance-optimized callback function
|
422 |
+
*
|
423 |
+
* Used by encrypt() / decrypt()
|
424 |
+
* only if $engine == CRYPT_ENGINE_INTERNAL
|
425 |
+
*
|
426 |
+
* @see self::encrypt()
|
427 |
+
* @see self::decrypt()
|
428 |
+
* @see self::_setupInlineCrypt()
|
429 |
+
* @see self::$use_inline_crypt
|
430 |
+
* @var Callback
|
431 |
+
* @access private
|
432 |
+
*/
|
433 |
+
var $inline_crypt;
|
434 |
+
|
435 |
+
/**
|
436 |
+
* Holds whether performance-optimized $inline_crypt() can/should be used.
|
437 |
+
*
|
438 |
+
* @see self::encrypt()
|
439 |
+
* @see self::decrypt()
|
440 |
+
* @see self::inline_crypt
|
441 |
+
* @var mixed
|
442 |
+
* @access private
|
443 |
+
*/
|
444 |
+
var $use_inline_crypt;
|
445 |
+
|
446 |
+
/**
|
447 |
+
* If OpenSSL can be used in ECB but not in CTR we can emulate CTR
|
448 |
+
*
|
449 |
+
* @see self::_openssl_ctr_process()
|
450 |
+
* @var bool
|
451 |
+
* @access private
|
452 |
+
*/
|
453 |
+
var $openssl_emulate_ctr = false;
|
454 |
+
|
455 |
+
/**
|
456 |
+
* Determines what options are passed to openssl_encrypt/decrypt
|
457 |
+
*
|
458 |
+
* @see self::isValidEngine()
|
459 |
+
* @var mixed
|
460 |
+
* @access private
|
461 |
+
*/
|
462 |
+
var $openssl_options;
|
463 |
+
|
464 |
+
/**
|
465 |
+
* Has the key length explicitly been set or should it be derived from the key, itself?
|
466 |
+
*
|
467 |
+
* @see self::setKeyLength()
|
468 |
+
* @var bool
|
469 |
+
* @access private
|
470 |
+
*/
|
471 |
+
var $explicit_key_length = false;
|
472 |
+
|
473 |
+
/**
|
474 |
+
* Don't truncate / null pad key
|
475 |
+
*
|
476 |
+
* @see self::_clearBuffers()
|
477 |
+
* @var bool
|
478 |
+
* @access private
|
479 |
+
*/
|
480 |
+
var $skip_key_adjustment = false;
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Default Constructor.
|
484 |
+
*
|
485 |
+
* Determines whether or not the mcrypt extension should be used.
|
486 |
+
*
|
487 |
+
* $mode could be:
|
488 |
+
*
|
489 |
+
* - CRYPT_MODE_ECB
|
490 |
+
*
|
491 |
+
* - CRYPT_MODE_CBC
|
492 |
+
*
|
493 |
+
* - CRYPT_MODE_CTR
|
494 |
+
*
|
495 |
+
* - CRYPT_MODE_CFB
|
496 |
+
*
|
497 |
+
* - CRYPT_MODE_OFB
|
498 |
+
*
|
499 |
+
* (or the alias constants of the chosen cipher, for example for AES: CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC ...)
|
500 |
+
*
|
501 |
+
* If not explicitly set, CRYPT_MODE_CBC will be used.
|
502 |
+
*
|
503 |
+
* @param int $mode
|
504 |
+
* @access public
|
505 |
+
*/
|
506 |
+
function __construct($mode = CRYPT_MODE_CBC)
|
507 |
+
{
|
508 |
+
// $mode dependent settings
|
509 |
+
switch ($mode) {
|
510 |
+
case CRYPT_MODE_ECB:
|
511 |
+
$this->paddable = true;
|
512 |
+
$this->mode = CRYPT_MODE_ECB;
|
513 |
+
break;
|
514 |
+
case CRYPT_MODE_CTR:
|
515 |
+
case CRYPT_MODE_CFB:
|
516 |
+
case CRYPT_MODE_OFB:
|
517 |
+
case CRYPT_MODE_STREAM:
|
518 |
+
$this->mode = $mode;
|
519 |
+
break;
|
520 |
+
case CRYPT_MODE_CBC:
|
521 |
+
default:
|
522 |
+
$this->paddable = true;
|
523 |
+
$this->mode = CRYPT_MODE_CBC;
|
524 |
+
}
|
525 |
+
|
526 |
+
$this->_setEngine();
|
527 |
+
|
528 |
+
// Determining whether inline crypting can be used by the cipher
|
529 |
+
if ($this->use_inline_crypt !== false) {
|
530 |
+
$this->use_inline_crypt = version_compare(PHP_VERSION, '5.3.0') >= 0 || function_exists('create_function');
|
531 |
+
}
|
532 |
+
}
|
533 |
+
|
534 |
+
/**
|
535 |
+
* PHP4 compatible Default Constructor.
|
536 |
+
*
|
537 |
+
* @see self::__construct()
|
538 |
+
* @param int $mode
|
539 |
+
* @access public
|
540 |
+
*/
|
541 |
+
function Crypt_Base($mode = CRYPT_MODE_CBC)
|
542 |
+
{
|
543 |
+
$this->__construct($mode);
|
544 |
+
}
|
545 |
+
|
546 |
+
/**
|
547 |
+
* Sets the initialization vector. (optional)
|
548 |
+
*
|
549 |
+
* SetIV is not required when CRYPT_MODE_ECB (or ie for AES: CRYPT_AES_MODE_ECB) is being used. If not explicitly set, it'll be assumed
|
550 |
+
* to be all zero's.
|
551 |
+
*
|
552 |
+
* @access public
|
553 |
+
* @param string $iv
|
554 |
+
* @internal Can be overwritten by a sub class, but does not have to be
|
555 |
+
*/
|
556 |
+
function setIV($iv)
|
557 |
+
{
|
558 |
+
if ($this->mode == CRYPT_MODE_ECB) {
|
559 |
+
return;
|
560 |
+
}
|
561 |
+
|
562 |
+
$this->iv = $iv;
|
563 |
+
$this->changed = true;
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Sets the key length.
|
568 |
+
*
|
569 |
+
* Keys with explicitly set lengths need to be treated accordingly
|
570 |
+
*
|
571 |
+
* @access public
|
572 |
+
* @param int $length
|
573 |
+
*/
|
574 |
+
function setKeyLength($length)
|
575 |
+
{
|
576 |
+
$this->explicit_key_length = true;
|
577 |
+
$this->changed = true;
|
578 |
+
$this->_setEngine();
|
579 |
+
}
|
580 |
+
|
581 |
+
/**
|
582 |
+
* Returns the current key length in bits
|
583 |
+
*
|
584 |
+
* @access public
|
585 |
+
* @return int
|
586 |
+
*/
|
587 |
+
function getKeyLength()
|
588 |
+
{
|
589 |
+
return $this->key_length << 3;
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Returns the current block length in bits
|
594 |
+
*
|
595 |
+
* @access public
|
596 |
+
* @return int
|
597 |
+
*/
|
598 |
+
function getBlockLength()
|
599 |
+
{
|
600 |
+
return $this->block_size << 3;
|
601 |
+
}
|
602 |
+
|
603 |
+
/**
|
604 |
+
* Sets the key.
|
605 |
+
*
|
606 |
+
* The min/max length(s) of the key depends on the cipher which is used.
|
607 |
+
* If the key not fits the length(s) of the cipher it will paded with null bytes
|
608 |
+
* up to the closest valid key length. If the key is more than max length,
|
609 |
+
* we trim the excess bits.
|
610 |
+
*
|
611 |
+
* If the key is not explicitly set, it'll be assumed to be all null bytes.
|
612 |
+
*
|
613 |
+
* @access public
|
614 |
+
* @param string $key
|
615 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
616 |
+
*/
|
617 |
+
function setKey($key)
|
618 |
+
{
|
619 |
+
if (!$this->explicit_key_length) {
|
620 |
+
$this->setKeyLength(strlen($key) << 3);
|
621 |
+
$this->explicit_key_length = false;
|
622 |
+
}
|
623 |
+
|
624 |
+
$this->key = $key;
|
625 |
+
$this->changed = true;
|
626 |
+
$this->_setEngine();
|
627 |
+
}
|
628 |
+
|
629 |
+
/**
|
630 |
+
* Sets the password.
|
631 |
+
*
|
632 |
+
* Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
|
633 |
+
* {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
|
634 |
+
* $hash, $salt, $count, $dkLen
|
635 |
+
*
|
636 |
+
* Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
|
637 |
+
*
|
638 |
+
* @see Crypt/Hash.php
|
639 |
+
* @param string $password
|
640 |
+
* @param string $method
|
641 |
+
* @return bool
|
642 |
+
* @access public
|
643 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
644 |
+
*/
|
645 |
+
function setPassword($password, $method = 'pbkdf2')
|
646 |
+
{
|
647 |
+
$key = '';
|
648 |
+
|
649 |
+
switch ($method) {
|
650 |
+
default: // 'pbkdf2' or 'pbkdf1'
|
651 |
+
$func_args = func_get_args();
|
652 |
+
|
653 |
+
// Hash function
|
654 |
+
$hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
|
655 |
+
|
656 |
+
// WPA and WPA2 use the SSID as the salt
|
657 |
+
$salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
|
658 |
+
|
659 |
+
// RFC2898#section-4.2 uses 1,000 iterations by default
|
660 |
+
// WPA and WPA2 use 4,096.
|
661 |
+
$count = isset($func_args[4]) ? $func_args[4] : 1000;
|
662 |
+
|
663 |
+
// Keylength
|
664 |
+
if (isset($func_args[5]) && $func_args[5] > 0) {
|
665 |
+
$dkLen = $func_args[5];
|
666 |
+
} else {
|
667 |
+
$dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
|
668 |
+
}
|
669 |
+
|
670 |
+
switch (true) {
|
671 |
+
case $method == 'pbkdf1':
|
672 |
+
if (!class_exists('Crypt_Hash')) {
|
673 |
+
include_once 'Crypt/Hash.php';
|
674 |
+
}
|
675 |
+
$hashObj = new Crypt_Hash();
|
676 |
+
$hashObj->setHash($hash);
|
677 |
+
if ($dkLen > $hashObj->getLength()) {
|
678 |
+
user_error('Derived key too long');
|
679 |
+
return false;
|
680 |
+
}
|
681 |
+
$t = $password . $salt;
|
682 |
+
for ($i = 0; $i < $count; ++$i) {
|
683 |
+
$t = $hashObj->hash($t);
|
684 |
+
}
|
685 |
+
$key = substr($t, 0, $dkLen);
|
686 |
+
|
687 |
+
$this->setKey(substr($key, 0, $dkLen >> 1));
|
688 |
+
$this->setIV(substr($key, $dkLen >> 1));
|
689 |
+
|
690 |
+
return true;
|
691 |
+
// Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
|
692 |
+
case !function_exists('hash_pbkdf2'):
|
693 |
+
case !function_exists('hash_algos'):
|
694 |
+
case !in_array($hash, hash_algos()):
|
695 |
+
if (!class_exists('Crypt_Hash')) {
|
696 |
+
include_once 'Crypt/Hash.php';
|
697 |
+
}
|
698 |
+
$i = 1;
|
699 |
+
$hmac = new Crypt_Hash();
|
700 |
+
$hmac->setHash($hash);
|
701 |
+
$hmac->setKey($password);
|
702 |
+
while (strlen($key) < $dkLen) {
|
703 |
+
$f = $u = $hmac->hash($salt . pack('N', $i++));
|
704 |
+
for ($j = 2; $j <= $count; ++$j) {
|
705 |
+
$u = $hmac->hash($u);
|
706 |
+
$f^= $u;
|
707 |
+
}
|
708 |
+
$key.= $f;
|
709 |
+
}
|
710 |
+
$key = substr($key, 0, $dkLen);
|
711 |
+
break;
|
712 |
+
default:
|
713 |
+
$key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
|
714 |
+
}
|
715 |
+
}
|
716 |
+
|
717 |
+
$this->setKey($key);
|
718 |
+
|
719 |
+
return true;
|
720 |
+
}
|
721 |
+
|
722 |
+
/**
|
723 |
+
* Encrypts a message.
|
724 |
+
*
|
725 |
+
* $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
|
726 |
+
* implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
|
727 |
+
* necessary are discussed in the following
|
728 |
+
* URL:
|
729 |
+
*
|
730 |
+
* {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
|
731 |
+
*
|
732 |
+
* An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
|
733 |
+
* strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
|
734 |
+
* length.
|
735 |
+
*
|
736 |
+
* @see self::decrypt()
|
737 |
+
* @access public
|
738 |
+
* @param string $plaintext
|
739 |
+
* @return string $ciphertext
|
740 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
741 |
+
*/
|
742 |
+
function encrypt($plaintext)
|
743 |
+
{
|
744 |
+
if ($this->paddable) {
|
745 |
+
$plaintext = $this->_pad($plaintext);
|
746 |
+
}
|
747 |
+
|
748 |
+
if ($this->engine === CRYPT_ENGINE_OPENSSL) {
|
749 |
+
if ($this->changed) {
|
750 |
+
$this->_clearBuffers();
|
751 |
+
$this->changed = false;
|
752 |
+
}
|
753 |
+
switch ($this->mode) {
|
754 |
+
case CRYPT_MODE_STREAM:
|
755 |
+
return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
756 |
+
case CRYPT_MODE_ECB:
|
757 |
+
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
758 |
+
return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
|
759 |
+
case CRYPT_MODE_CBC:
|
760 |
+
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
|
761 |
+
if (!defined('OPENSSL_RAW_DATA')) {
|
762 |
+
$result = substr($result, 0, -$this->block_size);
|
763 |
+
}
|
764 |
+
if ($this->continuousBuffer) {
|
765 |
+
$this->encryptIV = substr($result, -$this->block_size);
|
766 |
+
}
|
767 |
+
return $result;
|
768 |
+
case CRYPT_MODE_CTR:
|
769 |
+
return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
|
770 |
+
case CRYPT_MODE_CFB:
|
771 |
+
// cfb loosely routines inspired by openssl's:
|
772 |
+
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
773 |
+
$ciphertext = '';
|
774 |
+
if ($this->continuousBuffer) {
|
775 |
+
$iv = &$this->encryptIV;
|
776 |
+
$pos = &$this->enbuffer['pos'];
|
777 |
+
} else {
|
778 |
+
$iv = $this->encryptIV;
|
779 |
+
$pos = 0;
|
780 |
+
}
|
781 |
+
$len = strlen($plaintext);
|
782 |
+
$i = 0;
|
783 |
+
if ($pos) {
|
784 |
+
$orig_pos = $pos;
|
785 |
+
$max = $this->block_size - $pos;
|
786 |
+
if ($len >= $max) {
|
787 |
+
$i = $max;
|
788 |
+
$len-= $max;
|
789 |
+
$pos = 0;
|
790 |
+
} else {
|
791 |
+
$i = $len;
|
792 |
+
$pos+= $len;
|
793 |
+
$len = 0;
|
794 |
+
}
|
795 |
+
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
796 |
+
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
797 |
+
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
798 |
+
$plaintext = substr($plaintext, $i);
|
799 |
+
}
|
800 |
+
|
801 |
+
$overflow = $len % $this->block_size;
|
802 |
+
|
803 |
+
if ($overflow) {
|
804 |
+
$ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
805 |
+
$iv = $this->_string_pop($ciphertext, $this->block_size);
|
806 |
+
|
807 |
+
$size = $len - $overflow;
|
808 |
+
$block = $iv ^ substr($plaintext, -$overflow);
|
809 |
+
$iv = substr_replace($iv, $block, 0, $overflow);
|
810 |
+
$ciphertext.= $block;
|
811 |
+
$pos = $overflow;
|
812 |
+
} elseif ($len) {
|
813 |
+
$ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
814 |
+
$iv = substr($ciphertext, -$this->block_size);
|
815 |
+
}
|
816 |
+
|
817 |
+
return $ciphertext;
|
818 |
+
case CRYPT_MODE_OFB:
|
819 |
+
return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
|
820 |
+
}
|
821 |
+
}
|
822 |
+
|
823 |
+
if ($this->engine === CRYPT_ENGINE_MCRYPT) {
|
824 |
+
if ($this->changed) {
|
825 |
+
$this->_setupMcrypt();
|
826 |
+
$this->changed = false;
|
827 |
+
}
|
828 |
+
if ($this->enchanged) {
|
829 |
+
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
|
830 |
+
$this->enchanged = false;
|
831 |
+
}
|
832 |
+
|
833 |
+
// re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
|
834 |
+
// using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
|
835 |
+
// rewritten CFB implementation the above outputs the same thing twice.
|
836 |
+
if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
|
837 |
+
$block_size = $this->block_size;
|
838 |
+
$iv = &$this->encryptIV;
|
839 |
+
$pos = &$this->enbuffer['pos'];
|
840 |
+
$len = strlen($plaintext);
|
841 |
+
$ciphertext = '';
|
842 |
+
$i = 0;
|
843 |
+
if ($pos) {
|
844 |
+
$orig_pos = $pos;
|
845 |
+
$max = $block_size - $pos;
|
846 |
+
if ($len >= $max) {
|
847 |
+
$i = $max;
|
848 |
+
$len-= $max;
|
849 |
+
$pos = 0;
|
850 |
+
} else {
|
851 |
+
$i = $len;
|
852 |
+
$pos+= $len;
|
853 |
+
$len = 0;
|
854 |
+
}
|
855 |
+
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
856 |
+
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
857 |
+
$this->enbuffer['enmcrypt_init'] = true;
|
858 |
+
}
|
859 |
+
if ($len >= $block_size) {
|
860 |
+
if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
|
861 |
+
if ($this->enbuffer['enmcrypt_init'] === true) {
|
862 |
+
@mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
|
863 |
+
$this->enbuffer['enmcrypt_init'] = false;
|
864 |
+
}
|
865 |
+
$ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
|
866 |
+
$iv = substr($ciphertext, -$block_size);
|
867 |
+
$len%= $block_size;
|
868 |
+
} else {
|
869 |
+
while ($len >= $block_size) {
|
870 |
+
$iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
|
871 |
+
$ciphertext.= $iv;
|
872 |
+
$len-= $block_size;
|
873 |
+
$i+= $block_size;
|
874 |
+
}
|
875 |
+
}
|
876 |
+
}
|
877 |
+
|
878 |
+
if ($len) {
|
879 |
+
$iv = @mcrypt_generic($this->ecb, $iv);
|
880 |
+
$block = $iv ^ substr($plaintext, -$len);
|
881 |
+
$iv = substr_replace($iv, $block, 0, $len);
|
882 |
+
$ciphertext.= $block;
|
883 |
+
$pos = $len;
|
884 |
+
}
|
885 |
+
|
886 |
+
return $ciphertext;
|
887 |
+
}
|
888 |
+
|
889 |
+
$ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
|
890 |
+
|
891 |
+
if (!$this->continuousBuffer) {
|
892 |
+
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
|
893 |
+
}
|
894 |
+
|
895 |
+
return $ciphertext;
|
896 |
+
}
|
897 |
+
|
898 |
+
if ($this->changed) {
|
899 |
+
$this->_setup();
|
900 |
+
$this->changed = false;
|
901 |
+
}
|
902 |
+
if ($this->use_inline_crypt) {
|
903 |
+
$inline = $this->inline_crypt;
|
904 |
+
return $inline('encrypt', $this, $plaintext);
|
905 |
+
}
|
906 |
+
|
907 |
+
$buffer = &$this->enbuffer;
|
908 |
+
$block_size = $this->block_size;
|
909 |
+
$ciphertext = '';
|
910 |
+
switch ($this->mode) {
|
911 |
+
case CRYPT_MODE_ECB:
|
912 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
913 |
+
$ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
|
914 |
+
}
|
915 |
+
break;
|
916 |
+
case CRYPT_MODE_CBC:
|
917 |
+
$xor = $this->encryptIV;
|
918 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
919 |
+
$block = substr($plaintext, $i, $block_size);
|
920 |
+
$block = $this->_encryptBlock($block ^ $xor);
|
921 |
+
$xor = $block;
|
922 |
+
$ciphertext.= $block;
|
923 |
+
}
|
924 |
+
if ($this->continuousBuffer) {
|
925 |
+
$this->encryptIV = $xor;
|
926 |
+
}
|
927 |
+
break;
|
928 |
+
case CRYPT_MODE_CTR:
|
929 |
+
$xor = $this->encryptIV;
|
930 |
+
if (strlen($buffer['ciphertext'])) {
|
931 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
932 |
+
$block = substr($plaintext, $i, $block_size);
|
933 |
+
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
934 |
+
$buffer['ciphertext'].= $this->_encryptBlock($xor);
|
935 |
+
}
|
936 |
+
$this->_increment_str($xor);
|
937 |
+
$key = $this->_string_shift($buffer['ciphertext'], $block_size);
|
938 |
+
$ciphertext.= $block ^ $key;
|
939 |
+
}
|
940 |
+
} else {
|
941 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
942 |
+
$block = substr($plaintext, $i, $block_size);
|
943 |
+
$key = $this->_encryptBlock($xor);
|
944 |
+
$this->_increment_str($xor);
|
945 |
+
$ciphertext.= $block ^ $key;
|
946 |
+
}
|
947 |
+
}
|
948 |
+
if ($this->continuousBuffer) {
|
949 |
+
$this->encryptIV = $xor;
|
950 |
+
if ($start = strlen($plaintext) % $block_size) {
|
951 |
+
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
952 |
+
}
|
953 |
+
}
|
954 |
+
break;
|
955 |
+
case CRYPT_MODE_CFB:
|
956 |
+
// cfb loosely routines inspired by openssl's:
|
957 |
+
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
958 |
+
if ($this->continuousBuffer) {
|
959 |
+
$iv = &$this->encryptIV;
|
960 |
+
$pos = &$buffer['pos'];
|
961 |
+
} else {
|
962 |
+
$iv = $this->encryptIV;
|
963 |
+
$pos = 0;
|
964 |
+
}
|
965 |
+
$len = strlen($plaintext);
|
966 |
+
$i = 0;
|
967 |
+
if ($pos) {
|
968 |
+
$orig_pos = $pos;
|
969 |
+
$max = $block_size - $pos;
|
970 |
+
if ($len >= $max) {
|
971 |
+
$i = $max;
|
972 |
+
$len-= $max;
|
973 |
+
$pos = 0;
|
974 |
+
} else {
|
975 |
+
$i = $len;
|
976 |
+
$pos+= $len;
|
977 |
+
$len = 0;
|
978 |
+
}
|
979 |
+
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
980 |
+
$ciphertext = substr($iv, $orig_pos) ^ $plaintext;
|
981 |
+
$iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
|
982 |
+
}
|
983 |
+
while ($len >= $block_size) {
|
984 |
+
$iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
|
985 |
+
$ciphertext.= $iv;
|
986 |
+
$len-= $block_size;
|
987 |
+
$i+= $block_size;
|
988 |
+
}
|
989 |
+
if ($len) {
|
990 |
+
$iv = $this->_encryptBlock($iv);
|
991 |
+
$block = $iv ^ substr($plaintext, $i);
|
992 |
+
$iv = substr_replace($iv, $block, 0, $len);
|
993 |
+
$ciphertext.= $block;
|
994 |
+
$pos = $len;
|
995 |
+
}
|
996 |
+
break;
|
997 |
+
case CRYPT_MODE_OFB:
|
998 |
+
$xor = $this->encryptIV;
|
999 |
+
if (strlen($buffer['xor'])) {
|
1000 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1001 |
+
$block = substr($plaintext, $i, $block_size);
|
1002 |
+
if (strlen($block) > strlen($buffer['xor'])) {
|
1003 |
+
$xor = $this->_encryptBlock($xor);
|
1004 |
+
$buffer['xor'].= $xor;
|
1005 |
+
}
|
1006 |
+
$key = $this->_string_shift($buffer['xor'], $block_size);
|
1007 |
+
$ciphertext.= $block ^ $key;
|
1008 |
+
}
|
1009 |
+
} else {
|
1010 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1011 |
+
$xor = $this->_encryptBlock($xor);
|
1012 |
+
$ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
|
1013 |
+
}
|
1014 |
+
$key = $xor;
|
1015 |
+
}
|
1016 |
+
if ($this->continuousBuffer) {
|
1017 |
+
$this->encryptIV = $xor;
|
1018 |
+
if ($start = strlen($plaintext) % $block_size) {
|
1019 |
+
$buffer['xor'] = substr($key, $start) . $buffer['xor'];
|
1020 |
+
}
|
1021 |
+
}
|
1022 |
+
break;
|
1023 |
+
case CRYPT_MODE_STREAM:
|
1024 |
+
$ciphertext = $this->_encryptBlock($plaintext);
|
1025 |
+
break;
|
1026 |
+
}
|
1027 |
+
|
1028 |
+
return $ciphertext;
|
1029 |
+
}
|
1030 |
+
|
1031 |
+
/**
|
1032 |
+
* Decrypts a message.
|
1033 |
+
*
|
1034 |
+
* If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
|
1035 |
+
* it is.
|
1036 |
+
*
|
1037 |
+
* @see self::encrypt()
|
1038 |
+
* @access public
|
1039 |
+
* @param string $ciphertext
|
1040 |
+
* @return string $plaintext
|
1041 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1042 |
+
*/
|
1043 |
+
function decrypt($ciphertext)
|
1044 |
+
{
|
1045 |
+
if ($this->paddable) {
|
1046 |
+
// we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}:
|
1047 |
+
// "The data is padded with "\0" to make sure the length of the data is n * blocksize."
|
1048 |
+
$ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
|
1049 |
+
}
|
1050 |
+
|
1051 |
+
if ($this->engine === CRYPT_ENGINE_OPENSSL) {
|
1052 |
+
if ($this->changed) {
|
1053 |
+
$this->_clearBuffers();
|
1054 |
+
$this->changed = false;
|
1055 |
+
}
|
1056 |
+
switch ($this->mode) {
|
1057 |
+
case CRYPT_MODE_STREAM:
|
1058 |
+
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
1059 |
+
break;
|
1060 |
+
case CRYPT_MODE_ECB:
|
1061 |
+
if (!defined('OPENSSL_RAW_DATA')) {
|
1062 |
+
$ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
|
1063 |
+
}
|
1064 |
+
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
|
1065 |
+
break;
|
1066 |
+
case CRYPT_MODE_CBC:
|
1067 |
+
if (!defined('OPENSSL_RAW_DATA')) {
|
1068 |
+
$padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
|
1069 |
+
$ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
|
1070 |
+
$offset = 2 * $this->block_size;
|
1071 |
+
} else {
|
1072 |
+
$offset = $this->block_size;
|
1073 |
+
}
|
1074 |
+
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
|
1075 |
+
if ($this->continuousBuffer) {
|
1076 |
+
$this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
|
1077 |
+
}
|
1078 |
+
break;
|
1079 |
+
case CRYPT_MODE_CTR:
|
1080 |
+
$plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
|
1081 |
+
break;
|
1082 |
+
case CRYPT_MODE_CFB:
|
1083 |
+
// cfb loosely routines inspired by openssl's:
|
1084 |
+
// {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
|
1085 |
+
$plaintext = '';
|
1086 |
+
if ($this->continuousBuffer) {
|
1087 |
+
$iv = &$this->decryptIV;
|
1088 |
+
$pos = &$this->buffer['pos'];
|
1089 |
+
} else {
|
1090 |
+
$iv = $this->decryptIV;
|
1091 |
+
$pos = 0;
|
1092 |
+
}
|
1093 |
+
$len = strlen($ciphertext);
|
1094 |
+
$i = 0;
|
1095 |
+
if ($pos) {
|
1096 |
+
$orig_pos = $pos;
|
1097 |
+
$max = $this->block_size - $pos;
|
1098 |
+
if ($len >= $max) {
|
1099 |
+
$i = $max;
|
1100 |
+
$len-= $max;
|
1101 |
+
$pos = 0;
|
1102 |
+
} else {
|
1103 |
+
$i = $len;
|
1104 |
+
$pos+= $len;
|
1105 |
+
$len = 0;
|
1106 |
+
}
|
1107 |
+
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
|
1108 |
+
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1109 |
+
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1110 |
+
$ciphertext = substr($ciphertext, $i);
|
1111 |
+
}
|
1112 |
+
$overflow = $len % $this->block_size;
|
1113 |
+
if ($overflow) {
|
1114 |
+
$plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1115 |
+
if ($len - $overflow) {
|
1116 |
+
$iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
|
1117 |
+
}
|
1118 |
+
$iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1119 |
+
$plaintext.= $iv ^ substr($ciphertext, -$overflow);
|
1120 |
+
$iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
|
1121 |
+
$pos = $overflow;
|
1122 |
+
} elseif ($len) {
|
1123 |
+
$plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
|
1124 |
+
$iv = substr($ciphertext, -$this->block_size);
|
1125 |
+
}
|
1126 |
+
break;
|
1127 |
+
case CRYPT_MODE_OFB:
|
1128 |
+
$plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
|
1129 |
+
}
|
1130 |
+
|
1131 |
+
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
if ($this->engine === CRYPT_ENGINE_MCRYPT) {
|
1135 |
+
$block_size = $this->block_size;
|
1136 |
+
if ($this->changed) {
|
1137 |
+
$this->_setupMcrypt();
|
1138 |
+
$this->changed = false;
|
1139 |
+
}
|
1140 |
+
if ($this->dechanged) {
|
1141 |
+
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
|
1142 |
+
$this->dechanged = false;
|
1143 |
+
}
|
1144 |
+
|
1145 |
+
if ($this->mode == CRYPT_MODE_CFB && $this->continuousBuffer) {
|
1146 |
+
$iv = &$this->decryptIV;
|
1147 |
+
$pos = &$this->debuffer['pos'];
|
1148 |
+
$len = strlen($ciphertext);
|
1149 |
+
$plaintext = '';
|
1150 |
+
$i = 0;
|
1151 |
+
if ($pos) {
|
1152 |
+
$orig_pos = $pos;
|
1153 |
+
$max = $block_size - $pos;
|
1154 |
+
if ($len >= $max) {
|
1155 |
+
$i = $max;
|
1156 |
+
$len-= $max;
|
1157 |
+
$pos = 0;
|
1158 |
+
} else {
|
1159 |
+
$i = $len;
|
1160 |
+
$pos+= $len;
|
1161 |
+
$len = 0;
|
1162 |
+
}
|
1163 |
+
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
1164 |
+
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1165 |
+
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1166 |
+
}
|
1167 |
+
if ($len >= $block_size) {
|
1168 |
+
$cb = substr($ciphertext, $i, $len - $len % $block_size);
|
1169 |
+
$plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
|
1170 |
+
$iv = substr($cb, -$block_size);
|
1171 |
+
$len%= $block_size;
|
1172 |
+
}
|
1173 |
+
if ($len) {
|
1174 |
+
$iv = @mcrypt_generic($this->ecb, $iv);
|
1175 |
+
$plaintext.= $iv ^ substr($ciphertext, -$len);
|
1176 |
+
$iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
|
1177 |
+
$pos = $len;
|
1178 |
+
}
|
1179 |
+
|
1180 |
+
return $plaintext;
|
1181 |
+
}
|
1182 |
+
|
1183 |
+
$plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
|
1184 |
+
|
1185 |
+
if (!$this->continuousBuffer) {
|
1186 |
+
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1190 |
+
}
|
1191 |
+
|
1192 |
+
if ($this->changed) {
|
1193 |
+
$this->_setup();
|
1194 |
+
$this->changed = false;
|
1195 |
+
}
|
1196 |
+
if ($this->use_inline_crypt) {
|
1197 |
+
$inline = $this->inline_crypt;
|
1198 |
+
return $inline('decrypt', $this, $ciphertext);
|
1199 |
+
}
|
1200 |
+
|
1201 |
+
$block_size = $this->block_size;
|
1202 |
+
|
1203 |
+
$buffer = &$this->debuffer;
|
1204 |
+
$plaintext = '';
|
1205 |
+
switch ($this->mode) {
|
1206 |
+
case CRYPT_MODE_ECB:
|
1207 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1208 |
+
$plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
|
1209 |
+
}
|
1210 |
+
break;
|
1211 |
+
case CRYPT_MODE_CBC:
|
1212 |
+
$xor = $this->decryptIV;
|
1213 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1214 |
+
$block = substr($ciphertext, $i, $block_size);
|
1215 |
+
$plaintext.= $this->_decryptBlock($block) ^ $xor;
|
1216 |
+
$xor = $block;
|
1217 |
+
}
|
1218 |
+
if ($this->continuousBuffer) {
|
1219 |
+
$this->decryptIV = $xor;
|
1220 |
+
}
|
1221 |
+
break;
|
1222 |
+
case CRYPT_MODE_CTR:
|
1223 |
+
$xor = $this->decryptIV;
|
1224 |
+
if (strlen($buffer['ciphertext'])) {
|
1225 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1226 |
+
$block = substr($ciphertext, $i, $block_size);
|
1227 |
+
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
1228 |
+
$buffer['ciphertext'].= $this->_encryptBlock($xor);
|
1229 |
+
$this->_increment_str($xor);
|
1230 |
+
}
|
1231 |
+
$key = $this->_string_shift($buffer['ciphertext'], $block_size);
|
1232 |
+
$plaintext.= $block ^ $key;
|
1233 |
+
}
|
1234 |
+
} else {
|
1235 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1236 |
+
$block = substr($ciphertext, $i, $block_size);
|
1237 |
+
$key = $this->_encryptBlock($xor);
|
1238 |
+
$this->_increment_str($xor);
|
1239 |
+
$plaintext.= $block ^ $key;
|
1240 |
+
}
|
1241 |
+
}
|
1242 |
+
if ($this->continuousBuffer) {
|
1243 |
+
$this->decryptIV = $xor;
|
1244 |
+
if ($start = strlen($ciphertext) % $block_size) {
|
1245 |
+
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
1246 |
+
}
|
1247 |
+
}
|
1248 |
+
break;
|
1249 |
+
case CRYPT_MODE_CFB:
|
1250 |
+
if ($this->continuousBuffer) {
|
1251 |
+
$iv = &$this->decryptIV;
|
1252 |
+
$pos = &$buffer['pos'];
|
1253 |
+
} else {
|
1254 |
+
$iv = $this->decryptIV;
|
1255 |
+
$pos = 0;
|
1256 |
+
}
|
1257 |
+
$len = strlen($ciphertext);
|
1258 |
+
$i = 0;
|
1259 |
+
if ($pos) {
|
1260 |
+
$orig_pos = $pos;
|
1261 |
+
$max = $block_size - $pos;
|
1262 |
+
if ($len >= $max) {
|
1263 |
+
$i = $max;
|
1264 |
+
$len-= $max;
|
1265 |
+
$pos = 0;
|
1266 |
+
} else {
|
1267 |
+
$i = $len;
|
1268 |
+
$pos+= $len;
|
1269 |
+
$len = 0;
|
1270 |
+
}
|
1271 |
+
// ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
|
1272 |
+
$plaintext = substr($iv, $orig_pos) ^ $ciphertext;
|
1273 |
+
$iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
|
1274 |
+
}
|
1275 |
+
while ($len >= $block_size) {
|
1276 |
+
$iv = $this->_encryptBlock($iv);
|
1277 |
+
$cb = substr($ciphertext, $i, $block_size);
|
1278 |
+
$plaintext.= $iv ^ $cb;
|
1279 |
+
$iv = $cb;
|
1280 |
+
$len-= $block_size;
|
1281 |
+
$i+= $block_size;
|
1282 |
+
}
|
1283 |
+
if ($len) {
|
1284 |
+
$iv = $this->_encryptBlock($iv);
|
1285 |
+
$plaintext.= $iv ^ substr($ciphertext, $i);
|
1286 |
+
$iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
|
1287 |
+
$pos = $len;
|
1288 |
+
}
|
1289 |
+
break;
|
1290 |
+
case CRYPT_MODE_OFB:
|
1291 |
+
$xor = $this->decryptIV;
|
1292 |
+
if (strlen($buffer['xor'])) {
|
1293 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1294 |
+
$block = substr($ciphertext, $i, $block_size);
|
1295 |
+
if (strlen($block) > strlen($buffer['xor'])) {
|
1296 |
+
$xor = $this->_encryptBlock($xor);
|
1297 |
+
$buffer['xor'].= $xor;
|
1298 |
+
}
|
1299 |
+
$key = $this->_string_shift($buffer['xor'], $block_size);
|
1300 |
+
$plaintext.= $block ^ $key;
|
1301 |
+
}
|
1302 |
+
} else {
|
1303 |
+
for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
|
1304 |
+
$xor = $this->_encryptBlock($xor);
|
1305 |
+
$plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
|
1306 |
+
}
|
1307 |
+
$key = $xor;
|
1308 |
+
}
|
1309 |
+
if ($this->continuousBuffer) {
|
1310 |
+
$this->decryptIV = $xor;
|
1311 |
+
if ($start = strlen($ciphertext) % $block_size) {
|
1312 |
+
$buffer['xor'] = substr($key, $start) . $buffer['xor'];
|
1313 |
+
}
|
1314 |
+
}
|
1315 |
+
break;
|
1316 |
+
case CRYPT_MODE_STREAM:
|
1317 |
+
$plaintext = $this->_decryptBlock($ciphertext);
|
1318 |
+
break;
|
1319 |
+
}
|
1320 |
+
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
/**
|
1324 |
+
* OpenSSL CTR Processor
|
1325 |
+
*
|
1326 |
+
* PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
|
1327 |
+
* for CTR is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
|
1328 |
+
* and Crypt_Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
|
1329 |
+
* function will emulate CTR with ECB when necessary.
|
1330 |
+
*
|
1331 |
+
* @see self::encrypt()
|
1332 |
+
* @see self::decrypt()
|
1333 |
+
* @param string $plaintext
|
1334 |
+
* @param string $encryptIV
|
1335 |
+
* @param array $buffer
|
1336 |
+
* @return string
|
1337 |
+
* @access private
|
1338 |
+
*/
|
1339 |
+
function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
|
1340 |
+
{
|
1341 |
+
$ciphertext = '';
|
1342 |
+
|
1343 |
+
$block_size = $this->block_size;
|
1344 |
+
$key = $this->key;
|
1345 |
+
|
1346 |
+
if ($this->openssl_emulate_ctr) {
|
1347 |
+
$xor = $encryptIV;
|
1348 |
+
if (strlen($buffer['ciphertext'])) {
|
1349 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1350 |
+
$block = substr($plaintext, $i, $block_size);
|
1351 |
+
if (strlen($block) > strlen($buffer['ciphertext'])) {
|
1352 |
+
$result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1353 |
+
$result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
|
1354 |
+
$buffer['ciphertext'].= $result;
|
1355 |
+
}
|
1356 |
+
$this->_increment_str($xor);
|
1357 |
+
$otp = $this->_string_shift($buffer['ciphertext'], $block_size);
|
1358 |
+
$ciphertext.= $block ^ $otp;
|
1359 |
+
}
|
1360 |
+
} else {
|
1361 |
+
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
|
1362 |
+
$block = substr($plaintext, $i, $block_size);
|
1363 |
+
$otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1364 |
+
$otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
|
1365 |
+
$this->_increment_str($xor);
|
1366 |
+
$ciphertext.= $block ^ $otp;
|
1367 |
+
}
|
1368 |
+
}
|
1369 |
+
if ($this->continuousBuffer) {
|
1370 |
+
$encryptIV = $xor;
|
1371 |
+
if ($start = strlen($plaintext) % $block_size) {
|
1372 |
+
$buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
|
1373 |
+
}
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
return $ciphertext;
|
1377 |
+
}
|
1378 |
+
|
1379 |
+
if (strlen($buffer['ciphertext'])) {
|
1380 |
+
$ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
|
1381 |
+
$plaintext = substr($plaintext, strlen($ciphertext));
|
1382 |
+
|
1383 |
+
if (!strlen($plaintext)) {
|
1384 |
+
return $ciphertext;
|
1385 |
+
}
|
1386 |
+
}
|
1387 |
+
|
1388 |
+
$overflow = strlen($plaintext) % $block_size;
|
1389 |
+
if ($overflow) {
|
1390 |
+
$plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
|
1391 |
+
$encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1392 |
+
$temp = $this->_string_pop($encrypted, $block_size);
|
1393 |
+
$ciphertext.= $encrypted . ($plaintext2 ^ $temp);
|
1394 |
+
if ($this->continuousBuffer) {
|
1395 |
+
$buffer['ciphertext'] = substr($temp, $overflow);
|
1396 |
+
$encryptIV = $temp;
|
1397 |
+
}
|
1398 |
+
} elseif (!strlen($buffer['ciphertext'])) {
|
1399 |
+
$ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1400 |
+
$temp = $this->_string_pop($ciphertext, $block_size);
|
1401 |
+
if ($this->continuousBuffer) {
|
1402 |
+
$encryptIV = $temp;
|
1403 |
+
}
|
1404 |
+
}
|
1405 |
+
if ($this->continuousBuffer) {
|
1406 |
+
if (!defined('OPENSSL_RAW_DATA')) {
|
1407 |
+
$encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1408 |
+
}
|
1409 |
+
$encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
|
1410 |
+
if ($overflow) {
|
1411 |
+
$this->_increment_str($encryptIV);
|
1412 |
+
}
|
1413 |
+
}
|
1414 |
+
|
1415 |
+
return $ciphertext;
|
1416 |
+
}
|
1417 |
+
|
1418 |
+
/**
|
1419 |
+
* OpenSSL OFB Processor
|
1420 |
+
*
|
1421 |
+
* PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
|
1422 |
+
* for OFB is the same for both encrypting and decrypting this function is re-used by both Crypt_Base::encrypt()
|
1423 |
+
* and Crypt_Base::decrypt().
|
1424 |
+
*
|
1425 |
+
* @see self::encrypt()
|
1426 |
+
* @see self::decrypt()
|
1427 |
+
* @param string $plaintext
|
1428 |
+
* @param string $encryptIV
|
1429 |
+
* @param array $buffer
|
1430 |
+
* @return string
|
1431 |
+
* @access private
|
1432 |
+
*/
|
1433 |
+
function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
|
1434 |
+
{
|
1435 |
+
if (strlen($buffer['xor'])) {
|
1436 |
+
$ciphertext = $plaintext ^ $buffer['xor'];
|
1437 |
+
$buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
|
1438 |
+
$plaintext = substr($plaintext, strlen($ciphertext));
|
1439 |
+
} else {
|
1440 |
+
$ciphertext = '';
|
1441 |
+
}
|
1442 |
+
|
1443 |
+
$block_size = $this->block_size;
|
1444 |
+
|
1445 |
+
$len = strlen($plaintext);
|
1446 |
+
$key = $this->key;
|
1447 |
+
$overflow = $len % $block_size;
|
1448 |
+
|
1449 |
+
if (strlen($plaintext)) {
|
1450 |
+
if ($overflow) {
|
1451 |
+
$ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1452 |
+
$xor = $this->_string_pop($ciphertext, $block_size);
|
1453 |
+
if ($this->continuousBuffer) {
|
1454 |
+
$encryptIV = $xor;
|
1455 |
+
}
|
1456 |
+
$ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
|
1457 |
+
if ($this->continuousBuffer) {
|
1458 |
+
$buffer['xor'] = $xor;
|
1459 |
+
}
|
1460 |
+
} else {
|
1461 |
+
$ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
|
1462 |
+
if ($this->continuousBuffer) {
|
1463 |
+
$encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
|
1464 |
+
}
|
1465 |
+
}
|
1466 |
+
}
|
1467 |
+
|
1468 |
+
return $ciphertext;
|
1469 |
+
}
|
1470 |
+
|
1471 |
+
/**
|
1472 |
+
* phpseclib <-> OpenSSL Mode Mapper
|
1473 |
+
*
|
1474 |
+
* May need to be overwritten by classes extending this one in some cases
|
1475 |
+
*
|
1476 |
+
* @return int
|
1477 |
+
* @access private
|
1478 |
+
*/
|
1479 |
+
function _openssl_translate_mode()
|
1480 |
+
{
|
1481 |
+
switch ($this->mode) {
|
1482 |
+
case CRYPT_MODE_ECB:
|
1483 |
+
return 'ecb';
|
1484 |
+
case CRYPT_MODE_CBC:
|
1485 |
+
return 'cbc';
|
1486 |
+
case CRYPT_MODE_CTR:
|
1487 |
+
return 'ctr';
|
1488 |
+
case CRYPT_MODE_CFB:
|
1489 |
+
return 'cfb';
|
1490 |
+
case CRYPT_MODE_OFB:
|
1491 |
+
return 'ofb';
|
1492 |
+
}
|
1493 |
+
}
|
1494 |
+
|
1495 |
+
/**
|
1496 |
+
* Pad "packets".
|
1497 |
+
*
|
1498 |
+
* Block ciphers working by encrypting between their specified [$this->]block_size at a time
|
1499 |
+
* If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
|
1500 |
+
* pad the input so that it is of the proper length.
|
1501 |
+
*
|
1502 |
+
* Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
|
1503 |
+
* where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
|
1504 |
+
* away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
|
1505 |
+
* transmitted separately)
|
1506 |
+
*
|
1507 |
+
* @see self::disablePadding()
|
1508 |
+
* @access public
|
1509 |
+
*/
|
1510 |
+
function enablePadding()
|
1511 |
+
{
|
1512 |
+
$this->padding = true;
|
1513 |
+
}
|
1514 |
+
|
1515 |
+
/**
|
1516 |
+
* Do not pad packets.
|
1517 |
+
*
|
1518 |
+
* @see self::enablePadding()
|
1519 |
+
* @access public
|
1520 |
+
*/
|
1521 |
+
function disablePadding()
|
1522 |
+
{
|
1523 |
+
$this->padding = false;
|
1524 |
+
}
|
1525 |
+
|
1526 |
+
/**
|
1527 |
+
* Treat consecutive "packets" as if they are a continuous buffer.
|
1528 |
+
*
|
1529 |
+
* Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
|
1530 |
+
* will yield different outputs:
|
1531 |
+
*
|
1532 |
+
* <code>
|
1533 |
+
* echo $rijndael->encrypt(substr($plaintext, 0, 16));
|
1534 |
+
* echo $rijndael->encrypt(substr($plaintext, 16, 16));
|
1535 |
+
* </code>
|
1536 |
+
* <code>
|
1537 |
+
* echo $rijndael->encrypt($plaintext);
|
1538 |
+
* </code>
|
1539 |
+
*
|
1540 |
+
* The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
|
1541 |
+
* another, as demonstrated with the following:
|
1542 |
+
*
|
1543 |
+
* <code>
|
1544 |
+
* $rijndael->encrypt(substr($plaintext, 0, 16));
|
1545 |
+
* echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
|
1546 |
+
* </code>
|
1547 |
+
* <code>
|
1548 |
+
* echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
|
1549 |
+
* </code>
|
1550 |
+
*
|
1551 |
+
* With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
|
1552 |
+
* outputs. The reason is due to the fact that the initialization vector's change after every encryption /
|
1553 |
+
* decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
|
1554 |
+
*
|
1555 |
+
* Put another way, when the continuous buffer is enabled, the state of the Crypt_*() object changes after each
|
1556 |
+
* encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
|
1557 |
+
* continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
|
1558 |
+
* however, they are also less intuitive and more likely to cause you problems.
|
1559 |
+
*
|
1560 |
+
* @see self::disableContinuousBuffer()
|
1561 |
+
* @access public
|
1562 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1563 |
+
*/
|
1564 |
+
function enableContinuousBuffer()
|
1565 |
+
{
|
1566 |
+
if ($this->mode == CRYPT_MODE_ECB) {
|
1567 |
+
return;
|
1568 |
+
}
|
1569 |
+
|
1570 |
+
$this->continuousBuffer = true;
|
1571 |
+
|
1572 |
+
$this->_setEngine();
|
1573 |
+
}
|
1574 |
+
|
1575 |
+
/**
|
1576 |
+
* Treat consecutive packets as if they are a discontinuous buffer.
|
1577 |
+
*
|
1578 |
+
* The default behavior.
|
1579 |
+
*
|
1580 |
+
* @see self::enableContinuousBuffer()
|
1581 |
+
* @access public
|
1582 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1583 |
+
*/
|
1584 |
+
function disableContinuousBuffer()
|
1585 |
+
{
|
1586 |
+
if ($this->mode == CRYPT_MODE_ECB) {
|
1587 |
+
return;
|
1588 |
+
}
|
1589 |
+
if (!$this->continuousBuffer) {
|
1590 |
+
return;
|
1591 |
+
}
|
1592 |
+
|
1593 |
+
$this->continuousBuffer = false;
|
1594 |
+
$this->changed = true;
|
1595 |
+
|
1596 |
+
$this->_setEngine();
|
1597 |
+
}
|
1598 |
+
|
1599 |
+
/**
|
1600 |
+
* Test for engine validity
|
1601 |
+
*
|
1602 |
+
* @see self::Crypt_Base()
|
1603 |
+
* @param int $engine
|
1604 |
+
* @access public
|
1605 |
+
* @return bool
|
1606 |
+
*/
|
1607 |
+
function isValidEngine($engine)
|
1608 |
+
{
|
1609 |
+
switch ($engine) {
|
1610 |
+
case CRYPT_ENGINE_OPENSSL:
|
1611 |
+
if ($this->mode == CRYPT_MODE_STREAM && $this->continuousBuffer) {
|
1612 |
+
return false;
|
1613 |
+
}
|
1614 |
+
$this->openssl_emulate_ctr = false;
|
1615 |
+
$result = $this->cipher_name_openssl &&
|
1616 |
+
extension_loaded('openssl') &&
|
1617 |
+
// PHP 5.3.0 - 5.3.2 did not let you set IV's
|
1618 |
+
version_compare(PHP_VERSION, '5.3.3', '>=');
|
1619 |
+
if (!$result) {
|
1620 |
+
return false;
|
1621 |
+
}
|
1622 |
+
|
1623 |
+
// prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
|
1624 |
+
// $options openssl_encrypt expected a boolean $raw_data.
|
1625 |
+
if (!defined('OPENSSL_RAW_DATA')) {
|
1626 |
+
$this->openssl_options = true;
|
1627 |
+
} else {
|
1628 |
+
$this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
|
1629 |
+
}
|
1630 |
+
|
1631 |
+
$methods = openssl_get_cipher_methods();
|
1632 |
+
if (in_array($this->cipher_name_openssl, $methods)) {
|
1633 |
+
return true;
|
1634 |
+
}
|
1635 |
+
// not all of openssl's symmetric cipher's support ctr. for those
|
1636 |
+
// that don't we'll emulate it
|
1637 |
+
switch ($this->mode) {
|
1638 |
+
case CRYPT_MODE_CTR:
|
1639 |
+
if (in_array($this->cipher_name_openssl_ecb, $methods)) {
|
1640 |
+
$this->openssl_emulate_ctr = true;
|
1641 |
+
return true;
|
1642 |
+
}
|
1643 |
+
}
|
1644 |
+
return false;
|
1645 |
+
case CRYPT_ENGINE_MCRYPT:
|
1646 |
+
return $this->cipher_name_mcrypt &&
|
1647 |
+
extension_loaded('mcrypt') &&
|
1648 |
+
in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
|
1649 |
+
case CRYPT_ENGINE_INTERNAL:
|
1650 |
+
return true;
|
1651 |
+
}
|
1652 |
+
|
1653 |
+
return false;
|
1654 |
+
}
|
1655 |
+
|
1656 |
+
/**
|
1657 |
+
* Sets the preferred crypt engine
|
1658 |
+
*
|
1659 |
+
* Currently, $engine could be:
|
1660 |
+
*
|
1661 |
+
* - CRYPT_ENGINE_OPENSSL [very fast]
|
1662 |
+
*
|
1663 |
+
* - CRYPT_ENGINE_MCRYPT [fast]
|
1664 |
+
*
|
1665 |
+
* - CRYPT_ENGINE_INTERNAL [slow]
|
1666 |
+
*
|
1667 |
+
* If the preferred crypt engine is not available the fastest available one will be used
|
1668 |
+
*
|
1669 |
+
* @see self::Crypt_Base()
|
1670 |
+
* @param int $engine
|
1671 |
+
* @access public
|
1672 |
+
*/
|
1673 |
+
function setPreferredEngine($engine)
|
1674 |
+
{
|
1675 |
+
switch ($engine) {
|
1676 |
+
//case CRYPT_ENGINE_OPENSSL:
|
1677 |
+
case CRYPT_ENGINE_MCRYPT:
|
1678 |
+
case CRYPT_ENGINE_INTERNAL:
|
1679 |
+
$this->preferredEngine = $engine;
|
1680 |
+
break;
|
1681 |
+
default:
|
1682 |
+
$this->preferredEngine = CRYPT_ENGINE_OPENSSL;
|
1683 |
+
}
|
1684 |
+
|
1685 |
+
$this->_setEngine();
|
1686 |
+
}
|
1687 |
+
|
1688 |
+
/**
|
1689 |
+
* Returns the engine currently being utilized
|
1690 |
+
*
|
1691 |
+
* @see self::_setEngine()
|
1692 |
+
* @access public
|
1693 |
+
*/
|
1694 |
+
function getEngine()
|
1695 |
+
{
|
1696 |
+
return $this->engine;
|
1697 |
+
}
|
1698 |
+
|
1699 |
+
/**
|
1700 |
+
* Sets the engine as appropriate
|
1701 |
+
*
|
1702 |
+
* @see self::Crypt_Base()
|
1703 |
+
* @access private
|
1704 |
+
*/
|
1705 |
+
function _setEngine()
|
1706 |
+
{
|
1707 |
+
$this->engine = null;
|
1708 |
+
|
1709 |
+
$candidateEngines = array(
|
1710 |
+
$this->preferredEngine,
|
1711 |
+
CRYPT_ENGINE_OPENSSL,
|
1712 |
+
CRYPT_ENGINE_MCRYPT
|
1713 |
+
);
|
1714 |
+
foreach ($candidateEngines as $engine) {
|
1715 |
+
if ($this->isValidEngine($engine)) {
|
1716 |
+
$this->engine = $engine;
|
1717 |
+
break;
|
1718 |
+
}
|
1719 |
+
}
|
1720 |
+
if (!$this->engine) {
|
1721 |
+
$this->engine = CRYPT_ENGINE_INTERNAL;
|
1722 |
+
}
|
1723 |
+
|
1724 |
+
if ($this->engine != CRYPT_ENGINE_MCRYPT && $this->enmcrypt) {
|
1725 |
+
// Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
|
1726 |
+
// (re)open them with the module named in $this->cipher_name_mcrypt
|
1727 |
+
@mcrypt_module_close($this->enmcrypt);
|
1728 |
+
@mcrypt_module_close($this->demcrypt);
|
1729 |
+
$this->enmcrypt = null;
|
1730 |
+
$this->demcrypt = null;
|
1731 |
+
|
1732 |
+
if ($this->ecb) {
|
1733 |
+
@mcrypt_module_close($this->ecb);
|
1734 |
+
$this->ecb = null;
|
1735 |
+
}
|
1736 |
+
}
|
1737 |
+
|
1738 |
+
$this->changed = true;
|
1739 |
+
}
|
1740 |
+
|
1741 |
+
/**
|
1742 |
+
* Encrypts a block
|
1743 |
+
*
|
1744 |
+
* @access private
|
1745 |
+
* @param string $in
|
1746 |
+
* @return string
|
1747 |
+
* @internal Must be extended by the child Crypt_* class
|
1748 |
+
*/
|
1749 |
+
function _encryptBlock($in)
|
1750 |
+
{
|
1751 |
+
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1752 |
+
}
|
1753 |
+
|
1754 |
+
/**
|
1755 |
+
* Decrypts a block
|
1756 |
+
*
|
1757 |
+
* @access private
|
1758 |
+
* @param string $in
|
1759 |
+
* @return string
|
1760 |
+
* @internal Must be extended by the child Crypt_* class
|
1761 |
+
*/
|
1762 |
+
function _decryptBlock($in)
|
1763 |
+
{
|
1764 |
+
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1765 |
+
}
|
1766 |
+
|
1767 |
+
/**
|
1768 |
+
* Setup the key (expansion)
|
1769 |
+
*
|
1770 |
+
* Only used if $engine == CRYPT_ENGINE_INTERNAL
|
1771 |
+
*
|
1772 |
+
* @see self::_setup()
|
1773 |
+
* @access private
|
1774 |
+
* @internal Must be extended by the child Crypt_* class
|
1775 |
+
*/
|
1776 |
+
function _setupKey()
|
1777 |
+
{
|
1778 |
+
user_error((version_compare(PHP_VERSION, '5.0.0', '>=') ? __METHOD__ : __FUNCTION__) . '() must extend by class ' . get_class($this), E_USER_ERROR);
|
1779 |
+
}
|
1780 |
+
|
1781 |
+
/**
|
1782 |
+
* Setup the CRYPT_ENGINE_INTERNAL $engine
|
1783 |
+
*
|
1784 |
+
* (re)init, if necessary, the internal cipher $engine and flush all $buffers
|
1785 |
+
* Used (only) if $engine == CRYPT_ENGINE_INTERNAL
|
1786 |
+
*
|
1787 |
+
* _setup() will be called each time if $changed === true
|
1788 |
+
* typically this happens when using one or more of following public methods:
|
1789 |
+
*
|
1790 |
+
* - setKey()
|
1791 |
+
*
|
1792 |
+
* - setIV()
|
1793 |
+
*
|
1794 |
+
* - disableContinuousBuffer()
|
1795 |
+
*
|
1796 |
+
* - First run of encrypt() / decrypt() with no init-settings
|
1797 |
+
*
|
1798 |
+
* @see self::setKey()
|
1799 |
+
* @see self::setIV()
|
1800 |
+
* @see self::disableContinuousBuffer()
|
1801 |
+
* @access private
|
1802 |
+
* @internal _setup() is always called before en/decryption.
|
1803 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1804 |
+
*/
|
1805 |
+
function _setup()
|
1806 |
+
{
|
1807 |
+
$this->_clearBuffers();
|
1808 |
+
$this->_setupKey();
|
1809 |
+
|
1810 |
+
if ($this->use_inline_crypt) {
|
1811 |
+
$this->_setupInlineCrypt();
|
1812 |
+
}
|
1813 |
+
}
|
1814 |
+
|
1815 |
+
/**
|
1816 |
+
* Setup the CRYPT_ENGINE_MCRYPT $engine
|
1817 |
+
*
|
1818 |
+
* (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
|
1819 |
+
* Used (only) if $engine = CRYPT_ENGINE_MCRYPT
|
1820 |
+
*
|
1821 |
+
* _setupMcrypt() will be called each time if $changed === true
|
1822 |
+
* typically this happens when using one or more of following public methods:
|
1823 |
+
*
|
1824 |
+
* - setKey()
|
1825 |
+
*
|
1826 |
+
* - setIV()
|
1827 |
+
*
|
1828 |
+
* - disableContinuousBuffer()
|
1829 |
+
*
|
1830 |
+
* - First run of encrypt() / decrypt()
|
1831 |
+
*
|
1832 |
+
* @see self::setKey()
|
1833 |
+
* @see self::setIV()
|
1834 |
+
* @see self::disableContinuousBuffer()
|
1835 |
+
* @access private
|
1836 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1837 |
+
*/
|
1838 |
+
function _setupMcrypt()
|
1839 |
+
{
|
1840 |
+
$this->_clearBuffers();
|
1841 |
+
$this->enchanged = $this->dechanged = true;
|
1842 |
+
|
1843 |
+
if (!isset($this->enmcrypt)) {
|
1844 |
+
static $mcrypt_modes = array(
|
1845 |
+
CRYPT_MODE_CTR => 'ctr',
|
1846 |
+
CRYPT_MODE_ECB => MCRYPT_MODE_ECB,
|
1847 |
+
CRYPT_MODE_CBC => MCRYPT_MODE_CBC,
|
1848 |
+
CRYPT_MODE_CFB => 'ncfb',
|
1849 |
+
CRYPT_MODE_OFB => MCRYPT_MODE_NOFB,
|
1850 |
+
CRYPT_MODE_STREAM => MCRYPT_MODE_STREAM,
|
1851 |
+
);
|
1852 |
+
|
1853 |
+
$this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
|
1854 |
+
$this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
|
1855 |
+
|
1856 |
+
// we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
|
1857 |
+
// to workaround mcrypt's broken ncfb implementation in buffered mode
|
1858 |
+
// see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
|
1859 |
+
if ($this->mode == CRYPT_MODE_CFB) {
|
1860 |
+
$this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
|
1861 |
+
}
|
1862 |
+
} // else should mcrypt_generic_deinit be called?
|
1863 |
+
|
1864 |
+
if ($this->mode == CRYPT_MODE_CFB) {
|
1865 |
+
@mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
|
1866 |
+
}
|
1867 |
+
}
|
1868 |
+
|
1869 |
+
/**
|
1870 |
+
* Pads a string
|
1871 |
+
*
|
1872 |
+
* Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
|
1873 |
+
* $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
|
1874 |
+
* chr($this->block_size - (strlen($text) % $this->block_size)
|
1875 |
+
*
|
1876 |
+
* If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
|
1877 |
+
* and padding will, hence forth, be enabled.
|
1878 |
+
*
|
1879 |
+
* @see self::_unpad()
|
1880 |
+
* @param string $text
|
1881 |
+
* @access private
|
1882 |
+
* @return string
|
1883 |
+
*/
|
1884 |
+
function _pad($text)
|
1885 |
+
{
|
1886 |
+
$length = strlen($text);
|
1887 |
+
|
1888 |
+
if (!$this->padding) {
|
1889 |
+
if ($length % $this->block_size == 0) {
|
1890 |
+
return $text;
|
1891 |
+
} else {
|
1892 |
+
user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
|
1893 |
+
$this->padding = true;
|
1894 |
+
}
|
1895 |
+
}
|
1896 |
+
|
1897 |
+
$pad = $this->block_size - ($length % $this->block_size);
|
1898 |
+
|
1899 |
+
return str_pad($text, $length + $pad, chr($pad));
|
1900 |
+
}
|
1901 |
+
|
1902 |
+
/**
|
1903 |
+
* Unpads a string.
|
1904 |
+
*
|
1905 |
+
* If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
|
1906 |
+
* and false will be returned.
|
1907 |
+
*
|
1908 |
+
* @see self::_pad()
|
1909 |
+
* @param string $text
|
1910 |
+
* @access private
|
1911 |
+
* @return string
|
1912 |
+
*/
|
1913 |
+
function _unpad($text)
|
1914 |
+
{
|
1915 |
+
if (!$this->padding) {
|
1916 |
+
return $text;
|
1917 |
+
}
|
1918 |
+
|
1919 |
+
$length = ord($text[strlen($text) - 1]);
|
1920 |
+
|
1921 |
+
if (!$length || $length > $this->block_size) {
|
1922 |
+
return false;
|
1923 |
+
}
|
1924 |
+
|
1925 |
+
return substr($text, 0, -$length);
|
1926 |
+
}
|
1927 |
+
|
1928 |
+
/**
|
1929 |
+
* Clears internal buffers
|
1930 |
+
*
|
1931 |
+
* Clearing/resetting the internal buffers is done everytime
|
1932 |
+
* after disableContinuousBuffer() or on cipher $engine (re)init
|
1933 |
+
* ie after setKey() or setIV()
|
1934 |
+
*
|
1935 |
+
* @access public
|
1936 |
+
* @internal Could, but not must, extend by the child Crypt_* class
|
1937 |
+
*/
|
1938 |
+
function _clearBuffers()
|
1939 |
+
{
|
1940 |
+
$this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
|
1941 |
+
|
1942 |
+
// mcrypt's handling of invalid's $iv:
|
1943 |
+
// $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
|
1944 |
+
$this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
|
1945 |
+
|
1946 |
+
if (!$this->skip_key_adjustment) {
|
1947 |
+
$this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
|
1948 |
+
}
|
1949 |
+
}
|
1950 |
+
|
1951 |
+
/**
|
1952 |
+
* String Shift
|
1953 |
+
*
|
1954 |
+
* Inspired by array_shift
|
1955 |
+
*
|
1956 |
+
* @param string $string
|
1957 |
+
* @param int $index
|
1958 |
+
* @access private
|
1959 |
+
* @return string
|
1960 |
+
*/
|
1961 |
+
function _string_shift(&$string, $index = 1)
|
1962 |
+
{
|
1963 |
+
$substr = substr($string, 0, $index);
|
1964 |
+
$string = substr($string, $index);
|
1965 |
+
return $substr;
|
1966 |
+
}
|
1967 |
+
|
1968 |
+
/**
|
1969 |
+
* String Pop
|
1970 |
+
*
|
1971 |
+
* Inspired by array_pop
|
1972 |
+
*
|
1973 |
+
* @param string $string
|
1974 |
+
* @param int $index
|
1975 |
+
* @access private
|
1976 |
+
* @return string
|
1977 |
+
*/
|
1978 |
+
function _string_pop(&$string, $index = 1)
|
1979 |
+
{
|
1980 |
+
$substr = substr($string, -$index);
|
1981 |
+
$string = substr($string, 0, -$index);
|
1982 |
+
return $substr;
|
1983 |
+
}
|
1984 |
+
|
1985 |
+
/**
|
1986 |
+
* Increment the current string
|
1987 |
+
*
|
1988 |
+
* @see self::decrypt()
|
1989 |
+
* @see self::encrypt()
|
1990 |
+
* @param string $var
|
1991 |
+
* @access private
|
1992 |
+
*/
|
1993 |
+
function _increment_str(&$var)
|
1994 |
+
{
|
1995 |
+
for ($i = 4; $i <= strlen($var); $i+= 4) {
|
1996 |
+
$temp = substr($var, -$i, 4);
|
1997 |
+
switch ($temp) {
|
1998 |
+
case "\xFF\xFF\xFF\xFF":
|
1999 |
+
$var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
|
2000 |
+
break;
|
2001 |
+
case "\x7F\xFF\xFF\xFF":
|
2002 |
+
$var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
|
2003 |
+
return;
|
2004 |
+
default:
|
2005 |
+
$temp = unpack('Nnum', $temp);
|
2006 |
+
$var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
|
2007 |
+
return;
|
2008 |
+
}
|
2009 |
+
}
|
2010 |
+
|
2011 |
+
$remainder = strlen($var) % 4;
|
2012 |
+
|
2013 |
+
if ($remainder == 0) {
|
2014 |
+
return;
|
2015 |
+
}
|
2016 |
+
|
2017 |
+
$temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
|
2018 |
+
$temp = substr(pack('N', $temp['num'] + 1), -$remainder);
|
2019 |
+
$var = substr_replace($var, $temp, 0, $remainder);
|
2020 |
+
}
|
2021 |
+
|
2022 |
+
/**
|
2023 |
+
* Setup the performance-optimized function for de/encrypt()
|
2024 |
+
*
|
2025 |
+
* Stores the created (or existing) callback function-name
|
2026 |
+
* in $this->inline_crypt
|
2027 |
+
*
|
2028 |
+
* Internally for phpseclib developers:
|
2029 |
+
*
|
2030 |
+
* _setupInlineCrypt() would be called only if:
|
2031 |
+
*
|
2032 |
+
* - $engine == CRYPT_ENGINE_INTERNAL and
|
2033 |
+
*
|
2034 |
+
* - $use_inline_crypt === true
|
2035 |
+
*
|
2036 |
+
* - each time on _setup(), after(!) _setupKey()
|
2037 |
+
*
|
2038 |
+
*
|
2039 |
+
* This ensures that _setupInlineCrypt() has always a
|
2040 |
+
* full ready2go initializated internal cipher $engine state
|
2041 |
+
* where, for example, the keys allready expanded,
|
2042 |
+
* keys/block_size calculated and such.
|
2043 |
+
*
|
2044 |
+
* It is, each time if called, the responsibility of _setupInlineCrypt():
|
2045 |
+
*
|
2046 |
+
* - to set $this->inline_crypt to a valid and fully working callback function
|
2047 |
+
* as a (faster) replacement for encrypt() / decrypt()
|
2048 |
+
*
|
2049 |
+
* - NOT to create unlimited callback functions (for memory reasons!)
|
2050 |
+
* no matter how often _setupInlineCrypt() would be called. At some
|
2051 |
+
* point of amount they must be generic re-useable.
|
2052 |
+
*
|
2053 |
+
* - the code of _setupInlineCrypt() it self,
|
2054 |
+
* and the generated callback code,
|
2055 |
+
* must be, in following order:
|
2056 |
+
* - 100% safe
|
2057 |
+
* - 100% compatible to encrypt()/decrypt()
|
2058 |
+
* - using only php5+ features/lang-constructs/php-extensions if
|
2059 |
+
* compatibility (down to php4) or fallback is provided
|
2060 |
+
* - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
|
2061 |
+
* - >= 10% faster than encrypt()/decrypt() [which is, by the way,
|
2062 |
+
* the reason for the existence of _setupInlineCrypt() :-)]
|
2063 |
+
* - memory-nice
|
2064 |
+
* - short (as good as possible)
|
2065 |
+
*
|
2066 |
+
* Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
|
2067 |
+
* - In case of using inline crypting, _setupInlineCrypt() must extend by the child Crypt_* class.
|
2068 |
+
* - The following variable names are reserved:
|
2069 |
+
* - $_* (all variable names prefixed with an underscore)
|
2070 |
+
* - $self (object reference to it self. Do not use $this, but $self instead)
|
2071 |
+
* - $in (the content of $in has to en/decrypt by the generated code)
|
2072 |
+
* - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
|
2073 |
+
*
|
2074 |
+
*
|
2075 |
+
* @see self::_setup()
|
2076 |
+
* @see self::_createInlineCryptFunction()
|
2077 |
+
* @see self::encrypt()
|
2078 |
+
* @see self::decrypt()
|
2079 |
+
* @access private
|
2080 |
+
* @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
|
2081 |
+
*/
|
2082 |
+
function _setupInlineCrypt()
|
2083 |
+
{
|
2084 |
+
// If, for any reason, an extending Crypt_Base() Crypt_* class
|
2085 |
+
// not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
|
2086 |
+
// ie in the class var declaration of $use_inline_crypt in general for the Crypt_* class,
|
2087 |
+
// in the constructor at object instance-time
|
2088 |
+
// or, if it's runtime-specific, at runtime
|
2089 |
+
|
2090 |
+
$this->use_inline_crypt = false;
|
2091 |
+
}
|
2092 |
+
|
2093 |
+
/**
|
2094 |
+
* Creates the performance-optimized function for en/decrypt()
|
2095 |
+
*
|
2096 |
+
* Internally for phpseclib developers:
|
2097 |
+
*
|
2098 |
+
* _createInlineCryptFunction():
|
2099 |
+
*
|
2100 |
+
* - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
|
2101 |
+
* with the current [$this->]mode of operation code
|
2102 |
+
*
|
2103 |
+
* - create the $inline function, which called by encrypt() / decrypt()
|
2104 |
+
* as its replacement to speed up the en/decryption operations.
|
2105 |
+
*
|
2106 |
+
* - return the name of the created $inline callback function
|
2107 |
+
*
|
2108 |
+
* - used to speed up en/decryption
|
2109 |
+
*
|
2110 |
+
*
|
2111 |
+
*
|
2112 |
+
* The main reason why can speed up things [up to 50%] this way are:
|
2113 |
+
*
|
2114 |
+
* - using variables more effective then regular.
|
2115 |
+
* (ie no use of expensive arrays but integers $k_0, $k_1 ...
|
2116 |
+
* or even, for example, the pure $key[] values hardcoded)
|
2117 |
+
*
|
2118 |
+
* - avoiding 1000's of function calls of ie _encryptBlock()
|
2119 |
+
* but inlining the crypt operations.
|
2120 |
+
* in the mode of operation for() loop.
|
2121 |
+
*
|
2122 |
+
* - full loop unroll the (sometimes key-dependent) rounds
|
2123 |
+
* avoiding this way ++$i counters and runtime-if's etc...
|
2124 |
+
*
|
2125 |
+
* The basic code architectur of the generated $inline en/decrypt()
|
2126 |
+
* lambda function, in pseudo php, is:
|
2127 |
+
*
|
2128 |
+
* <code>
|
2129 |
+
* +----------------------------------------------------------------------------------------------+
|
2130 |
+
* | callback $inline = create_function: |
|
2131 |
+
* | lambda_function_0001_crypt_ECB($action, $text) |
|
2132 |
+
* | { |
|
2133 |
+
* | INSERT PHP CODE OF: |
|
2134 |
+
* | $cipher_code['init_crypt']; // general init code. |
|
2135 |
+
* | // ie: $sbox'es declarations used for |
|
2136 |
+
* | // encrypt and decrypt'ing. |
|
2137 |
+
* | |
|
2138 |
+
* | switch ($action) { |
|
2139 |
+
* | case 'encrypt': |
|
2140 |
+
* | INSERT PHP CODE OF: |
|
2141 |
+
* | $cipher_code['init_encrypt']; // encrypt sepcific init code. |
|
2142 |
+
* | ie: specified $key or $box |
|
2143 |
+
* | declarations for encrypt'ing. |
|
2144 |
+
* | |
|
2145 |
+
* | foreach ($ciphertext) { |
|
2146 |
+
* | $in = $block_size of $ciphertext; |
|
2147 |
+
* | |
|
2148 |
+
* | INSERT PHP CODE OF: |
|
2149 |
+
* | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: |
|
2150 |
+
* | // strlen($in) == $this->block_size |
|
2151 |
+
* | // here comes the cipher algorithm in action |
|
2152 |
+
* | // for encryption. |
|
2153 |
+
* | // $cipher_code['encrypt_block'] has to |
|
2154 |
+
* | // encrypt the content of the $in variable |
|
2155 |
+
* | |
|
2156 |
+
* | $plaintext .= $in; |
|
2157 |
+
* | } |
|
2158 |
+
* | return $plaintext; |
|
2159 |
+
* | |
|
2160 |
+
* | case 'decrypt': |
|
2161 |
+
* | INSERT PHP CODE OF: |
|
2162 |
+
* | $cipher_code['init_decrypt']; // decrypt sepcific init code |
|
2163 |
+
* | ie: specified $key or $box |
|
2164 |
+
* | declarations for decrypt'ing. |
|
2165 |
+
* | foreach ($plaintext) { |
|
2166 |
+
* | $in = $block_size of $plaintext; |
|
2167 |
+
* | |
|
2168 |
+
* | INSERT PHP CODE OF: |
|
2169 |
+
* | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always |
|
2170 |
+
* | // strlen($in) == $this->block_size |
|
2171 |
+
* | // here comes the cipher algorithm in action |
|
2172 |
+
* | // for decryption. |
|
2173 |
+
* | // $cipher_code['decrypt_block'] has to |
|
2174 |
+
* | // decrypt the content of the $in variable |
|
2175 |
+
* | $ciphertext .= $in; |
|
2176 |
+
* | } |
|
2177 |
+
* | return $ciphertext; |
|
2178 |
+
* | } |
|
2179 |
+
* | } |
|
2180 |
+
* +----------------------------------------------------------------------------------------------+
|
2181 |
+
* </code>
|
2182 |
+
*
|
2183 |
+
* See also the Crypt_*::_setupInlineCrypt()'s for
|
2184 |
+
* productive inline $cipher_code's how they works.
|
2185 |
+
*
|
2186 |
+
* Structure of:
|
2187 |
+
* <code>
|
2188 |
+
* $cipher_code = array(
|
2189 |
+
* 'init_crypt' => (string) '', // optional
|
2190 |
+
* 'init_encrypt' => (string) '', // optional
|
2191 |
+
* 'init_decrypt' => (string) '', // optional
|
2192 |
+
* 'encrypt_block' => (string) '', // required
|
2193 |
+
* 'decrypt_block' => (string) '' // required
|
2194 |
+
* );
|
2195 |
+
* </code>
|
2196 |
+
*
|
2197 |
+
* @see self::_setupInlineCrypt()
|
2198 |
+
* @see self::encrypt()
|
2199 |
+
* @see self::decrypt()
|
2200 |
+
* @param array $cipher_code
|
2201 |
+
* @access private
|
2202 |
+
* @return string (the name of the created callback function)
|
2203 |
+
*/
|
2204 |
+
function _createInlineCryptFunction($cipher_code)
|
2205 |
+
{
|
2206 |
+
$block_size = $this->block_size;
|
2207 |
+
|
2208 |
+
// optional
|
2209 |
+
$init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : '';
|
2210 |
+
$init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : '';
|
2211 |
+
$init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : '';
|
2212 |
+
// required
|
2213 |
+
$encrypt_block = $cipher_code['encrypt_block'];
|
2214 |
+
$decrypt_block = $cipher_code['decrypt_block'];
|
2215 |
+
|
2216 |
+
// Generating mode of operation inline code,
|
2217 |
+
// merged with the $cipher_code algorithm
|
2218 |
+
// for encrypt- and decryption.
|
2219 |
+
switch ($this->mode) {
|
2220 |
+
case CRYPT_MODE_ECB:
|
2221 |
+
$encrypt = $init_encrypt . '
|
2222 |
+
$_ciphertext = "";
|
2223 |
+
$_plaintext_len = strlen($_text);
|
2224 |
+
|
2225 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2226 |
+
$in = substr($_text, $_i, '.$block_size.');
|
2227 |
+
'.$encrypt_block.'
|
2228 |
+
$_ciphertext.= $in;
|
2229 |
+
}
|
2230 |
+
|
2231 |
+
return $_ciphertext;
|
2232 |
+
';
|
2233 |
+
|
2234 |
+
$decrypt = $init_decrypt . '
|
2235 |
+
$_plaintext = "";
|
2236 |
+
$_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
|
2237 |
+
$_ciphertext_len = strlen($_text);
|
2238 |
+
|
2239 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2240 |
+
$in = substr($_text, $_i, '.$block_size.');
|
2241 |
+
'.$decrypt_block.'
|
2242 |
+
$_plaintext.= $in;
|
2243 |
+
}
|
2244 |
+
|
2245 |
+
return $self->_unpad($_plaintext);
|
2246 |
+
';
|
2247 |
+
break;
|
2248 |
+
case CRYPT_MODE_CTR:
|
2249 |
+
$encrypt = $init_encrypt . '
|
2250 |
+
$_ciphertext = "";
|
2251 |
+
$_plaintext_len = strlen($_text);
|
2252 |
+
$_xor = $self->encryptIV;
|
2253 |
+
$_buffer = &$self->enbuffer;
|
2254 |
+
if (strlen($_buffer["ciphertext"])) {
|
2255 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2256 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2257 |
+
if (strlen($_block) > strlen($_buffer["ciphertext"])) {
|
2258 |
+
$in = $_xor;
|
2259 |
+
'.$encrypt_block.'
|
2260 |
+
$self->_increment_str($_xor);
|
2261 |
+
$_buffer["ciphertext"].= $in;
|
2262 |
+
}
|
2263 |
+
$_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
|
2264 |
+
$_ciphertext.= $_block ^ $_key;
|
2265 |
+
}
|
2266 |
+
} else {
|
2267 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2268 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2269 |
+
$in = $_xor;
|
2270 |
+
'.$encrypt_block.'
|
2271 |
+
$self->_increment_str($_xor);
|
2272 |
+
$_key = $in;
|
2273 |
+
$_ciphertext.= $_block ^ $_key;
|
2274 |
+
}
|
2275 |
+
}
|
2276 |
+
if ($self->continuousBuffer) {
|
2277 |
+
$self->encryptIV = $_xor;
|
2278 |
+
if ($_start = $_plaintext_len % '.$block_size.') {
|
2279 |
+
$_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
|
2280 |
+
}
|
2281 |
+
}
|
2282 |
+
|
2283 |
+
return $_ciphertext;
|
2284 |
+
';
|
2285 |
+
|
2286 |
+
$decrypt = $init_encrypt . '
|
2287 |
+
$_plaintext = "";
|
2288 |
+
$_ciphertext_len = strlen($_text);
|
2289 |
+
$_xor = $self->decryptIV;
|
2290 |
+
$_buffer = &$self->debuffer;
|
2291 |
+
|
2292 |
+
if (strlen($_buffer["ciphertext"])) {
|
2293 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2294 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2295 |
+
if (strlen($_block) > strlen($_buffer["ciphertext"])) {
|
2296 |
+
$in = $_xor;
|
2297 |
+
'.$encrypt_block.'
|
2298 |
+
$self->_increment_str($_xor);
|
2299 |
+
$_buffer["ciphertext"].= $in;
|
2300 |
+
}
|
2301 |
+
$_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
|
2302 |
+
$_plaintext.= $_block ^ $_key;
|
2303 |
+
}
|
2304 |
+
} else {
|
2305 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2306 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2307 |
+
$in = $_xor;
|
2308 |
+
'.$encrypt_block.'
|
2309 |
+
$self->_increment_str($_xor);
|
2310 |
+
$_key = $in;
|
2311 |
+
$_plaintext.= $_block ^ $_key;
|
2312 |
+
}
|
2313 |
+
}
|
2314 |
+
if ($self->continuousBuffer) {
|
2315 |
+
$self->decryptIV = $_xor;
|
2316 |
+
if ($_start = $_ciphertext_len % '.$block_size.') {
|
2317 |
+
$_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
|
2318 |
+
}
|
2319 |
+
}
|
2320 |
+
|
2321 |
+
return $_plaintext;
|
2322 |
+
';
|
2323 |
+
break;
|
2324 |
+
case CRYPT_MODE_CFB:
|
2325 |
+
$encrypt = $init_encrypt . '
|
2326 |
+
$_ciphertext = "";
|
2327 |
+
$_buffer = &$self->enbuffer;
|
2328 |
+
|
2329 |
+
if ($self->continuousBuffer) {
|
2330 |
+
$_iv = &$self->encryptIV;
|
2331 |
+
$_pos = &$_buffer["pos"];
|
2332 |
+
} else {
|
2333 |
+
$_iv = $self->encryptIV;
|
2334 |
+
$_pos = 0;
|
2335 |
+
}
|
2336 |
+
$_len = strlen($_text);
|
2337 |
+
$_i = 0;
|
2338 |
+
if ($_pos) {
|
2339 |
+
$_orig_pos = $_pos;
|
2340 |
+
$_max = '.$block_size.' - $_pos;
|
2341 |
+
if ($_len >= $_max) {
|
2342 |
+
$_i = $_max;
|
2343 |
+
$_len-= $_max;
|
2344 |
+
$_pos = 0;
|
2345 |
+
} else {
|
2346 |
+
$_i = $_len;
|
2347 |
+
$_pos+= $_len;
|
2348 |
+
$_len = 0;
|
2349 |
+
}
|
2350 |
+
$_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
|
2351 |
+
$_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
|
2352 |
+
}
|
2353 |
+
while ($_len >= '.$block_size.') {
|
2354 |
+
$in = $_iv;
|
2355 |
+
'.$encrypt_block.';
|
2356 |
+
$_iv = $in ^ substr($_text, $_i, '.$block_size.');
|
2357 |
+
$_ciphertext.= $_iv;
|
2358 |
+
$_len-= '.$block_size.';
|
2359 |
+
$_i+= '.$block_size.';
|
2360 |
+
}
|
2361 |
+
if ($_len) {
|
2362 |
+
$in = $_iv;
|
2363 |
+
'.$encrypt_block.'
|
2364 |
+
$_iv = $in;
|
2365 |
+
$_block = $_iv ^ substr($_text, $_i);
|
2366 |
+
$_iv = substr_replace($_iv, $_block, 0, $_len);
|
2367 |
+
$_ciphertext.= $_block;
|
2368 |
+
$_pos = $_len;
|
2369 |
+
}
|
2370 |
+
return $_ciphertext;
|
2371 |
+
';
|
2372 |
+
|
2373 |
+
$decrypt = $init_encrypt . '
|
2374 |
+
$_plaintext = "";
|
2375 |
+
$_buffer = &$self->debuffer;
|
2376 |
+
|
2377 |
+
if ($self->continuousBuffer) {
|
2378 |
+
$_iv = &$self->decryptIV;
|
2379 |
+
$_pos = &$_buffer["pos"];
|
2380 |
+
} else {
|
2381 |
+
$_iv = $self->decryptIV;
|
2382 |
+
$_pos = 0;
|
2383 |
+
}
|
2384 |
+
$_len = strlen($_text);
|
2385 |
+
$_i = 0;
|
2386 |
+
if ($_pos) {
|
2387 |
+
$_orig_pos = $_pos;
|
2388 |
+
$_max = '.$block_size.' - $_pos;
|
2389 |
+
if ($_len >= $_max) {
|
2390 |
+
$_i = $_max;
|
2391 |
+
$_len-= $_max;
|
2392 |
+
$_pos = 0;
|
2393 |
+
} else {
|
2394 |
+
$_i = $_len;
|
2395 |
+
$_pos+= $_len;
|
2396 |
+
$_len = 0;
|
2397 |
+
}
|
2398 |
+
$_plaintext = substr($_iv, $_orig_pos) ^ $_text;
|
2399 |
+
$_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
|
2400 |
+
}
|
2401 |
+
while ($_len >= '.$block_size.') {
|
2402 |
+
$in = $_iv;
|
2403 |
+
'.$encrypt_block.'
|
2404 |
+
$_iv = $in;
|
2405 |
+
$cb = substr($_text, $_i, '.$block_size.');
|
2406 |
+
$_plaintext.= $_iv ^ $cb;
|
2407 |
+
$_iv = $cb;
|
2408 |
+
$_len-= '.$block_size.';
|
2409 |
+
$_i+= '.$block_size.';
|
2410 |
+
}
|
2411 |
+
if ($_len) {
|
2412 |
+
$in = $_iv;
|
2413 |
+
'.$encrypt_block.'
|
2414 |
+
$_iv = $in;
|
2415 |
+
$_plaintext.= $_iv ^ substr($_text, $_i);
|
2416 |
+
$_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
|
2417 |
+
$_pos = $_len;
|
2418 |
+
}
|
2419 |
+
|
2420 |
+
return $_plaintext;
|
2421 |
+
';
|
2422 |
+
break;
|
2423 |
+
case CRYPT_MODE_OFB:
|
2424 |
+
$encrypt = $init_encrypt . '
|
2425 |
+
$_ciphertext = "";
|
2426 |
+
$_plaintext_len = strlen($_text);
|
2427 |
+
$_xor = $self->encryptIV;
|
2428 |
+
$_buffer = &$self->enbuffer;
|
2429 |
+
|
2430 |
+
if (strlen($_buffer["xor"])) {
|
2431 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2432 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2433 |
+
if (strlen($_block) > strlen($_buffer["xor"])) {
|
2434 |
+
$in = $_xor;
|
2435 |
+
'.$encrypt_block.'
|
2436 |
+
$_xor = $in;
|
2437 |
+
$_buffer["xor"].= $_xor;
|
2438 |
+
}
|
2439 |
+
$_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
|
2440 |
+
$_ciphertext.= $_block ^ $_key;
|
2441 |
+
}
|
2442 |
+
} else {
|
2443 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2444 |
+
$in = $_xor;
|
2445 |
+
'.$encrypt_block.'
|
2446 |
+
$_xor = $in;
|
2447 |
+
$_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
|
2448 |
+
}
|
2449 |
+
$_key = $_xor;
|
2450 |
+
}
|
2451 |
+
if ($self->continuousBuffer) {
|
2452 |
+
$self->encryptIV = $_xor;
|
2453 |
+
if ($_start = $_plaintext_len % '.$block_size.') {
|
2454 |
+
$_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
|
2455 |
+
}
|
2456 |
+
}
|
2457 |
+
return $_ciphertext;
|
2458 |
+
';
|
2459 |
+
|
2460 |
+
$decrypt = $init_encrypt . '
|
2461 |
+
$_plaintext = "";
|
2462 |
+
$_ciphertext_len = strlen($_text);
|
2463 |
+
$_xor = $self->decryptIV;
|
2464 |
+
$_buffer = &$self->debuffer;
|
2465 |
+
|
2466 |
+
if (strlen($_buffer["xor"])) {
|
2467 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2468 |
+
$_block = substr($_text, $_i, '.$block_size.');
|
2469 |
+
if (strlen($_block) > strlen($_buffer["xor"])) {
|
2470 |
+
$in = $_xor;
|
2471 |
+
'.$encrypt_block.'
|
2472 |
+
$_xor = $in;
|
2473 |
+
$_buffer["xor"].= $_xor;
|
2474 |
+
}
|
2475 |
+
$_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
|
2476 |
+
$_plaintext.= $_block ^ $_key;
|
2477 |
+
}
|
2478 |
+
} else {
|
2479 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2480 |
+
$in = $_xor;
|
2481 |
+
'.$encrypt_block.'
|
2482 |
+
$_xor = $in;
|
2483 |
+
$_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
|
2484 |
+
}
|
2485 |
+
$_key = $_xor;
|
2486 |
+
}
|
2487 |
+
if ($self->continuousBuffer) {
|
2488 |
+
$self->decryptIV = $_xor;
|
2489 |
+
if ($_start = $_ciphertext_len % '.$block_size.') {
|
2490 |
+
$_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
|
2491 |
+
}
|
2492 |
+
}
|
2493 |
+
return $_plaintext;
|
2494 |
+
';
|
2495 |
+
break;
|
2496 |
+
case CRYPT_MODE_STREAM:
|
2497 |
+
$encrypt = $init_encrypt . '
|
2498 |
+
$_ciphertext = "";
|
2499 |
+
'.$encrypt_block.'
|
2500 |
+
return $_ciphertext;
|
2501 |
+
';
|
2502 |
+
$decrypt = $init_decrypt . '
|
2503 |
+
$_plaintext = "";
|
2504 |
+
'.$decrypt_block.'
|
2505 |
+
return $_plaintext;
|
2506 |
+
';
|
2507 |
+
break;
|
2508 |
+
// case CRYPT_MODE_CBC:
|
2509 |
+
default:
|
2510 |
+
$encrypt = $init_encrypt . '
|
2511 |
+
$_ciphertext = "";
|
2512 |
+
$_plaintext_len = strlen($_text);
|
2513 |
+
|
2514 |
+
$in = $self->encryptIV;
|
2515 |
+
|
2516 |
+
for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
|
2517 |
+
$in = substr($_text, $_i, '.$block_size.') ^ $in;
|
2518 |
+
'.$encrypt_block.'
|
2519 |
+
$_ciphertext.= $in;
|
2520 |
+
}
|
2521 |
+
|
2522 |
+
if ($self->continuousBuffer) {
|
2523 |
+
$self->encryptIV = $in;
|
2524 |
+
}
|
2525 |
+
|
2526 |
+
return $_ciphertext;
|
2527 |
+
';
|
2528 |
+
|
2529 |
+
$decrypt = $init_decrypt . '
|
2530 |
+
$_plaintext = "";
|
2531 |
+
$_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
|
2532 |
+
$_ciphertext_len = strlen($_text);
|
2533 |
+
|
2534 |
+
$_iv = $self->decryptIV;
|
2535 |
+
|
2536 |
+
for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
|
2537 |
+
$in = $_block = substr($_text, $_i, '.$block_size.');
|
2538 |
+
'.$decrypt_block.'
|
2539 |
+
$_plaintext.= $in ^ $_iv;
|
2540 |
+
$_iv = $_block;
|
2541 |
+
}
|
2542 |
+
|
2543 |
+
if ($self->continuousBuffer) {
|
2544 |
+
$self->decryptIV = $_iv;
|
2545 |
+
}
|
2546 |
+
|
2547 |
+
return $self->_unpad($_plaintext);
|
2548 |
+
';
|
2549 |
+
break;
|
2550 |
+
}
|
2551 |
+
|
2552 |
+
// Create the $inline function and return its name as string. Ready to run!
|
2553 |
+
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
2554 |
+
eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
|
2555 |
+
return $func;
|
2556 |
+
}
|
2557 |
+
|
2558 |
+
return create_function('$_action, &$self, $_text', $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }');
|
2559 |
+
}
|
2560 |
+
|
2561 |
+
/**
|
2562 |
+
* Holds the lambda_functions table (classwide)
|
2563 |
+
*
|
2564 |
+
* Each name of the lambda function, created from
|
2565 |
+
* _setupInlineCrypt() && _createInlineCryptFunction()
|
2566 |
+
* is stored, classwide (!), here for reusing.
|
2567 |
+
*
|
2568 |
+
* The string-based index of $function is a classwide
|
2569 |
+
* unique value representing, at least, the $mode of
|
2570 |
+
* operation (or more... depends of the optimizing level)
|
2571 |
+
* for which $mode the lambda function was created.
|
2572 |
+
*
|
2573 |
+
* @access private
|
2574 |
+
* @return array &$functions
|
2575 |
+
*/
|
2576 |
+
function &_getLambdaFunctions()
|
2577 |
+
{
|
2578 |
+
static $functions = array();
|
2579 |
+
return $functions;
|
2580 |
+
}
|
2581 |
+
|
2582 |
+
/**
|
2583 |
+
* Generates a digest from $bytes
|
2584 |
+
*
|
2585 |
+
* @see self::_setupInlineCrypt()
|
2586 |
+
* @access private
|
2587 |
+
* @param $bytes
|
2588 |
+
* @return string
|
2589 |
+
*/
|
2590 |
+
function _hashInlineCryptFunction($bytes)
|
2591 |
+
{
|
2592 |
+
if (!defined('CRYPT_BASE_WHIRLPOOL_AVAILABLE')) {
|
2593 |
+
define('CRYPT_BASE_WHIRLPOOL_AVAILABLE', (bool)(extension_loaded('hash') && in_array('whirlpool', hash_algos())));
|
2594 |
+
}
|
2595 |
+
|
2596 |
+
$result = '';
|
2597 |
+
$hash = $bytes;
|
2598 |
+
|
2599 |
+
switch (true) {
|
2600 |
+
case CRYPT_BASE_WHIRLPOOL_AVAILABLE:
|
2601 |
+
foreach (str_split($bytes, 64) as $t) {
|
2602 |
+
$hash = hash('whirlpool', $hash, true);
|
2603 |
+
$result .= $t ^ $hash;
|
2604 |
+
}
|
2605 |
+
return $result . hash('whirlpool', $hash, true);
|
2606 |
+
default:
|
2607 |
+
$len = strlen($bytes);
|
2608 |
+
for ($i = 0; $i < $len; $i+=20) {
|
2609 |
+
$t = substr($bytes, $i, 20);
|
2610 |
+
$hash = pack('H*', sha1($hash));
|
2611 |
+
$result .= $t ^ $hash;
|
2612 |
+
}
|
2613 |
+
return $result . pack('H*', sha1($hash));
|
2614 |
+
}
|
2615 |
+
}
|
2616 |
+
|
2617 |
+
/**
|
2618 |
+
* Convert float to int
|
2619 |
+
*
|
2620 |
+
* On 32-bit Linux installs running PHP < 5.3 converting floats to ints doesn't always work
|
2621 |
+
*
|
2622 |
+
* @access private
|
2623 |
+
* @param string $x
|
2624 |
+
* @return int
|
2625 |
+
*/
|
2626 |
+
function safe_intval($x)
|
2627 |
+
{
|
2628 |
+
switch (true) {
|
2629 |
+
case is_int($x):
|
2630 |
+
// PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
|
2631 |
+
case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
|
2632 |
+
// PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
|
2633 |
+
case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
|
2634 |
+
return $x;
|
2635 |
+
}
|
2636 |
+
return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
|
2637 |
+
((fmod(floor($x / 0x80000000), 2) & 1) << 31);
|
2638 |
+
}
|
2639 |
+
|
2640 |
+
/**
|
2641 |
+
* eval()'able string for in-line float to int
|
2642 |
+
*
|
2643 |
+
* @access private
|
2644 |
+
* @return string
|
2645 |
+
*/
|
2646 |
+
function safe_intval_inline()
|
2647 |
+
{
|
2648 |
+
// on 32-bit linux systems with PHP < 5.3 float to integer conversion is bad
|
2649 |
+
switch (true) {
|
2650 |
+
case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
|
2651 |
+
case version_compare(PHP_VERSION, '5.3.0') >= 0 && (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
|
2652 |
+
case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
|
2653 |
+
return '%s';
|
2654 |
+
break;
|
2655 |
+
default:
|
2656 |
+
$safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
|
2657 |
+
return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
|
2658 |
+
}
|
2659 |
+
}
|
2660 |
+
}
|
installer/dup-installer/classes/Crypt/Random.php
CHANGED
@@ -1,340 +1,340 @@
|
|
1 |
-
<?php
|
2 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
-
/**
|
4 |
-
* Random Number Generator
|
5 |
-
*
|
6 |
-
* The idea behind this function is that it can be easily replaced with your own crypt_random_string()
|
7 |
-
* function. eg. maybe you have a better source of entropy for creating the initial states or whatever.
|
8 |
-
*
|
9 |
-
* PHP versions 4 and 5
|
10 |
-
*
|
11 |
-
* Here's a short example of how to use this library:
|
12 |
-
* <code>
|
13 |
-
* <?php
|
14 |
-
* include 'Crypt/Random.php';
|
15 |
-
*
|
16 |
-
* echo bin2hex(crypt_random_string(8));
|
17 |
-
* ?>
|
18 |
-
* </code>
|
19 |
-
*
|
20 |
-
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
21 |
-
* of this software and associated documentation files (the "Software"), to deal
|
22 |
-
* in the Software without restriction, including without limitation the rights
|
23 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
24 |
-
* copies of the Software, and to permit persons to whom the Software is
|
25 |
-
* furnished to do so, subject to the following conditions:
|
26 |
-
*
|
27 |
-
* The above copyright notice and this permission notice shall be included in
|
28 |
-
* all copies or substantial portions of the Software.
|
29 |
-
*
|
30 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
31 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
32 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
33 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
34 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
35 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
36 |
-
* THE SOFTWARE.
|
37 |
-
*
|
38 |
-
* @category Crypt
|
39 |
-
* @package Crypt_Random
|
40 |
-
* @author Jim Wigginton <terrafrost@php.net>
|
41 |
-
* @copyright 2007 Jim Wigginton
|
42 |
-
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
43 |
-
* @link http://phpseclib.sourceforge.net
|
44 |
-
*/
|
45 |
-
|
46 |
-
// laravel is a PHP framework that utilizes phpseclib. laravel workbenches may, independently,
|
47 |
-
// have phpseclib as a requirement as well. if you're developing such a program you may encounter
|
48 |
-
// a "Cannot redeclare crypt_random_string()" error.
|
49 |
-
if (!function_exists('crypt_random_string')) {
|
50 |
-
/**
|
51 |
-
* "Is Windows" test
|
52 |
-
*
|
53 |
-
* @access private
|
54 |
-
*/
|
55 |
-
define('CRYPT_RANDOM_IS_WINDOWS', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Generate a random string.
|
59 |
-
*
|
60 |
-
* Although microoptimizations are generally discouraged as they impair readability this function is ripe with
|
61 |
-
* microoptimizations because this function has the potential of being called a huge number of times.
|
62 |
-
* eg. for RSA key generation.
|
63 |
-
*
|
64 |
-
* @param int $length
|
65 |
-
* @return string
|
66 |
-
* @access public
|
67 |
-
*/
|
68 |
-
function crypt_random_string($length)
|
69 |
-
{
|
70 |
-
if (!$length) {
|
71 |
-
return '';
|
72 |
-
}
|
73 |
-
|
74 |
-
if (CRYPT_RANDOM_IS_WINDOWS) {
|
75 |
-
// method 1. prior to PHP 5.3, mcrypt_create_iv() would call rand() on windows
|
76 |
-
if (extension_loaded('mcrypt') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
|
77 |
-
return @mcrypt_create_iv($length);
|
78 |
-
}
|
79 |
-
// method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
|
80 |
-
// to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
|
81 |
-
// openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
|
82 |
-
// call php_win32_get_random_bytes():
|
83 |
-
//
|
84 |
-
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
|
85 |
-
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
|
86 |
-
//
|
87 |
-
// php_win32_get_random_bytes() is defined thusly:
|
88 |
-
//
|
89 |
-
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
|
90 |
-
//
|
91 |
-
// we're calling it, all the same, in the off chance that the mcrypt extension is not available
|
92 |
-
if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
|
93 |
-
return openssl_random_pseudo_bytes($length);
|
94 |
-
}
|
95 |
-
} else {
|
96 |
-
// method 1. the fastest
|
97 |
-
if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
|
98 |
-
return openssl_random_pseudo_bytes($length);
|
99 |
-
}
|
100 |
-
// method 2
|
101 |
-
static $fp = true;
|
102 |
-
if ($fp === true) {
|
103 |
-
// warning's will be output unles the error suppression operator is used. errors such as
|
104 |
-
// "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
|
105 |
-
$fp = @fopen('/dev/urandom', 'rb');
|
106 |
-
}
|
107 |
-
if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
|
108 |
-
return fread($fp, $length);
|
109 |
-
}
|
110 |
-
// method 3. pretty much does the same thing as method 2 per the following url:
|
111 |
-
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
|
112 |
-
// surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
|
113 |
-
// not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
|
114 |
-
// restrictions or some such
|
115 |
-
if (extension_loaded('mcrypt')) {
|
116 |
-
return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
|
117 |
-
}
|
118 |
-
}
|
119 |
-
// at this point we have no choice but to use a pure-PHP CSPRNG
|
120 |
-
|
121 |
-
// cascade entropy across multiple PHP instances by fixing the session and collecting all
|
122 |
-
// environmental variables, including the previous session data and the current session
|
123 |
-
// data.
|
124 |
-
//
|
125 |
-
// mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
|
126 |
-
// easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
|
127 |
-
// PHP isn't low level to be able to use those as sources and on a web server there's not likely
|
128 |
-
// going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
|
129 |
-
// however, a ton of people visiting the website. obviously you don't want to base your seeding
|
130 |
-
// soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
|
131 |
-
// by the user and (2) this isn't just looking at the data sent by the current user - it's based
|
132 |
-
// on the data sent by all users. one user requests the page and a hash of their info is saved.
|
133 |
-
// another user visits the page and the serialization of their data is utilized along with the
|
134 |
-
// server envirnment stuff and a hash of the previous http request data (which itself utilizes
|
135 |
-
// a hash of the session data before that). certainly an attacker should be assumed to have
|
136 |
-
// full control over his own http requests. he, however, is not going to have control over
|
137 |
-
// everyone's http requests.
|
138 |
-
static $crypto = false, $v;
|
139 |
-
if ($crypto === false) {
|
140 |
-
// save old session data
|
141 |
-
$old_session_id = session_id();
|
142 |
-
$old_use_cookies = ini_get('session.use_cookies');
|
143 |
-
$old_session_cache_limiter = session_cache_limiter();
|
144 |
-
$_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
|
145 |
-
if ($old_session_id != '') {
|
146 |
-
session_write_close();
|
147 |
-
}
|
148 |
-
|
149 |
-
session_id(1);
|
150 |
-
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
|
151 |
-
ini_set('session.use_cookies', 0);
|
152 |
-
session_cache_limiter('');
|
153 |
-
session_start();
|
154 |
-
|
155 |
-
$v = $seed = $_SESSION['seed'] = pack('H*', sha1(
|
156 |
-
(isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
|
157 |
-
(isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
|
158 |
-
(isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
|
159 |
-
(isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
|
160 |
-
phpseclib_safe_serialize($GLOBALS) .
|
161 |
-
phpseclib_safe_serialize($_SESSION) .
|
162 |
-
phpseclib_safe_serialize($_OLD_SESSION)
|
163 |
-
));
|
164 |
-
if (!isset($_SESSION['count'])) {
|
165 |
-
$_SESSION['count'] = 0;
|
166 |
-
}
|
167 |
-
$_SESSION['count']++;
|
168 |
-
|
169 |
-
session_write_close();
|
170 |
-
|
171 |
-
// restore old session data
|
172 |
-
if ($old_session_id != '') {
|
173 |
-
session_id($old_session_id);
|
174 |
-
session_start();
|
175 |
-
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
|
176 |
-
ini_set('session.use_cookies', $old_use_cookies);
|
177 |
-
session_cache_limiter($old_session_cache_limiter);
|
178 |
-
} else {
|
179 |
-
if ($_OLD_SESSION !== false) {
|
180 |
-
$_SESSION = $_OLD_SESSION;
|
181 |
-
unset($_OLD_SESSION);
|
182 |
-
} else {
|
183 |
-
unset($_SESSION);
|
184 |
-
}
|
185 |
-
}
|
186 |
-
|
187 |
-
// in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
|
188 |
-
// the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
|
189 |
-
// if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
|
190 |
-
// original hash and the current hash. we'll be emulating that. for more info see the following URL:
|
191 |
-
//
|
192 |
-
// http://tools.ietf.org/html/rfc4253#section-7.2
|
193 |
-
//
|
194 |
-
// see the is_string($crypto) part for an example of how to expand the keys
|
195 |
-
$key = pack('H*', sha1($seed . 'A'));
|
196 |
-
$iv = pack('H*', sha1($seed . 'C'));
|
197 |
-
|
198 |
-
// ciphers are used as per the nist.gov link below. also, see this link:
|
199 |
-
//
|
200 |
-
// http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
|
201 |
-
switch (true) {
|
202 |
-
case phpseclib_resolve_include_path('Crypt/AES.php'):
|
203 |
-
if (!class_exists('Crypt_AES')) {
|
204 |
-
include_once 'AES.php';
|
205 |
-
}
|
206 |
-
$crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
207 |
-
break;
|
208 |
-
case phpseclib_resolve_include_path('Crypt/Twofish.php'):
|
209 |
-
if (!class_exists('Crypt_Twofish')) {
|
210 |
-
include_once 'Twofish.php';
|
211 |
-
}
|
212 |
-
$crypto = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
|
213 |
-
break;
|
214 |
-
case phpseclib_resolve_include_path('Crypt/Blowfish.php'):
|
215 |
-
if (!class_exists('Crypt_Blowfish')) {
|
216 |
-
include_once 'Blowfish.php';
|
217 |
-
}
|
218 |
-
$crypto = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
|
219 |
-
break;
|
220 |
-
case phpseclib_resolve_include_path('Crypt/TripleDES.php'):
|
221 |
-
if (!class_exists('Crypt_TripleDES')) {
|
222 |
-
include_once 'TripleDES.php';
|
223 |
-
}
|
224 |
-
$crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
|
225 |
-
break;
|
226 |
-
case phpseclib_resolve_include_path('Crypt/DES.php'):
|
227 |
-
if (!class_exists('Crypt_DES')) {
|
228 |
-
include_once 'DES.php';
|
229 |
-
}
|
230 |
-
$crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
|
231 |
-
break;
|
232 |
-
case phpseclib_resolve_include_path('Crypt/RC4.php'):
|
233 |
-
if (!class_exists('Crypt_RC4')) {
|
234 |
-
include_once 'RC4.php';
|
235 |
-
}
|
236 |
-
$crypto = new Crypt_RC4();
|
237 |
-
break;
|
238 |
-
default:
|
239 |
-
user_error('crypt_random_string requires at least one symmetric cipher be loaded');
|
240 |
-
return false;
|
241 |
-
}
|
242 |
-
|
243 |
-
$crypto->setKey($key);
|
244 |
-
$crypto->setIV($iv);
|
245 |
-
$crypto->enableContinuousBuffer();
|
246 |
-
}
|
247 |
-
|
248 |
-
//return $crypto->encrypt(str_repeat("\0", $length));
|
249 |
-
|
250 |
-
// the following is based off of ANSI X9.31:
|
251 |
-
//
|
252 |
-
// http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
|
253 |
-
//
|
254 |
-
// OpenSSL uses that same standard for it's random numbers:
|
255 |
-
//
|
256 |
-
// http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
|
257 |
-
// (do a search for "ANS X9.31 A.2.4")
|
258 |
-
$result = '';
|
259 |
-
while (strlen($result) < $length) {
|
260 |
-
$i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
|
261 |
-
$r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
|
262 |
-
$v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
|
263 |
-
$result.= $r;
|
264 |
-
}
|
265 |
-
return substr($result, 0, $length);
|
266 |
-
}
|
267 |
-
}
|
268 |
-
|
269 |
-
if (!function_exists('phpseclib_safe_serialize')) {
|
270 |
-
/**
|
271 |
-
* Safely serialize variables
|
272 |
-
*
|
273 |
-
* If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
|
274 |
-
* PHP 5.3 will emit a warning.
|
275 |
-
*
|
276 |
-
* @param mixed $arr
|
277 |
-
* @access public
|
278 |
-
*/
|
279 |
-
function phpseclib_safe_serialize(&$arr)
|
280 |
-
{
|
281 |
-
if (is_object($arr)) {
|
282 |
-
return '';
|
283 |
-
}
|
284 |
-
if (!is_array($arr)) {
|
285 |
-
return serialize($arr);
|
286 |
-
}
|
287 |
-
// prevent circular array recursion
|
288 |
-
if (isset($arr['__phpseclib_marker'])) {
|
289 |
-
return '';
|
290 |
-
}
|
291 |
-
$safearr = array();
|
292 |
-
$arr['__phpseclib_marker'] = true;
|
293 |
-
foreach (array_keys($arr) as $key) {
|
294 |
-
// do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
|
295 |
-
if ($key !== '__phpseclib_marker') {
|
296 |
-
$safearr[$key] = phpseclib_safe_serialize($arr[$key]);
|
297 |
-
}
|
298 |
-
}
|
299 |
-
unset($arr['__phpseclib_marker']);
|
300 |
-
return serialize($safearr);
|
301 |
-
}
|
302 |
-
}
|
303 |
-
|
304 |
-
if (!function_exists('phpseclib_resolve_include_path')) {
|
305 |
-
/**
|
306 |
-
* Resolve filename against the include path.
|
307 |
-
*
|
308 |
-
* Wrapper around stream_resolve_include_path() (which was introduced in
|
309 |
-
* PHP 5.3.2) with fallback implementation for earlier PHP versions.
|
310 |
-
*
|
311 |
-
* @param string $filename
|
312 |
-
* @return string|false
|
313 |
-
* @access public
|
314 |
-
*/
|
315 |
-
function phpseclib_resolve_include_path($filename)
|
316 |
-
{
|
317 |
-
if (function_exists('stream_resolve_include_path')) {
|
318 |
-
return stream_resolve_include_path($filename);
|
319 |
-
}
|
320 |
-
|
321 |
-
// handle non-relative paths
|
322 |
-
if (file_exists($filename)) {
|
323 |
-
return realpath($filename);
|
324 |
-
}
|
325 |
-
|
326 |
-
$paths = PATH_SEPARATOR == ':' ?
|
327 |
-
preg_split('#(?<!phar):#', get_include_path()) :
|
328 |
-
explode(PATH_SEPARATOR, get_include_path());
|
329 |
-
foreach ($paths as $prefix) {
|
330 |
-
// path's specified in include_path don't always end in /
|
331 |
-
$ds = substr($prefix, -1) == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR;
|
332 |
-
$file = $prefix . $ds . $filename;
|
333 |
-
if (file_exists($file)) {
|
334 |
-
return realpath($file);
|
335 |
-
}
|
336 |
-
}
|
337 |
-
|
338 |
-
return false;
|
339 |
-
}
|
340 |
-
}
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
+
/**
|
4 |
+
* Random Number Generator
|
5 |
+
*
|
6 |
+
* The idea behind this function is that it can be easily replaced with your own crypt_random_string()
|
7 |
+
* function. eg. maybe you have a better source of entropy for creating the initial states or whatever.
|
8 |
+
*
|
9 |
+
* PHP versions 4 and 5
|
10 |
+
*
|
11 |
+
* Here's a short example of how to use this library:
|
12 |
+
* <code>
|
13 |
+
* <?php
|
14 |
+
* include 'Crypt/Random.php';
|
15 |
+
*
|
16 |
+
* echo bin2hex(crypt_random_string(8));
|
17 |
+
* ?>
|
18 |
+
* </code>
|
19 |
+
*
|
20 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
21 |
+
* of this software and associated documentation files (the "Software"), to deal
|
22 |
+
* in the Software without restriction, including without limitation the rights
|
23 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
24 |
+
* copies of the Software, and to permit persons to whom the Software is
|
25 |
+
* furnished to do so, subject to the following conditions:
|
26 |
+
*
|
27 |
+
* The above copyright notice and this permission notice shall be included in
|
28 |
+
* all copies or substantial portions of the Software.
|
29 |
+
*
|
30 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
31 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
32 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
33 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
34 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
35 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
36 |
+
* THE SOFTWARE.
|
37 |
+
*
|
38 |
+
* @category Crypt
|
39 |
+
* @package Crypt_Random
|
40 |
+
* @author Jim Wigginton <terrafrost@php.net>
|
41 |
+
* @copyright 2007 Jim Wigginton
|
42 |
+
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
43 |
+
* @link http://phpseclib.sourceforge.net
|
44 |
+
*/
|
45 |
+
|
46 |
+
// laravel is a PHP framework that utilizes phpseclib. laravel workbenches may, independently,
|
47 |
+
// have phpseclib as a requirement as well. if you're developing such a program you may encounter
|
48 |
+
// a "Cannot redeclare crypt_random_string()" error.
|
49 |
+
if (!function_exists('crypt_random_string')) {
|
50 |
+
/**
|
51 |
+
* "Is Windows" test
|
52 |
+
*
|
53 |
+
* @access private
|
54 |
+
*/
|
55 |
+
define('CRYPT_RANDOM_IS_WINDOWS', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Generate a random string.
|
59 |
+
*
|
60 |
+
* Although microoptimizations are generally discouraged as they impair readability this function is ripe with
|
61 |
+
* microoptimizations because this function has the potential of being called a huge number of times.
|
62 |
+
* eg. for RSA key generation.
|
63 |
+
*
|
64 |
+
* @param int $length
|
65 |
+
* @return string
|
66 |
+
* @access public
|
67 |
+
*/
|
68 |
+
function crypt_random_string($length)
|
69 |
+
{
|
70 |
+
if (!$length) {
|
71 |
+
return '';
|
72 |
+
}
|
73 |
+
|
74 |
+
if (CRYPT_RANDOM_IS_WINDOWS) {
|
75 |
+
// method 1. prior to PHP 5.3, mcrypt_create_iv() would call rand() on windows
|
76 |
+
if (extension_loaded('mcrypt') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
|
77 |
+
return @mcrypt_create_iv($length);
|
78 |
+
}
|
79 |
+
// method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
|
80 |
+
// to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
|
81 |
+
// openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
|
82 |
+
// call php_win32_get_random_bytes():
|
83 |
+
//
|
84 |
+
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
|
85 |
+
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
|
86 |
+
//
|
87 |
+
// php_win32_get_random_bytes() is defined thusly:
|
88 |
+
//
|
89 |
+
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
|
90 |
+
//
|
91 |
+
// we're calling it, all the same, in the off chance that the mcrypt extension is not available
|
92 |
+
if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
|
93 |
+
return openssl_random_pseudo_bytes($length);
|
94 |
+
}
|
95 |
+
} else {
|
96 |
+
// method 1. the fastest
|
97 |
+
if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.0', '>=')) {
|
98 |
+
return openssl_random_pseudo_bytes($length);
|
99 |
+
}
|
100 |
+
// method 2
|
101 |
+
static $fp = true;
|
102 |
+
if ($fp === true) {
|
103 |
+
// warning's will be output unles the error suppression operator is used. errors such as
|
104 |
+
// "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
|
105 |
+
$fp = @fopen('/dev/urandom', 'rb');
|
106 |
+
}
|
107 |
+
if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
|
108 |
+
return fread($fp, $length);
|
109 |
+
}
|
110 |
+
// method 3. pretty much does the same thing as method 2 per the following url:
|
111 |
+
// https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
|
112 |
+
// surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
|
113 |
+
// not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
|
114 |
+
// restrictions or some such
|
115 |
+
if (extension_loaded('mcrypt')) {
|
116 |
+
return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
|
117 |
+
}
|
118 |
+
}
|
119 |
+
// at this point we have no choice but to use a pure-PHP CSPRNG
|
120 |
+
|
121 |
+
// cascade entropy across multiple PHP instances by fixing the session and collecting all
|
122 |
+
// environmental variables, including the previous session data and the current session
|
123 |
+
// data.
|
124 |
+
//
|
125 |
+
// mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
|
126 |
+
// easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
|
127 |
+
// PHP isn't low level to be able to use those as sources and on a web server there's not likely
|
128 |
+
// going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
|
129 |
+
// however, a ton of people visiting the website. obviously you don't want to base your seeding
|
130 |
+
// soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
|
131 |
+
// by the user and (2) this isn't just looking at the data sent by the current user - it's based
|
132 |
+
// on the data sent by all users. one user requests the page and a hash of their info is saved.
|
133 |
+
// another user visits the page and the serialization of their data is utilized along with the
|
134 |
+
// server envirnment stuff and a hash of the previous http request data (which itself utilizes
|
135 |
+
// a hash of the session data before that). certainly an attacker should be assumed to have
|
136 |
+
// full control over his own http requests. he, however, is not going to have control over
|
137 |
+
// everyone's http requests.
|
138 |
+
static $crypto = false, $v;
|
139 |
+
if ($crypto === false) {
|
140 |
+
// save old session data
|
141 |
+
$old_session_id = session_id();
|
142 |
+
$old_use_cookies = ini_get('session.use_cookies');
|
143 |
+
$old_session_cache_limiter = session_cache_limiter();
|
144 |
+
$_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
|
145 |
+
if ($old_session_id != '') {
|
146 |
+
session_write_close();
|
147 |
+
}
|
148 |
+
|
149 |
+
session_id(1);
|
150 |
+
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
|
151 |
+
ini_set('session.use_cookies', 0);
|
152 |
+
session_cache_limiter('');
|
153 |
+
session_start();
|
154 |
+
|
155 |
+
$v = $seed = $_SESSION['seed'] = pack('H*', sha1(
|
156 |
+
(isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
|
157 |
+
(isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
|
158 |
+
(isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
|
159 |
+
(isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
|
160 |
+
phpseclib_safe_serialize($GLOBALS) .
|
161 |
+
phpseclib_safe_serialize($_SESSION) .
|
162 |
+
phpseclib_safe_serialize($_OLD_SESSION)
|
163 |
+
));
|
164 |
+
if (!isset($_SESSION['count'])) {
|
165 |
+
$_SESSION['count'] = 0;
|
166 |
+
}
|
167 |
+
$_SESSION['count']++;
|
168 |
+
|
169 |
+
session_write_close();
|
170 |
+
|
171 |
+
// restore old session data
|
172 |
+
if ($old_session_id != '') {
|
173 |
+
session_id($old_session_id);
|
174 |
+
session_start();
|
175 |
+
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('session.use_cookies'))
|
176 |
+
ini_set('session.use_cookies', $old_use_cookies);
|
177 |
+
session_cache_limiter($old_session_cache_limiter);
|
178 |
+
} else {
|
179 |
+
if ($_OLD_SESSION !== false) {
|
180 |
+
$_SESSION = $_OLD_SESSION;
|
181 |
+
unset($_OLD_SESSION);
|
182 |
+
} else {
|
183 |
+
unset($_SESSION);
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
// in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
|
188 |
+
// the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
|
189 |
+
// if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
|
190 |
+
// original hash and the current hash. we'll be emulating that. for more info see the following URL:
|
191 |
+
//
|
192 |
+
// http://tools.ietf.org/html/rfc4253#section-7.2
|
193 |
+
//
|
194 |
+
// see the is_string($crypto) part for an example of how to expand the keys
|
195 |
+
$key = pack('H*', sha1($seed . 'A'));
|
196 |
+
$iv = pack('H*', sha1($seed . 'C'));
|
197 |
+
|
198 |
+
// ciphers are used as per the nist.gov link below. also, see this link:
|
199 |
+
//
|
200 |
+
// http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
|
201 |
+
switch (true) {
|
202 |
+
case phpseclib_resolve_include_path('Crypt/AES.php'):
|
203 |
+
if (!class_exists('Crypt_AES')) {
|
204 |
+
include_once 'AES.php';
|
205 |
+
}
|
206 |
+
$crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
|
207 |
+
break;
|
208 |
+
case phpseclib_resolve_include_path('Crypt/Twofish.php'):
|
209 |
+
if (!class_exists('Crypt_Twofish')) {
|
210 |
+
include_once 'Twofish.php';
|
211 |
+
}
|
212 |
+
$crypto = new Crypt_Twofish(CRYPT_TWOFISH_MODE_CTR);
|
213 |
+
break;
|
214 |
+
case phpseclib_resolve_include_path('Crypt/Blowfish.php'):
|
215 |
+
if (!class_exists('Crypt_Blowfish')) {
|
216 |
+
include_once 'Blowfish.php';
|
217 |
+
}
|
218 |
+
$crypto = new Crypt_Blowfish(CRYPT_BLOWFISH_MODE_CTR);
|
219 |
+
break;
|
220 |
+
case phpseclib_resolve_include_path('Crypt/TripleDES.php'):
|
221 |
+
if (!class_exists('Crypt_TripleDES')) {
|
222 |
+
include_once 'TripleDES.php';
|
223 |
+
}
|
224 |
+
$crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
|
225 |
+
break;
|
226 |
+
case phpseclib_resolve_include_path('Crypt/DES.php'):
|
227 |
+
if (!class_exists('Crypt_DES')) {
|
228 |
+
include_once 'DES.php';
|
229 |
+
}
|
230 |
+
$crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
|
231 |
+
break;
|
232 |
+
case phpseclib_resolve_include_path('Crypt/RC4.php'):
|
233 |
+
if (!class_exists('Crypt_RC4')) {
|
234 |
+
include_once 'RC4.php';
|
235 |
+
}
|
236 |
+
$crypto = new Crypt_RC4();
|
237 |
+
break;
|
238 |
+
default:
|
239 |
+
user_error('crypt_random_string requires at least one symmetric cipher be loaded');
|
240 |
+
return false;
|
241 |
+
}
|
242 |
+
|
243 |
+
$crypto->setKey($key);
|
244 |
+
$crypto->setIV($iv);
|
245 |
+
$crypto->enableContinuousBuffer();
|
246 |
+
}
|
247 |
+
|
248 |
+
//return $crypto->encrypt(str_repeat("\0", $length));
|
249 |
+
|
250 |
+
// the following is based off of ANSI X9.31:
|
251 |
+
//
|
252 |
+
// http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
|
253 |
+
//
|
254 |
+
// OpenSSL uses that same standard for it's random numbers:
|
255 |
+
//
|
256 |
+
// http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
|
257 |
+
// (do a search for "ANS X9.31 A.2.4")
|
258 |
+
$result = '';
|
259 |
+
while (strlen($result) < $length) {
|
260 |
+
$i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
|
261 |
+
$r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
|
262 |
+
$v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
|
263 |
+
$result.= $r;
|
264 |
+
}
|
265 |
+
return substr($result, 0, $length);
|
266 |
+
}
|
267 |
+
}
|
268 |
+
|
269 |
+
if (!function_exists('phpseclib_safe_serialize')) {
|
270 |
+
/**
|
271 |
+
* Safely serialize variables
|
272 |
+
*
|
273 |
+
* If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
|
274 |
+
* PHP 5.3 will emit a warning.
|
275 |
+
*
|
276 |
+
* @param mixed $arr
|
277 |
+
* @access public
|
278 |
+
*/
|
279 |
+
function phpseclib_safe_serialize(&$arr)
|
280 |
+
{
|
281 |
+
if (is_object($arr)) {
|
282 |
+
return '';
|
283 |
+
}
|
284 |
+
if (!is_array($arr)) {
|
285 |
+
return serialize($arr);
|
286 |
+
}
|
287 |
+
// prevent circular array recursion
|
288 |
+
if (isset($arr['__phpseclib_marker'])) {
|
289 |
+
return '';
|
290 |
+
}
|
291 |
+
$safearr = array();
|
292 |
+
$arr['__phpseclib_marker'] = true;
|
293 |
+
foreach (array_keys($arr) as $key) {
|
294 |
+
// do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
|
295 |
+
if ($key !== '__phpseclib_marker') {
|
296 |
+
$safearr[$key] = phpseclib_safe_serialize($arr[$key]);
|
297 |
+
}
|
298 |
+
}
|
299 |
+
unset($arr['__phpseclib_marker']);
|
300 |
+
return serialize($safearr);
|
301 |
+
}
|
302 |
+
}
|
303 |
+
|
304 |
+
if (!function_exists('phpseclib_resolve_include_path')) {
|
305 |
+
/**
|
306 |
+
* Resolve filename against the include path.
|
307 |
+
*
|
308 |
+
* Wrapper around stream_resolve_include_path() (which was introduced in
|
309 |
+
* PHP 5.3.2) with fallback implementation for earlier PHP versions.
|
310 |
+
*
|
311 |
+
* @param string $filename
|
312 |
+
* @return string|false
|
313 |
+
* @access public
|
314 |
+
*/
|
315 |
+
function phpseclib_resolve_include_path($filename)
|
316 |
+
{
|
317 |
+
if (function_exists('stream_resolve_include_path')) {
|
318 |
+
return stream_resolve_include_path($filename);
|
319 |
+
}
|
320 |
+
|
321 |
+
// handle non-relative paths
|
322 |
+
if (file_exists($filename)) {
|
323 |
+
return realpath($filename);
|
324 |
+
}
|
325 |
+
|
326 |
+
$paths = PATH_SEPARATOR == ':' ?
|
327 |
+
preg_split('#(?<!phar):#', get_include_path()) :
|
328 |
+
explode(PATH_SEPARATOR, get_include_path());
|
329 |
+
foreach ($paths as $prefix) {
|
330 |
+
// path's specified in include_path don't always end in /
|
331 |
+
$ds = substr($prefix, -1) == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR;
|
332 |
+
$file = $prefix . $ds . $filename;
|
333 |
+
if (file_exists($file)) {
|
334 |
+
return realpath($file);
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
return false;
|
339 |
+
}
|
340 |
+
}
|
installer/dup-installer/classes/Crypt/Rijndael.php
CHANGED
@@ -1,1050 +1,1050 @@
|
|
1 |
-
<?php
|
2 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
-
/**
|
4 |
-
* Pure-PHP implementation of Rijndael.
|
5 |
-
*
|
6 |
-
* Uses mcrypt, if available/possible, and an internal implementation, otherwise.
|
7 |
-
*
|
8 |
-
* PHP versions 4 and 5
|
9 |
-
*
|
10 |
-
* If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
|
11 |
-
* {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
|
12 |
-
* {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
|
13 |
-
* 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
|
14 |
-
* {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
|
15 |
-
*
|
16 |
-
* Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
|
17 |
-
* does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
|
18 |
-
* {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
|
19 |
-
* algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
|
20 |
-
* are first defined as valid key / block lengths in
|
21 |
-
* {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
|
22 |
-
* Extensions: Other block and Cipher Key lengths.
|
23 |
-
* Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
|
24 |
-
*
|
25 |
-
* {@internal The variable names are the same as those in
|
26 |
-
* {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
|
27 |
-
*
|
28 |
-
* Here's a short example of how to use this library:
|
29 |
-
* <code>
|
30 |
-
* <?php
|
31 |
-
* include 'Crypt/Rijndael.php';
|
32 |
-
*
|
33 |
-
* $rijndael = new Crypt_Rijndael();
|
34 |
-
*
|
35 |
-
* $rijndael->setKey('abcdefghijklmnop');
|
36 |
-
*
|
37 |
-
* $size = 10 * 1024;
|
38 |
-
* $plaintext = '';
|
39 |
-
* for ($i = 0; $i < $size; $i++) {
|
40 |
-
* $plaintext.= 'a';
|
41 |
-
* }
|
42 |
-
*
|
43 |
-
* echo $rijndael->decrypt($rijndael->encrypt($plaintext));
|
44 |
-
* ?>
|
45 |
-
* </code>
|
46 |
-
*
|
47 |
-
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
48 |
-
* of this software and associated documentation files (the "Software"), to deal
|
49 |
-
* in the Software without restriction, including without limitation the rights
|
50 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
51 |
-
* copies of the Software, and to permit persons to whom the Software is
|
52 |
-
* furnished to do so, subject to the following conditions:
|
53 |
-
*
|
54 |
-
* The above copyright notice and this permission notice shall be included in
|
55 |
-
* all copies or substantial portions of the Software.
|
56 |
-
*
|
57 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
58 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
59 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
60 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
61 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
62 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
63 |
-
* THE SOFTWARE.
|
64 |
-
*
|
65 |
-
* @category Crypt
|
66 |
-
* @package Crypt_Rijndael
|
67 |
-
* @author Jim Wigginton <terrafrost@php.net>
|
68 |
-
* @copyright 2008 Jim Wigginton
|
69 |
-
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
70 |
-
* @link http://phpseclib.sourceforge.net
|
71 |
-
*/
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Include Crypt_Base
|
75 |
-
*
|
76 |
-
* Base cipher class
|
77 |
-
*/
|
78 |
-
if (!class_exists('Crypt_Base')) {
|
79 |
-
include_once 'Base.php';
|
80 |
-
}
|
81 |
-
|
82 |
-
/**#@+
|
83 |
-
* @access public
|
84 |
-
* @see self::encrypt()
|
85 |
-
* @see self::decrypt()
|
86 |
-
*/
|
87 |
-
/**
|
88 |
-
* Encrypt / decrypt using the Counter mode.
|
89 |
-
*
|
90 |
-
* Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
|
91 |
-
*
|
92 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
|
93 |
-
*/
|
94 |
-
define('CRYPT_RIJNDAEL_MODE_CTR', CRYPT_MODE_CTR);
|
95 |
-
/**
|
96 |
-
* Encrypt / decrypt using the Electronic Code Book mode.
|
97 |
-
*
|
98 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
|
99 |
-
*/
|
100 |
-
define('CRYPT_RIJNDAEL_MODE_ECB', CRYPT_MODE_ECB);
|
101 |
-
/**
|
102 |
-
* Encrypt / decrypt using the Code Book Chaining mode.
|
103 |
-
*
|
104 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
|
105 |
-
*/
|
106 |
-
define('CRYPT_RIJNDAEL_MODE_CBC', CRYPT_MODE_CBC);
|
107 |
-
/**
|
108 |
-
* Encrypt / decrypt using the Cipher Feedback mode.
|
109 |
-
*
|
110 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
|
111 |
-
*/
|
112 |
-
define('CRYPT_RIJNDAEL_MODE_CFB', CRYPT_MODE_CFB);
|
113 |
-
/**
|
114 |
-
* Encrypt / decrypt using the Cipher Feedback mode.
|
115 |
-
*
|
116 |
-
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
|
117 |
-
*/
|
118 |
-
define('CRYPT_RIJNDAEL_MODE_OFB', CRYPT_MODE_OFB);
|
119 |
-
/**#@-*/
|
120 |
-
|
121 |
-
/**
|
122 |
-
* Pure-PHP implementation of Rijndael.
|
123 |
-
*
|
124 |
-
* @package Crypt_Rijndael
|
125 |
-
* @author Jim Wigginton <terrafrost@php.net>
|
126 |
-
* @access public
|
127 |
-
*/
|
128 |
-
class Crypt_Rijndael extends Crypt_Base
|
129 |
-
{
|
130 |
-
/**
|
131 |
-
* The namespace used by the cipher for its constants.
|
132 |
-
*
|
133 |
-
* @see Crypt_Base::const_namespace
|
134 |
-
* @var string
|
135 |
-
* @access private
|
136 |
-
*/
|
137 |
-
var $const_namespace = 'RIJNDAEL';
|
138 |
-
|
139 |
-
/**
|
140 |
-
* The mcrypt specific name of the cipher
|
141 |
-
*
|
142 |
-
* Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
|
143 |
-
* Crypt_Rijndael determines automatically whether mcrypt is useable
|
144 |
-
* or not for the current $block_size/$key_length.
|
145 |
-
* In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
|
146 |
-
*
|
147 |
-
* @see Crypt_Base::cipher_name_mcrypt
|
148 |
-
* @see Crypt_Base::engine
|
149 |
-
* @see self::isValidEngine()
|
150 |
-
* @var string
|
151 |
-
* @access private
|
152 |
-
*/
|
153 |
-
var $cipher_name_mcrypt = 'rijndael-128';
|
154 |
-
|
155 |
-
/**
|
156 |
-
* The default salt used by setPassword()
|
157 |
-
*
|
158 |
-
* @see Crypt_Base::password_default_salt
|
159 |
-
* @see Crypt_Base::setPassword()
|
160 |
-
* @var string
|
161 |
-
* @access private
|
162 |
-
*/
|
163 |
-
var $password_default_salt = 'phpseclib';
|
164 |
-
|
165 |
-
/**
|
166 |
-
* The Key Schedule
|
167 |
-
*
|
168 |
-
* @see self::_setup()
|
169 |
-
* @var array
|
170 |
-
* @access private
|
171 |
-
*/
|
172 |
-
var $w;
|
173 |
-
|
174 |
-
/**
|
175 |
-
* The Inverse Key Schedule
|
176 |
-
*
|
177 |
-
* @see self::_setup()
|
178 |
-
* @var array
|
179 |
-
* @access private
|
180 |
-
*/
|
181 |
-
var $dw;
|
182 |
-
|
183 |
-
/**
|
184 |
-
* The Block Length divided by 32
|
185 |
-
*
|
186 |
-
* @see self::setBlockLength()
|
187 |
-
* @var int
|
188 |
-
* @access private
|
189 |
-
* @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
|
190 |
-
* because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
|
191 |
-
* derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
|
192 |
-
* of that, we'll just precompute it once.
|
193 |
-
*/
|
194 |
-
var $Nb = 4;
|
195 |
-
|
196 |
-
/**
|
197 |
-
* The Key Length (in bytes)
|
198 |
-
*
|
199 |
-
* @see self::setKeyLength()
|
200 |
-
* @var int
|
201 |
-
* @access private
|
202 |
-
* @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
|
203 |
-
* because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
|
204 |
-
* derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
|
205 |
-
* of that, we'll just precompute it once.
|
206 |
-
*/
|
207 |
-
var $key_length = 16;
|
208 |
-
|
209 |
-
/**
|
210 |
-
* The Key Length divided by 32
|
211 |
-
*
|
212 |
-
* @see self::setKeyLength()
|
213 |
-
* @var int
|
214 |
-
* @access private
|
215 |
-
* @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
|
216 |
-
*/
|
217 |
-
var $Nk = 4;
|
218 |
-
|
219 |
-
/**
|
220 |
-
* The Number of Rounds
|
221 |
-
*
|
222 |
-
* @var int
|
223 |
-
* @access private
|
224 |
-
* @internal The max value is 14, the min value is 10.
|
225 |
-
*/
|
226 |
-
var $Nr;
|
227 |
-
|
228 |
-
/**
|
229 |
-
* Shift offsets
|
230 |
-
*
|
231 |
-
* @var array
|
232 |
-
* @access private
|
233 |
-
*/
|
234 |
-
var $c;
|
235 |
-
|
236 |
-
/**
|
237 |
-
* Holds the last used key- and block_size information
|
238 |
-
*
|
239 |
-
* @var array
|
240 |
-
* @access private
|
241 |
-
*/
|
242 |
-
var $kl;
|
243 |
-
|
244 |
-
/**
|
245 |
-
* Sets the key.
|
246 |
-
*
|
247 |
-
* Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
|
248 |
-
* whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
|
249 |
-
* up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
|
250 |
-
* excess bits.
|
251 |
-
*
|
252 |
-
* If the key is not explicitly set, it'll be assumed to be all null bytes.
|
253 |
-
*
|
254 |
-
* Note: 160/224-bit keys must explicitly set by setKeyLength(), otherwise they will be round/pad up to 192/256 bits.
|
255 |
-
*
|
256 |
-
* @see Crypt_Base:setKey()
|
257 |
-
* @see self::setKeyLength()
|
258 |
-
* @access public
|
259 |
-
* @param string $key
|
260 |
-
*/
|
261 |
-
function setKey($key)
|
262 |
-
{
|
263 |
-
if (!$this->explicit_key_length) {
|
264 |
-
$length = strlen($key);
|
265 |
-
switch (true) {
|
266 |
-
case $length <= 16:
|
267 |
-
$this->key_size = 16;
|
268 |
-
break;
|
269 |
-
case $length <= 20:
|
270 |
-
$this->key_size = 20;
|
271 |
-
break;
|
272 |
-
case $length <= 24:
|
273 |
-
$this->key_size = 24;
|
274 |
-
break;
|
275 |
-
case $length <= 28:
|
276 |
-
$this->key_size = 28;
|
277 |
-
break;
|
278 |
-
default:
|
279 |
-
$this->key_size = 32;
|
280 |
-
}
|
281 |
-
}
|
282 |
-
parent::setKey($key);
|
283 |
-
}
|
284 |
-
|
285 |
-
/**
|
286 |
-
* Sets the key length
|
287 |
-
*
|
288 |
-
* Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
|
289 |
-
* 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
|
290 |
-
*
|
291 |
-
* Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
|
292 |
-
* and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
|
293 |
-
* 192/256 bits as, for example, mcrypt will do.
|
294 |
-
*
|
295 |
-
* That said, if you want be compatible with other Rijndael and AES implementations,
|
296 |
-
* you should not setKeyLength(160) or setKeyLength(224).
|
297 |
-
*
|
298 |
-
* Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
|
299 |
-
* the mcrypt php extension, even if available.
|
300 |
-
* This results then in slower encryption.
|
301 |
-
*
|
302 |
-
* @access public
|
303 |
-
* @param int $length
|
304 |
-
*/
|
305 |
-
function setKeyLength($length)
|
306 |
-
{
|
307 |
-
switch (true) {
|
308 |
-
case $length <= 128:
|
309 |
-
$this->key_length = 16;
|
310 |
-
break;
|
311 |
-
case $length <= 160:
|
312 |
-
$this->key_length = 20;
|
313 |
-
break;
|
314 |
-
case $length <= 192:
|
315 |
-
$this->key_length = 24;
|
316 |
-
break;
|
317 |
-
case $length <= 224:
|
318 |
-
$this->key_length = 28;
|
319 |
-
break;
|
320 |
-
default:
|
321 |
-
$this->key_length = 32;
|
322 |
-
}
|
323 |
-
|
324 |
-
parent::setKeyLength($length);
|
325 |
-
}
|
326 |
-
|
327 |
-
/**
|
328 |
-
* Sets the block length
|
329 |
-
*
|
330 |
-
* Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
|
331 |
-
* 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
|
332 |
-
*
|
333 |
-
* @access public
|
334 |
-
* @param int $length
|
335 |
-
*/
|
336 |
-
function setBlockLength($length)
|
337 |
-
{
|
338 |
-
$length >>= 5;
|
339 |
-
if ($length > 8) {
|
340 |
-
$length = 8;
|
341 |
-
} elseif ($length < 4) {
|
342 |
-
$length = 4;
|
343 |
-
}
|
344 |
-
$this->Nb = $length;
|
345 |
-
$this->block_size = $length << 2;
|
346 |
-
$this->changed = true;
|
347 |
-
$this->_setEngine();
|
348 |
-
}
|
349 |
-
|
350 |
-
/**
|
351 |
-
* Test for engine validity
|
352 |
-
*
|
353 |
-
* This is mainly just a wrapper to set things up for Crypt_Base::isValidEngine()
|
354 |
-
*
|
355 |
-
* @see Crypt_Base::Crypt_Base()
|
356 |
-
* @param int $engine
|
357 |
-
* @access public
|
358 |
-
* @return bool
|
359 |
-
*/
|
360 |
-
function isValidEngine($engine)
|
361 |
-
{
|
362 |
-
switch ($engine) {
|
363 |
-
case CRYPT_ENGINE_OPENSSL:
|
364 |
-
if ($this->block_size != 16) {
|
365 |
-
return false;
|
366 |
-
}
|
367 |
-
$this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
|
368 |
-
$this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode();
|
369 |
-
break;
|
370 |
-
case CRYPT_ENGINE_MCRYPT:
|
371 |
-
$this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
|
372 |
-
if ($this->key_length % 8) { // is it a 160/224-bit key?
|
373 |
-
// mcrypt is not usable for them, only for 128/192/256-bit keys
|
374 |
-
return false;
|
375 |
-
}
|
376 |
-
}
|
377 |
-
|
378 |
-
return parent::isValidEngine($engine);
|
379 |
-
}
|
380 |
-
|
381 |
-
/**
|
382 |
-
* Encrypts a block
|
383 |
-
*
|
384 |
-
* @access private
|
385 |
-
* @param string $in
|
386 |
-
* @return string
|
387 |
-
*/
|
388 |
-
function _encryptBlock($in)
|
389 |
-
{
|
390 |
-
static $tables;
|
391 |
-
if (empty($tables)) {
|
392 |
-
$tables = &$this->_getTables();
|
393 |
-
}
|
394 |
-
$t0 = $tables[0];
|
395 |
-
$t1 = $tables[1];
|
396 |
-
$t2 = $tables[2];
|
397 |
-
$t3 = $tables[3];
|
398 |
-
$sbox = $tables[4];
|
399 |
-
|
400 |
-
$state = array();
|
401 |
-
$words = unpack('N*', $in);
|
402 |
-
|
403 |
-
$c = $this->c;
|
404 |
-
$w = $this->w;
|
405 |
-
$Nb = $this->Nb;
|
406 |
-
$Nr = $this->Nr;
|
407 |
-
|
408 |
-
// addRoundKey
|
409 |
-
$wc = $Nb - 1;
|
410 |
-
foreach ($words as $word) {
|
411 |
-
$state[] = $word ^ $w[++$wc];
|
412 |
-
}
|
413 |
-
|
414 |
-
// fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
|
415 |
-
// subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
|
416 |
-
// Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
|
417 |
-
// Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
|
418 |
-
// Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
|
419 |
-
// equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
|
420 |
-
|
421 |
-
// [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
|
422 |
-
$temp = array();
|
423 |
-
for ($round = 1; $round < $Nr; ++$round) {
|
424 |
-
$i = 0; // $c[0] == 0
|
425 |
-
$j = $c[1];
|
426 |
-
$k = $c[2];
|
427 |
-
$l = $c[3];
|
428 |
-
|
429 |
-
while ($i < $Nb) {
|
430 |
-
$temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
|
431 |
-
$t1[$state[$j] >> 16 & 0x000000FF] ^
|
432 |
-
$t2[$state[$k] >> 8 & 0x000000FF] ^
|
433 |
-
$t3[$state[$l] & 0x000000FF] ^
|
434 |
-
$w[++$wc];
|
435 |
-
++$i;
|
436 |
-
$j = ($j + 1) % $Nb;
|
437 |
-
$k = ($k + 1) % $Nb;
|
438 |
-
$l = ($l + 1) % $Nb;
|
439 |
-
}
|
440 |
-
$state = $temp;
|
441 |
-
}
|
442 |
-
|
443 |
-
// subWord
|
444 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
445 |
-
$state[$i] = $sbox[$state[$i] & 0x000000FF] |
|
446 |
-
($sbox[$state[$i] >> 8 & 0x000000FF] << 8) |
|
447 |
-
($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
|
448 |
-
($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
|
449 |
-
}
|
450 |
-
|
451 |
-
// shiftRows + addRoundKey
|
452 |
-
$i = 0; // $c[0] == 0
|
453 |
-
$j = $c[1];
|
454 |
-
$k = $c[2];
|
455 |
-
$l = $c[3];
|
456 |
-
while ($i < $Nb) {
|
457 |
-
$temp[$i] = ($state[$i] & 0xFF000000) ^
|
458 |
-
($state[$j] & 0x00FF0000) ^
|
459 |
-
($state[$k] & 0x0000FF00) ^
|
460 |
-
($state[$l] & 0x000000FF) ^
|
461 |
-
$w[$i];
|
462 |
-
++$i;
|
463 |
-
$j = ($j + 1) % $Nb;
|
464 |
-
$k = ($k + 1) % $Nb;
|
465 |
-
$l = ($l + 1) % $Nb;
|
466 |
-
}
|
467 |
-
|
468 |
-
switch ($Nb) {
|
469 |
-
case 8:
|
470 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
|
471 |
-
case 7:
|
472 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
|
473 |
-
case 6:
|
474 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
|
475 |
-
case 5:
|
476 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
|
477 |
-
default:
|
478 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
|
479 |
-
}
|
480 |
-
}
|
481 |
-
|
482 |
-
/**
|
483 |
-
* Decrypts a block
|
484 |
-
*
|
485 |
-
* @access private
|
486 |
-
* @param string $in
|
487 |
-
* @return string
|
488 |
-
*/
|
489 |
-
function _decryptBlock($in)
|
490 |
-
{
|
491 |
-
static $invtables;
|
492 |
-
if (empty($invtables)) {
|
493 |
-
$invtables = &$this->_getInvTables();
|
494 |
-
}
|
495 |
-
$dt0 = $invtables[0];
|
496 |
-
$dt1 = $invtables[1];
|
497 |
-
$dt2 = $invtables[2];
|
498 |
-
$dt3 = $invtables[3];
|
499 |
-
$isbox = $invtables[4];
|
500 |
-
|
501 |
-
$state = array();
|
502 |
-
$words = unpack('N*', $in);
|
503 |
-
|
504 |
-
$c = $this->c;
|
505 |
-
$dw = $this->dw;
|
506 |
-
$Nb = $this->Nb;
|
507 |
-
$Nr = $this->Nr;
|
508 |
-
|
509 |
-
// addRoundKey
|
510 |
-
$wc = $Nb - 1;
|
511 |
-
foreach ($words as $word) {
|
512 |
-
$state[] = $word ^ $dw[++$wc];
|
513 |
-
}
|
514 |
-
|
515 |
-
$temp = array();
|
516 |
-
for ($round = $Nr - 1; $round > 0; --$round) {
|
517 |
-
$i = 0; // $c[0] == 0
|
518 |
-
$j = $Nb - $c[1];
|
519 |
-
$k = $Nb - $c[2];
|
520 |
-
$l = $Nb - $c[3];
|
521 |
-
|
522 |
-
while ($i < $Nb) {
|
523 |
-
$temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
|
524 |
-
$dt1[$state[$j] >> 16 & 0x000000FF] ^
|
525 |
-
$dt2[$state[$k] >> 8 & 0x000000FF] ^
|
526 |
-
$dt3[$state[$l] & 0x000000FF] ^
|
527 |
-
$dw[++$wc];
|
528 |
-
++$i;
|
529 |
-
$j = ($j + 1) % $Nb;
|
530 |
-
$k = ($k + 1) % $Nb;
|
531 |
-
$l = ($l + 1) % $Nb;
|
532 |
-
}
|
533 |
-
$state = $temp;
|
534 |
-
}
|
535 |
-
|
536 |
-
// invShiftRows + invSubWord + addRoundKey
|
537 |
-
$i = 0; // $c[0] == 0
|
538 |
-
$j = $Nb - $c[1];
|
539 |
-
$k = $Nb - $c[2];
|
540 |
-
$l = $Nb - $c[3];
|
541 |
-
|
542 |
-
while ($i < $Nb) {
|
543 |
-
$word = ($state[$i] & 0xFF000000) |
|
544 |
-
($state[$j] & 0x00FF0000) |
|
545 |
-
($state[$k] & 0x0000FF00) |
|
546 |
-
($state[$l] & 0x000000FF);
|
547 |
-
|
548 |
-
$temp[$i] = $dw[$i] ^ ($isbox[$word & 0x000000FF] |
|
549 |
-
($isbox[$word >> 8 & 0x000000FF] << 8) |
|
550 |
-
($isbox[$word >> 16 & 0x000000FF] << 16) |
|
551 |
-
($isbox[$word >> 24 & 0x000000FF] << 24));
|
552 |
-
++$i;
|
553 |
-
$j = ($j + 1) % $Nb;
|
554 |
-
$k = ($k + 1) % $Nb;
|
555 |
-
$l = ($l + 1) % $Nb;
|
556 |
-
}
|
557 |
-
|
558 |
-
switch ($Nb) {
|
559 |
-
case 8:
|
560 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
|
561 |
-
case 7:
|
562 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
|
563 |
-
case 6:
|
564 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
|
565 |
-
case 5:
|
566 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
|
567 |
-
default:
|
568 |
-
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
|
569 |
-
}
|
570 |
-
}
|
571 |
-
|
572 |
-
/**
|
573 |
-
* Setup the key (expansion)
|
574 |
-
*
|
575 |
-
* @see Crypt_Base::_setupKey()
|
576 |
-
* @access private
|
577 |
-
*/
|
578 |
-
function _setupKey()
|
579 |
-
{
|
580 |
-
// Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
|
581 |
-
// See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
|
582 |
-
static $rcon = array(0,
|
583 |
-
0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
|
584 |
-
0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
|
585 |
-
0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
|
586 |
-
0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
|
587 |
-
0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
|
588 |
-
0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
|
589 |
-
);
|
590 |
-
|
591 |
-
if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
|
592 |
-
// already expanded
|
593 |
-
return;
|
594 |
-
}
|
595 |
-
$this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size);
|
596 |
-
|
597 |
-
$this->Nk = $this->key_length >> 2;
|
598 |
-
// see Rijndael-ammended.pdf#page=44
|
599 |
-
$this->Nr = max($this->Nk, $this->Nb) + 6;
|
600 |
-
|
601 |
-
// shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
|
602 |
-
// "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
|
603 |
-
// shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
|
604 |
-
// "Table 2: Shift offsets for different block lengths"
|
605 |
-
switch ($this->Nb) {
|
606 |
-
case 4:
|
607 |
-
case 5:
|
608 |
-
case 6:
|
609 |
-
$this->c = array(0, 1, 2, 3);
|
610 |
-
break;
|
611 |
-
case 7:
|
612 |
-
$this->c = array(0, 1, 2, 4);
|
613 |
-
break;
|
614 |
-
case 8:
|
615 |
-
$this->c = array(0, 1, 3, 4);
|
616 |
-
}
|
617 |
-
|
618 |
-
$w = array_values(unpack('N*words', $this->key));
|
619 |
-
|
620 |
-
$length = $this->Nb * ($this->Nr + 1);
|
621 |
-
for ($i = $this->Nk; $i < $length; $i++) {
|
622 |
-
$temp = $w[$i - 1];
|
623 |
-
if ($i % $this->Nk == 0) {
|
624 |
-
// according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
|
625 |
-
// on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
|
626 |
-
// 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
|
627 |
-
// with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
|
628 |
-
$temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
|
629 |
-
$temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
|
630 |
-
} elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
|
631 |
-
$temp = $this->_subWord($temp);
|
632 |
-
}
|
633 |
-
$w[$i] = $w[$i - $this->Nk] ^ $temp;
|
634 |
-
}
|
635 |
-
|
636 |
-
// convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
|
637 |
-
// and generate the inverse key schedule. more specifically,
|
638 |
-
// according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
|
639 |
-
// "The key expansion for the Inverse Cipher is defined as follows:
|
640 |
-
// 1. Apply the Key Expansion.
|
641 |
-
// 2. Apply InvMixColumn to all Round Keys except the first and the last one."
|
642 |
-
// also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
|
643 |
-
list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables();
|
644 |
-
$temp = $this->w = $this->dw = array();
|
645 |
-
for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
|
646 |
-
if ($col == $this->Nb) {
|
647 |
-
if ($row == 0) {
|
648 |
-
$this->dw[0] = $this->w[0];
|
649 |
-
} else {
|
650 |
-
// subWord + invMixColumn + invSubWord = invMixColumn
|
651 |
-
$j = 0;
|
652 |
-
while ($j < $this->Nb) {
|
653 |
-
$dw = $this->_subWord($this->w[$row][$j]);
|
654 |
-
$temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
|
655 |
-
$dt1[$dw >> 16 & 0x000000FF] ^
|
656 |
-
$dt2[$dw >> 8 & 0x000000FF] ^
|
657 |
-
$dt3[$dw & 0x000000FF];
|
658 |
-
$j++;
|
659 |
-
}
|
660 |
-
$this->dw[$row] = $temp;
|
661 |
-
}
|
662 |
-
|
663 |
-
$col = 0;
|
664 |
-
$row++;
|
665 |
-
}
|
666 |
-
$this->w[$row][$col] = $w[$i];
|
667 |
-
}
|
668 |
-
|
669 |
-
$this->dw[$row] = $this->w[$row];
|
670 |
-
|
671 |
-
// Converting to 1-dim key arrays (both ascending)
|
672 |
-
$this->dw = array_reverse($this->dw);
|
673 |
-
$w = array_pop($this->w);
|
674 |
-
$dw = array_pop($this->dw);
|
675 |
-
foreach ($this->w as $r => $wr) {
|
676 |
-
foreach ($wr as $c => $wc) {
|
677 |
-
$w[] = $wc;
|
678 |
-
$dw[] = $this->dw[$r][$c];
|
679 |
-
}
|
680 |
-
}
|
681 |
-
$this->w = $w;
|
682 |
-
$this->dw = $dw;
|
683 |
-
}
|
684 |
-
|
685 |
-
/**
|
686 |
-
* Performs S-Box substitutions
|
687 |
-
*
|
688 |
-
* @access private
|
689 |
-
* @param int $word
|
690 |
-
*/
|
691 |
-
function _subWord($word)
|
692 |
-
{
|
693 |
-
static $sbox;
|
694 |
-
if (empty($sbox)) {
|
695 |
-
list(, , , , $sbox) = $this->_getTables();
|
696 |
-
}
|
697 |
-
|
698 |
-
return $sbox[$word & 0x000000FF] |
|
699 |
-
($sbox[$word >> 8 & 0x000000FF] << 8) |
|
700 |
-
($sbox[$word >> 16 & 0x000000FF] << 16) |
|
701 |
-
($sbox[$word >> 24 & 0x000000FF] << 24);
|
702 |
-
}
|
703 |
-
|
704 |
-
/**
|
705 |
-
* Provides the mixColumns and sboxes tables
|
706 |
-
*
|
707 |
-
* @see Crypt_Rijndael:_encryptBlock()
|
708 |
-
* @see Crypt_Rijndael:_setupInlineCrypt()
|
709 |
-
* @see Crypt_Rijndael:_subWord()
|
710 |
-
* @access private
|
711 |
-
* @return array &$tables
|
712 |
-
*/
|
713 |
-
function &_getTables()
|
714 |
-
{
|
715 |
-
static $tables;
|
716 |
-
if (empty($tables)) {
|
717 |
-
// according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
|
718 |
-
// precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
|
719 |
-
// those are the names we'll use.
|
720 |
-
$t3 = array_map('intval', array(
|
721 |
-
// with array_map('intval', ...) we ensure we have only int's and not
|
722 |
-
// some slower floats converted by php automatically on high values
|
723 |
-
0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
|
724 |
-
0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
|
725 |
-
0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
|
726 |
-
0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
|
727 |
-
0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
|
728 |
-
0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
|
729 |
-
0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
|
730 |
-
0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
|
731 |
-
0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
|
732 |
-
0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
|
733 |
-
0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
|
734 |
-
0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
|
735 |
-
0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
|
736 |
-
0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
|
737 |
-
0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
|
738 |
-
0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
|
739 |
-
0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
|
740 |
-
0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
|
741 |
-
0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
|
742 |
-
0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
|
743 |
-
0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
|
744 |
-
0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
|
745 |
-
0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
|
746 |
-
0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
|
747 |
-
0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
|
748 |
-
0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
|
749 |
-
0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
|
750 |
-
0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
|
751 |
-
0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
|
752 |
-
0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
|
753 |
-
0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
|
754 |
-
0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
|
755 |
-
));
|
756 |
-
|
757 |
-
foreach ($t3 as $t3i) {
|
758 |
-
$t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
|
759 |
-
$t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
|
760 |
-
$t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
|
761 |
-
}
|
762 |
-
|
763 |
-
$tables = array(
|
764 |
-
// The Precomputed mixColumns tables t0 - t3
|
765 |
-
$t0,
|
766 |
-
$t1,
|
767 |
-
$t2,
|
768 |
-
$t3,
|
769 |
-
// The SubByte S-Box
|
770 |
-
array(
|
771 |
-
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
|
772 |
-
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
|
773 |
-
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
|
774 |
-
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
|
775 |
-
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
|
776 |
-
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
|
777 |
-
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
|
778 |
-
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
|
779 |
-
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
|
780 |
-
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
|
781 |
-
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
|
782 |
-
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
|
783 |
-
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
|
784 |
-
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
|
785 |
-
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
|
786 |
-
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
|
787 |
-
)
|
788 |
-
);
|
789 |
-
}
|
790 |
-
return $tables;
|
791 |
-
}
|
792 |
-
|
793 |
-
/**
|
794 |
-
* Provides the inverse mixColumns and inverse sboxes tables
|
795 |
-
*
|
796 |
-
* @see Crypt_Rijndael:_decryptBlock()
|
797 |
-
* @see Crypt_Rijndael:_setupInlineCrypt()
|
798 |
-
* @see Crypt_Rijndael:_setupKey()
|
799 |
-
* @access private
|
800 |
-
* @return array &$tables
|
801 |
-
*/
|
802 |
-
function &_getInvTables()
|
803 |
-
{
|
804 |
-
static $tables;
|
805 |
-
if (empty($tables)) {
|
806 |
-
$dt3 = array_map('intval', array(
|
807 |
-
0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
|
808 |
-
0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
|
809 |
-
0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
|
810 |
-
0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
|
811 |
-
0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
|
812 |
-
0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
|
813 |
-
0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
|
814 |
-
0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
|
815 |
-
0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
|
816 |
-
0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
|
817 |
-
0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
|
818 |
-
0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
|
819 |
-
0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
|
820 |
-
0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
|
821 |
-
0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
|
822 |
-
0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
|
823 |
-
0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
|
824 |
-
0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
|
825 |
-
0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
|
826 |
-
0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
|
827 |
-
0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
|
828 |
-
0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
|
829 |
-
0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
|
830 |
-
0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
|
831 |
-
0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
|
832 |
-
0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
|
833 |
-
0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
|
834 |
-
0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
|
835 |
-
0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
|
836 |
-
0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
|
837 |
-
0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
|
838 |
-
0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
|
839 |
-
));
|
840 |
-
|
841 |
-
foreach ($dt3 as $dt3i) {
|
842 |
-
$dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
|
843 |
-
$dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
|
844 |
-
$dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
|
845 |
-
};
|
846 |
-
|
847 |
-
$tables = array(
|
848 |
-
// The Precomputed inverse mixColumns tables dt0 - dt3
|
849 |
-
$dt0,
|
850 |
-
$dt1,
|
851 |
-
$dt2,
|
852 |
-
$dt3,
|
853 |
-
// The inverse SubByte S-Box
|
854 |
-
array(
|
855 |
-
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
|
856 |
-
0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
|
857 |
-
0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
|
858 |
-
0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
|
859 |
-
0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
|
860 |
-
0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
|
861 |
-
0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
|
862 |
-
0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
|
863 |
-
0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
|
864 |
-
0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
|
865 |
-
0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
|
866 |
-
0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
|
867 |
-
0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
|
868 |
-
0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
|
869 |
-
0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
|
870 |
-
0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
|
871 |
-
)
|
872 |
-
);
|
873 |
-
}
|
874 |
-
return $tables;
|
875 |
-
}
|
876 |
-
|
877 |
-
/**
|
878 |
-
* Setup the performance-optimized function for de/encrypt()
|
879 |
-
*
|
880 |
-
* @see Crypt_Base::_setupInlineCrypt()
|
881 |
-
* @access private
|
882 |
-
*/
|
883 |
-
function _setupInlineCrypt()
|
884 |
-
{
|
885 |
-
// Note: _setupInlineCrypt() will be called only if $this->changed === true
|
886 |
-
// So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt().
|
887 |
-
// However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible.
|
888 |
-
|
889 |
-
$lambda_functions =& Crypt_Rijndael::_getLambdaFunctions();
|
890 |
-
|
891 |
-
// We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
|
892 |
-
// (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit)
|
893 |
-
// After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
|
894 |
-
$gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
|
895 |
-
|
896 |
-
// Generation of a uniqe hash for our generated code
|
897 |
-
$code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
|
898 |
-
if ($gen_hi_opt_code) {
|
899 |
-
$code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
|
900 |
-
}
|
901 |
-
|
902 |
-
if (!isset($lambda_functions[$code_hash])) {
|
903 |
-
switch (true) {
|
904 |
-
case $gen_hi_opt_code:
|
905 |
-
// The hi-optimized $lambda_functions will use the key-words hardcoded for better performance.
|
906 |
-
$w = $this->w;
|
907 |
-
$dw = $this->dw;
|
908 |
-
$init_encrypt = '';
|
909 |
-
$init_decrypt = '';
|
910 |
-
break;
|
911 |
-
default:
|
912 |
-
for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) {
|
913 |
-
$w[] = '$w[' . $i . ']';
|
914 |
-
$dw[] = '$dw[' . $i . ']';
|
915 |
-
}
|
916 |
-
$init_encrypt = '$w = $self->w;';
|
917 |
-
$init_decrypt = '$dw = $self->dw;';
|
918 |
-
}
|
919 |
-
|
920 |
-
$Nr = $this->Nr;
|
921 |
-
$Nb = $this->Nb;
|
922 |
-
$c = $this->c;
|
923 |
-
|
924 |
-
// Generating encrypt code:
|
925 |
-
$init_encrypt.= '
|
926 |
-
static $tables;
|
927 |
-
if (empty($tables)) {
|
928 |
-
$tables = &$self->_getTables();
|
929 |
-
}
|
930 |
-
$t0 = $tables[0];
|
931 |
-
$t1 = $tables[1];
|
932 |
-
$t2 = $tables[2];
|
933 |
-
$t3 = $tables[3];
|
934 |
-
$sbox = $tables[4];
|
935 |
-
';
|
936 |
-
|
937 |
-
$s = 'e';
|
938 |
-
$e = 's';
|
939 |
-
$wc = $Nb - 1;
|
940 |
-
|
941 |
-
// Preround: addRoundKey
|
942 |
-
$encrypt_block = '$in = unpack("N*", $in);'."\n";
|
943 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
944 |
-
$encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n";
|
945 |
-
}
|
946 |
-
|
947 |
-
// Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
|
948 |
-
for ($round = 1; $round < $Nr; ++$round) {
|
949 |
-
list($s, $e) = array($e, $s);
|
950 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
951 |
-
$encrypt_block.=
|
952 |
-
'$'.$e.$i.' =
|
953 |
-
$t0[($'.$s.$i .' >> 24) & 0xff] ^
|
954 |
-
$t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^
|
955 |
-
$t2[($'.$s.(($i + $c[2]) % $Nb).' >> 8) & 0xff] ^
|
956 |
-
$t3[ $'.$s.(($i + $c[3]) % $Nb).' & 0xff] ^
|
957 |
-
'.$w[++$wc].";\n";
|
958 |
-
}
|
959 |
-
}
|
960 |
-
|
961 |
-
// Finalround: subWord + shiftRows + addRoundKey
|
962 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
963 |
-
$encrypt_block.=
|
964 |
-
'$'.$e.$i.' =
|
965 |
-
$sbox[ $'.$e.$i.' & 0xff] |
|
966 |
-
($sbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
|
967 |
-
($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
|
968 |
-
($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
|
969 |
-
}
|
970 |
-
$encrypt_block .= '$in = pack("N*"'."\n";
|
971 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
972 |
-
$encrypt_block.= ',
|
973 |
-
($'.$e.$i .' & '.((int)0xFF000000).') ^
|
974 |
-
($'.$e.(($i + $c[1]) % $Nb).' & 0x00FF0000 ) ^
|
975 |
-
($'.$e.(($i + $c[2]) % $Nb).' & 0x0000FF00 ) ^
|
976 |
-
($'.$e.(($i + $c[3]) % $Nb).' & 0x000000FF ) ^
|
977 |
-
'.$w[$i]."\n";
|
978 |
-
}
|
979 |
-
$encrypt_block .= ');';
|
980 |
-
|
981 |
-
// Generating decrypt code:
|
982 |
-
$init_decrypt.= '
|
983 |
-
static $invtables;
|
984 |
-
if (empty($invtables)) {
|
985 |
-
$invtables = &$self->_getInvTables();
|
986 |
-
}
|
987 |
-
$dt0 = $invtables[0];
|
988 |
-
$dt1 = $invtables[1];
|
989 |
-
$dt2 = $invtables[2];
|
990 |
-
$dt3 = $invtables[3];
|
991 |
-
$isbox = $invtables[4];
|
992 |
-
';
|
993 |
-
|
994 |
-
$s = 'e';
|
995 |
-
$e = 's';
|
996 |
-
$wc = $Nb - 1;
|
997 |
-
|
998 |
-
// Preround: addRoundKey
|
999 |
-
$decrypt_block = '$in = unpack("N*", $in);'."\n";
|
1000 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
1001 |
-
$decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n";
|
1002 |
-
}
|
1003 |
-
|
1004 |
-
// Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
|
1005 |
-
for ($round = 1; $round < $Nr; ++$round) {
|
1006 |
-
list($s, $e) = array($e, $s);
|
1007 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
1008 |
-
$decrypt_block.=
|
1009 |
-
'$'.$e.$i.' =
|
1010 |
-
$dt0[($'.$s.$i .' >> 24) & 0xff] ^
|
1011 |
-
$dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^
|
1012 |
-
$dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >> 8) & 0xff] ^
|
1013 |
-
$dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).' & 0xff] ^
|
1014 |
-
'.$dw[++$wc].";\n";
|
1015 |
-
}
|
1016 |
-
}
|
1017 |
-
|
1018 |
-
// Finalround: subWord + shiftRows + addRoundKey
|
1019 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
1020 |
-
$decrypt_block.=
|
1021 |
-
'$'.$e.$i.' =
|
1022 |
-
$isbox[ $'.$e.$i.' & 0xff] |
|
1023 |
-
($isbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
|
1024 |
-
($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
|
1025 |
-
($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
|
1026 |
-
}
|
1027 |
-
$decrypt_block .= '$in = pack("N*"'."\n";
|
1028 |
-
for ($i = 0; $i < $Nb; ++$i) {
|
1029 |
-
$decrypt_block.= ',
|
1030 |
-
($'.$e.$i. ' & '.((int)0xFF000000).') ^
|
1031 |
-
($'.$e.(($Nb + $i - $c[1]) % $Nb).' & 0x00FF0000 ) ^
|
1032 |
-
($'.$e.(($Nb + $i - $c[2]) % $Nb).' & 0x0000FF00 ) ^
|
1033 |
-
($'.$e.(($Nb + $i - $c[3]) % $Nb).' & 0x000000FF ) ^
|
1034 |
-
'.$dw[$i]."\n";
|
1035 |
-
}
|
1036 |
-
$decrypt_block .= ');';
|
1037 |
-
|
1038 |
-
$lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
|
1039 |
-
array(
|
1040 |
-
'init_crypt' => '',
|
1041 |
-
'init_encrypt' => $init_encrypt,
|
1042 |
-
'init_decrypt' => $init_decrypt,
|
1043 |
-
'encrypt_block' => $encrypt_block,
|
1044 |
-
'decrypt_block' => $decrypt_block
|
1045 |
-
)
|
1046 |
-
);
|
1047 |
-
}
|
1048 |
-
$this->inline_crypt = $lambda_functions[$code_hash];
|
1049 |
-
}
|
1050 |
-
}
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
+
/**
|
4 |
+
* Pure-PHP implementation of Rijndael.
|
5 |
+
*
|
6 |
+
* Uses mcrypt, if available/possible, and an internal implementation, otherwise.
|
7 |
+
*
|
8 |
+
* PHP versions 4 and 5
|
9 |
+
*
|
10 |
+
* If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
|
11 |
+
* {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
|
12 |
+
* {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
|
13 |
+
* 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
|
14 |
+
* {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
|
15 |
+
*
|
16 |
+
* Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
|
17 |
+
* does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
|
18 |
+
* {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
|
19 |
+
* algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
|
20 |
+
* are first defined as valid key / block lengths in
|
21 |
+
* {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
|
22 |
+
* Extensions: Other block and Cipher Key lengths.
|
23 |
+
* Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
|
24 |
+
*
|
25 |
+
* {@internal The variable names are the same as those in
|
26 |
+
* {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
|
27 |
+
*
|
28 |
+
* Here's a short example of how to use this library:
|
29 |
+
* <code>
|
30 |
+
* <?php
|
31 |
+
* include 'Crypt/Rijndael.php';
|
32 |
+
*
|
33 |
+
* $rijndael = new Crypt_Rijndael();
|
34 |
+
*
|
35 |
+
* $rijndael->setKey('abcdefghijklmnop');
|
36 |
+
*
|
37 |
+
* $size = 10 * 1024;
|
38 |
+
* $plaintext = '';
|
39 |
+
* for ($i = 0; $i < $size; $i++) {
|
40 |
+
* $plaintext.= 'a';
|
41 |
+
* }
|
42 |
+
*
|
43 |
+
* echo $rijndael->decrypt($rijndael->encrypt($plaintext));
|
44 |
+
* ?>
|
45 |
+
* </code>
|
46 |
+
*
|
47 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
|
48 |
+
* of this software and associated documentation files (the "Software"), to deal
|
49 |
+
* in the Software without restriction, including without limitation the rights
|
50 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
51 |
+
* copies of the Software, and to permit persons to whom the Software is
|
52 |
+
* furnished to do so, subject to the following conditions:
|
53 |
+
*
|
54 |
+
* The above copyright notice and this permission notice shall be included in
|
55 |
+
* all copies or substantial portions of the Software.
|
56 |
+
*
|
57 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
58 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
59 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
60 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
61 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
62 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
63 |
+
* THE SOFTWARE.
|
64 |
+
*
|
65 |
+
* @category Crypt
|
66 |
+
* @package Crypt_Rijndael
|
67 |
+
* @author Jim Wigginton <terrafrost@php.net>
|
68 |
+
* @copyright 2008 Jim Wigginton
|
69 |
+
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
70 |
+
* @link http://phpseclib.sourceforge.net
|
71 |
+
*/
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Include Crypt_Base
|
75 |
+
*
|
76 |
+
* Base cipher class
|
77 |
+
*/
|
78 |
+
if (!class_exists('Crypt_Base')) {
|
79 |
+
include_once 'Base.php';
|
80 |
+
}
|
81 |
+
|
82 |
+
/**#@+
|
83 |
+
* @access public
|
84 |
+
* @see self::encrypt()
|
85 |
+
* @see self::decrypt()
|
86 |
+
*/
|
87 |
+
/**
|
88 |
+
* Encrypt / decrypt using the Counter mode.
|
89 |
+
*
|
90 |
+
* Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
|
91 |
+
*
|
92 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
|
93 |
+
*/
|
94 |
+
define('CRYPT_RIJNDAEL_MODE_CTR', CRYPT_MODE_CTR);
|
95 |
+
/**
|
96 |
+
* Encrypt / decrypt using the Electronic Code Book mode.
|
97 |
+
*
|
98 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
|
99 |
+
*/
|
100 |
+
define('CRYPT_RIJNDAEL_MODE_ECB', CRYPT_MODE_ECB);
|
101 |
+
/**
|
102 |
+
* Encrypt / decrypt using the Code Book Chaining mode.
|
103 |
+
*
|
104 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
|
105 |
+
*/
|
106 |
+
define('CRYPT_RIJNDAEL_MODE_CBC', CRYPT_MODE_CBC);
|
107 |
+
/**
|
108 |
+
* Encrypt / decrypt using the Cipher Feedback mode.
|
109 |
+
*
|
110 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
|
111 |
+
*/
|
112 |
+
define('CRYPT_RIJNDAEL_MODE_CFB', CRYPT_MODE_CFB);
|
113 |
+
/**
|
114 |
+
* Encrypt / decrypt using the Cipher Feedback mode.
|
115 |
+
*
|
116 |
+
* @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
|
117 |
+
*/
|
118 |
+
define('CRYPT_RIJNDAEL_MODE_OFB', CRYPT_MODE_OFB);
|
119 |
+
/**#@-*/
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Pure-PHP implementation of Rijndael.
|
123 |
+
*
|
124 |
+
* @package Crypt_Rijndael
|
125 |
+
* @author Jim Wigginton <terrafrost@php.net>
|
126 |
+
* @access public
|
127 |
+
*/
|
128 |
+
class Crypt_Rijndael extends Crypt_Base
|
129 |
+
{
|
130 |
+
/**
|
131 |
+
* The namespace used by the cipher for its constants.
|
132 |
+
*
|
133 |
+
* @see Crypt_Base::const_namespace
|
134 |
+
* @var string
|
135 |
+
* @access private
|
136 |
+
*/
|
137 |
+
var $const_namespace = 'RIJNDAEL';
|
138 |
+
|
139 |
+
/**
|
140 |
+
* The mcrypt specific name of the cipher
|
141 |
+
*
|
142 |
+
* Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
|
143 |
+
* Crypt_Rijndael determines automatically whether mcrypt is useable
|
144 |
+
* or not for the current $block_size/$key_length.
|
145 |
+
* In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
|
146 |
+
*
|
147 |
+
* @see Crypt_Base::cipher_name_mcrypt
|
148 |
+
* @see Crypt_Base::engine
|
149 |
+
* @see self::isValidEngine()
|
150 |
+
* @var string
|
151 |
+
* @access private
|
152 |
+
*/
|
153 |
+
var $cipher_name_mcrypt = 'rijndael-128';
|
154 |
+
|
155 |
+
/**
|
156 |
+
* The default salt used by setPassword()
|
157 |
+
*
|
158 |
+
* @see Crypt_Base::password_default_salt
|
159 |
+
* @see Crypt_Base::setPassword()
|
160 |
+
* @var string
|
161 |
+
* @access private
|
162 |
+
*/
|
163 |
+
var $password_default_salt = 'phpseclib';
|
164 |
+
|
165 |
+
/**
|
166 |
+
* The Key Schedule
|
167 |
+
*
|
168 |
+
* @see self::_setup()
|
169 |
+
* @var array
|
170 |
+
* @access private
|
171 |
+
*/
|
172 |
+
var $w;
|
173 |
+
|
174 |
+
/**
|
175 |
+
* The Inverse Key Schedule
|
176 |
+
*
|
177 |
+
* @see self::_setup()
|
178 |
+
* @var array
|
179 |
+
* @access private
|
180 |
+
*/
|
181 |
+
var $dw;
|
182 |
+
|
183 |
+
/**
|
184 |
+
* The Block Length divided by 32
|
185 |
+
*
|
186 |
+
* @see self::setBlockLength()
|
187 |
+
* @var int
|
188 |
+
* @access private
|
189 |
+
* @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
|
190 |
+
* because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
|
191 |
+
* derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
|
192 |
+
* of that, we'll just precompute it once.
|
193 |
+
*/
|
194 |
+
var $Nb = 4;
|
195 |
+
|
196 |
+
/**
|
197 |
+
* The Key Length (in bytes)
|
198 |
+
*
|
199 |
+
* @see self::setKeyLength()
|
200 |
+
* @var int
|
201 |
+
* @access private
|
202 |
+
* @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
|
203 |
+
* because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
|
204 |
+
* derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
|
205 |
+
* of that, we'll just precompute it once.
|
206 |
+
*/
|
207 |
+
var $key_length = 16;
|
208 |
+
|
209 |
+
/**
|
210 |
+
* The Key Length divided by 32
|
211 |
+
*
|
212 |
+
* @see self::setKeyLength()
|
213 |
+
* @var int
|
214 |
+
* @access private
|
215 |
+
* @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
|
216 |
+
*/
|
217 |
+
var $Nk = 4;
|
218 |
+
|
219 |
+
/**
|
220 |
+
* The Number of Rounds
|
221 |
+
*
|
222 |
+
* @var int
|
223 |
+
* @access private
|
224 |
+
* @internal The max value is 14, the min value is 10.
|
225 |
+
*/
|
226 |
+
var $Nr;
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Shift offsets
|
230 |
+
*
|
231 |
+
* @var array
|
232 |
+
* @access private
|
233 |
+
*/
|
234 |
+
var $c;
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Holds the last used key- and block_size information
|
238 |
+
*
|
239 |
+
* @var array
|
240 |
+
* @access private
|
241 |
+
*/
|
242 |
+
var $kl;
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Sets the key.
|
246 |
+
*
|
247 |
+
* Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
|
248 |
+
* whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
|
249 |
+
* up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
|
250 |
+
* excess bits.
|
251 |
+
*
|
252 |
+
* If the key is not explicitly set, it'll be assumed to be all null bytes.
|
253 |
+
*
|
254 |
+
* Note: 160/224-bit keys must explicitly set by setKeyLength(), otherwise they will be round/pad up to 192/256 bits.
|
255 |
+
*
|
256 |
+
* @see Crypt_Base:setKey()
|
257 |
+
* @see self::setKeyLength()
|
258 |
+
* @access public
|
259 |
+
* @param string $key
|
260 |
+
*/
|
261 |
+
function setKey($key)
|
262 |
+
{
|
263 |
+
if (!$this->explicit_key_length) {
|
264 |
+
$length = strlen($key);
|
265 |
+
switch (true) {
|
266 |
+
case $length <= 16:
|
267 |
+
$this->key_size = 16;
|
268 |
+
break;
|
269 |
+
case $length <= 20:
|
270 |
+
$this->key_size = 20;
|
271 |
+
break;
|
272 |
+
case $length <= 24:
|
273 |
+
$this->key_size = 24;
|
274 |
+
break;
|
275 |
+
case $length <= 28:
|
276 |
+
$this->key_size = 28;
|
277 |
+
break;
|
278 |
+
default:
|
279 |
+
$this->key_size = 32;
|
280 |
+
}
|
281 |
+
}
|
282 |
+
parent::setKey($key);
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Sets the key length
|
287 |
+
*
|
288 |
+
* Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
|
289 |
+
* 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
|
290 |
+
*
|
291 |
+
* Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
|
292 |
+
* and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
|
293 |
+
* 192/256 bits as, for example, mcrypt will do.
|
294 |
+
*
|
295 |
+
* That said, if you want be compatible with other Rijndael and AES implementations,
|
296 |
+
* you should not setKeyLength(160) or setKeyLength(224).
|
297 |
+
*
|
298 |
+
* Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
|
299 |
+
* the mcrypt php extension, even if available.
|
300 |
+
* This results then in slower encryption.
|
301 |
+
*
|
302 |
+
* @access public
|
303 |
+
* @param int $length
|
304 |
+
*/
|
305 |
+
function setKeyLength($length)
|
306 |
+
{
|
307 |
+
switch (true) {
|
308 |
+
case $length <= 128:
|
309 |
+
$this->key_length = 16;
|
310 |
+
break;
|
311 |
+
case $length <= 160:
|
312 |
+
$this->key_length = 20;
|
313 |
+
break;
|
314 |
+
case $length <= 192:
|
315 |
+
$this->key_length = 24;
|
316 |
+
break;
|
317 |
+
case $length <= 224:
|
318 |
+
$this->key_length = 28;
|
319 |
+
break;
|
320 |
+
default:
|
321 |
+
$this->key_length = 32;
|
322 |
+
}
|
323 |
+
|
324 |
+
parent::setKeyLength($length);
|
325 |
+
}
|
326 |
+
|
327 |
+
/**
|
328 |
+
* Sets the block length
|
329 |
+
*
|
330 |
+
* Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
|
331 |
+
* 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
|
332 |
+
*
|
333 |
+
* @access public
|
334 |
+
* @param int $length
|
335 |
+
*/
|
336 |
+
function setBlockLength($length)
|
337 |
+
{
|
338 |
+
$length >>= 5;
|
339 |
+
if ($length > 8) {
|
340 |
+
$length = 8;
|
341 |
+
} elseif ($length < 4) {
|
342 |
+
$length = 4;
|
343 |
+
}
|
344 |
+
$this->Nb = $length;
|
345 |
+
$this->block_size = $length << 2;
|
346 |
+
$this->changed = true;
|
347 |
+
$this->_setEngine();
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Test for engine validity
|
352 |
+
*
|
353 |
+
* This is mainly just a wrapper to set things up for Crypt_Base::isValidEngine()
|
354 |
+
*
|
355 |
+
* @see Crypt_Base::Crypt_Base()
|
356 |
+
* @param int $engine
|
357 |
+
* @access public
|
358 |
+
* @return bool
|
359 |
+
*/
|
360 |
+
function isValidEngine($engine)
|
361 |
+
{
|
362 |
+
switch ($engine) {
|
363 |
+
case CRYPT_ENGINE_OPENSSL:
|
364 |
+
if ($this->block_size != 16) {
|
365 |
+
return false;
|
366 |
+
}
|
367 |
+
$this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
|
368 |
+
$this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode();
|
369 |
+
break;
|
370 |
+
case CRYPT_ENGINE_MCRYPT:
|
371 |
+
$this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
|
372 |
+
if ($this->key_length % 8) { // is it a 160/224-bit key?
|
373 |
+
// mcrypt is not usable for them, only for 128/192/256-bit keys
|
374 |
+
return false;
|
375 |
+
}
|
376 |
+
}
|
377 |
+
|
378 |
+
return parent::isValidEngine($engine);
|
379 |
+
}
|
380 |
+
|
381 |
+
/**
|
382 |
+
* Encrypts a block
|
383 |
+
*
|
384 |
+
* @access private
|
385 |
+
* @param string $in
|
386 |
+
* @return string
|
387 |
+
*/
|
388 |
+
function _encryptBlock($in)
|
389 |
+
{
|
390 |
+
static $tables;
|
391 |
+
if (empty($tables)) {
|
392 |
+
$tables = &$this->_getTables();
|
393 |
+
}
|
394 |
+
$t0 = $tables[0];
|
395 |
+
$t1 = $tables[1];
|
396 |
+
$t2 = $tables[2];
|
397 |
+
$t3 = $tables[3];
|
398 |
+
$sbox = $tables[4];
|
399 |
+
|
400 |
+
$state = array();
|
401 |
+
$words = unpack('N*', $in);
|
402 |
+
|
403 |
+
$c = $this->c;
|
404 |
+
$w = $this->w;
|
405 |
+
$Nb = $this->Nb;
|
406 |
+
$Nr = $this->Nr;
|
407 |
+
|
408 |
+
// addRoundKey
|
409 |
+
$wc = $Nb - 1;
|
410 |
+
foreach ($words as $word) {
|
411 |
+
$state[] = $word ^ $w[++$wc];
|
412 |
+
}
|
413 |
+
|
414 |
+
// fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
|
415 |
+
// subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
|
416 |
+
// Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
|
417 |
+
// Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
|
418 |
+
// Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
|
419 |
+
// equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
|
420 |
+
|
421 |
+
// [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
|
422 |
+
$temp = array();
|
423 |
+
for ($round = 1; $round < $Nr; ++$round) {
|
424 |
+
$i = 0; // $c[0] == 0
|
425 |
+
$j = $c[1];
|
426 |
+
$k = $c[2];
|
427 |
+
$l = $c[3];
|
428 |
+
|
429 |
+
while ($i < $Nb) {
|
430 |
+
$temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
|
431 |
+
$t1[$state[$j] >> 16 & 0x000000FF] ^
|
432 |
+
$t2[$state[$k] >> 8 & 0x000000FF] ^
|
433 |
+
$t3[$state[$l] & 0x000000FF] ^
|
434 |
+
$w[++$wc];
|
435 |
+
++$i;
|
436 |
+
$j = ($j + 1) % $Nb;
|
437 |
+
$k = ($k + 1) % $Nb;
|
438 |
+
$l = ($l + 1) % $Nb;
|
439 |
+
}
|
440 |
+
$state = $temp;
|
441 |
+
}
|
442 |
+
|
443 |
+
// subWord
|
444 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
445 |
+
$state[$i] = $sbox[$state[$i] & 0x000000FF] |
|
446 |
+
($sbox[$state[$i] >> 8 & 0x000000FF] << 8) |
|
447 |
+
($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
|
448 |
+
($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
|
449 |
+
}
|
450 |
+
|
451 |
+
// shiftRows + addRoundKey
|
452 |
+
$i = 0; // $c[0] == 0
|
453 |
+
$j = $c[1];
|
454 |
+
$k = $c[2];
|
455 |
+
$l = $c[3];
|
456 |
+
while ($i < $Nb) {
|
457 |
+
$temp[$i] = ($state[$i] & 0xFF000000) ^
|
458 |
+
($state[$j] & 0x00FF0000) ^
|
459 |
+
($state[$k] & 0x0000FF00) ^
|
460 |
+
($state[$l] & 0x000000FF) ^
|
461 |
+
$w[$i];
|
462 |
+
++$i;
|
463 |
+
$j = ($j + 1) % $Nb;
|
464 |
+
$k = ($k + 1) % $Nb;
|
465 |
+
$l = ($l + 1) % $Nb;
|
466 |
+
}
|
467 |
+
|
468 |
+
switch ($Nb) {
|
469 |
+
case 8:
|
470 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
|
471 |
+
case 7:
|
472 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
|
473 |
+
case 6:
|
474 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
|
475 |
+
case 5:
|
476 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
|
477 |
+
default:
|
478 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
|
479 |
+
}
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Decrypts a block
|
484 |
+
*
|
485 |
+
* @access private
|
486 |
+
* @param string $in
|
487 |
+
* @return string
|
488 |
+
*/
|
489 |
+
function _decryptBlock($in)
|
490 |
+
{
|
491 |
+
static $invtables;
|
492 |
+
if (empty($invtables)) {
|
493 |
+
$invtables = &$this->_getInvTables();
|
494 |
+
}
|
495 |
+
$dt0 = $invtables[0];
|
496 |
+
$dt1 = $invtables[1];
|
497 |
+
$dt2 = $invtables[2];
|
498 |
+
$dt3 = $invtables[3];
|
499 |
+
$isbox = $invtables[4];
|
500 |
+
|
501 |
+
$state = array();
|
502 |
+
$words = unpack('N*', $in);
|
503 |
+
|
504 |
+
$c = $this->c;
|
505 |
+
$dw = $this->dw;
|
506 |
+
$Nb = $this->Nb;
|
507 |
+
$Nr = $this->Nr;
|
508 |
+
|
509 |
+
// addRoundKey
|
510 |
+
$wc = $Nb - 1;
|
511 |
+
foreach ($words as $word) {
|
512 |
+
$state[] = $word ^ $dw[++$wc];
|
513 |
+
}
|
514 |
+
|
515 |
+
$temp = array();
|
516 |
+
for ($round = $Nr - 1; $round > 0; --$round) {
|
517 |
+
$i = 0; // $c[0] == 0
|
518 |
+
$j = $Nb - $c[1];
|
519 |
+
$k = $Nb - $c[2];
|
520 |
+
$l = $Nb - $c[3];
|
521 |
+
|
522 |
+
while ($i < $Nb) {
|
523 |
+
$temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
|
524 |
+
$dt1[$state[$j] >> 16 & 0x000000FF] ^
|
525 |
+
$dt2[$state[$k] >> 8 & 0x000000FF] ^
|
526 |
+
$dt3[$state[$l] & 0x000000FF] ^
|
527 |
+
$dw[++$wc];
|
528 |
+
++$i;
|
529 |
+
$j = ($j + 1) % $Nb;
|
530 |
+
$k = ($k + 1) % $Nb;
|
531 |
+
$l = ($l + 1) % $Nb;
|
532 |
+
}
|
533 |
+
$state = $temp;
|
534 |
+
}
|
535 |
+
|
536 |
+
// invShiftRows + invSubWord + addRoundKey
|
537 |
+
$i = 0; // $c[0] == 0
|
538 |
+
$j = $Nb - $c[1];
|
539 |
+
$k = $Nb - $c[2];
|
540 |
+
$l = $Nb - $c[3];
|
541 |
+
|
542 |
+
while ($i < $Nb) {
|
543 |
+
$word = ($state[$i] & 0xFF000000) |
|
544 |
+
($state[$j] & 0x00FF0000) |
|
545 |
+
($state[$k] & 0x0000FF00) |
|
546 |
+
($state[$l] & 0x000000FF);
|
547 |
+
|
548 |
+
$temp[$i] = $dw[$i] ^ ($isbox[$word & 0x000000FF] |
|
549 |
+
($isbox[$word >> 8 & 0x000000FF] << 8) |
|
550 |
+
($isbox[$word >> 16 & 0x000000FF] << 16) |
|
551 |
+
($isbox[$word >> 24 & 0x000000FF] << 24));
|
552 |
+
++$i;
|
553 |
+
$j = ($j + 1) % $Nb;
|
554 |
+
$k = ($k + 1) % $Nb;
|
555 |
+
$l = ($l + 1) % $Nb;
|
556 |
+
}
|
557 |
+
|
558 |
+
switch ($Nb) {
|
559 |
+
case 8:
|
560 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
|
561 |
+
case 7:
|
562 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
|
563 |
+
case 6:
|
564 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
|
565 |
+
case 5:
|
566 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
|
567 |
+
default:
|
568 |
+
return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
|
569 |
+
}
|
570 |
+
}
|
571 |
+
|
572 |
+
/**
|
573 |
+
* Setup the key (expansion)
|
574 |
+
*
|
575 |
+
* @see Crypt_Base::_setupKey()
|
576 |
+
* @access private
|
577 |
+
*/
|
578 |
+
function _setupKey()
|
579 |
+
{
|
580 |
+
// Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
|
581 |
+
// See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
|
582 |
+
static $rcon = array(0,
|
583 |
+
0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
|
584 |
+
0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
|
585 |
+
0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
|
586 |
+
0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
|
587 |
+
0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
|
588 |
+
0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
|
589 |
+
);
|
590 |
+
|
591 |
+
if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
|
592 |
+
// already expanded
|
593 |
+
return;
|
594 |
+
}
|
595 |
+
$this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size);
|
596 |
+
|
597 |
+
$this->Nk = $this->key_length >> 2;
|
598 |
+
// see Rijndael-ammended.pdf#page=44
|
599 |
+
$this->Nr = max($this->Nk, $this->Nb) + 6;
|
600 |
+
|
601 |
+
// shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
|
602 |
+
// "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
|
603 |
+
// shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
|
604 |
+
// "Table 2: Shift offsets for different block lengths"
|
605 |
+
switch ($this->Nb) {
|
606 |
+
case 4:
|
607 |
+
case 5:
|
608 |
+
case 6:
|
609 |
+
$this->c = array(0, 1, 2, 3);
|
610 |
+
break;
|
611 |
+
case 7:
|
612 |
+
$this->c = array(0, 1, 2, 4);
|
613 |
+
break;
|
614 |
+
case 8:
|
615 |
+
$this->c = array(0, 1, 3, 4);
|
616 |
+
}
|
617 |
+
|
618 |
+
$w = array_values(unpack('N*words', $this->key));
|
619 |
+
|
620 |
+
$length = $this->Nb * ($this->Nr + 1);
|
621 |
+
for ($i = $this->Nk; $i < $length; $i++) {
|
622 |
+
$temp = $w[$i - 1];
|
623 |
+
if ($i % $this->Nk == 0) {
|
624 |
+
// according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
|
625 |
+
// on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
|
626 |
+
// 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
|
627 |
+
// with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
|
628 |
+
$temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
|
629 |
+
$temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
|
630 |
+
} elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
|
631 |
+
$temp = $this->_subWord($temp);
|
632 |
+
}
|
633 |
+
$w[$i] = $w[$i - $this->Nk] ^ $temp;
|
634 |
+
}
|
635 |
+
|
636 |
+
// convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
|
637 |
+
// and generate the inverse key schedule. more specifically,
|
638 |
+
// according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
|
639 |
+
// "The key expansion for the Inverse Cipher is defined as follows:
|
640 |
+
// 1. Apply the Key Expansion.
|
641 |
+
// 2. Apply InvMixColumn to all Round Keys except the first and the last one."
|
642 |
+
// also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
|
643 |
+
list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables();
|
644 |
+
$temp = $this->w = $this->dw = array();
|
645 |
+
for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
|
646 |
+
if ($col == $this->Nb) {
|
647 |
+
if ($row == 0) {
|
648 |
+
$this->dw[0] = $this->w[0];
|
649 |
+
} else {
|
650 |
+
// subWord + invMixColumn + invSubWord = invMixColumn
|
651 |
+
$j = 0;
|
652 |
+
while ($j < $this->Nb) {
|
653 |
+
$dw = $this->_subWord($this->w[$row][$j]);
|
654 |
+
$temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
|
655 |
+
$dt1[$dw >> 16 & 0x000000FF] ^
|
656 |
+
$dt2[$dw >> 8 & 0x000000FF] ^
|
657 |
+
$dt3[$dw & 0x000000FF];
|
658 |
+
$j++;
|
659 |
+
}
|
660 |
+
$this->dw[$row] = $temp;
|
661 |
+
}
|
662 |
+
|
663 |
+
$col = 0;
|
664 |
+
$row++;
|
665 |
+
}
|
666 |
+
$this->w[$row][$col] = $w[$i];
|
667 |
+
}
|
668 |
+
|
669 |
+
$this->dw[$row] = $this->w[$row];
|
670 |
+
|
671 |
+
// Converting to 1-dim key arrays (both ascending)
|
672 |
+
$this->dw = array_reverse($this->dw);
|
673 |
+
$w = array_pop($this->w);
|
674 |
+
$dw = array_pop($this->dw);
|
675 |
+
foreach ($this->w as $r => $wr) {
|
676 |
+
foreach ($wr as $c => $wc) {
|
677 |
+
$w[] = $wc;
|
678 |
+
$dw[] = $this->dw[$r][$c];
|
679 |
+
}
|
680 |
+
}
|
681 |
+
$this->w = $w;
|
682 |
+
$this->dw = $dw;
|
683 |
+
}
|
684 |
+
|
685 |
+
/**
|
686 |
+
* Performs S-Box substitutions
|
687 |
+
*
|
688 |
+
* @access private
|
689 |
+
* @param int $word
|
690 |
+
*/
|
691 |
+
function _subWord($word)
|
692 |
+
{
|
693 |
+
static $sbox;
|
694 |
+
if (empty($sbox)) {
|
695 |
+
list(, , , , $sbox) = $this->_getTables();
|
696 |
+
}
|
697 |
+
|
698 |
+
return $sbox[$word & 0x000000FF] |
|
699 |
+
($sbox[$word >> 8 & 0x000000FF] << 8) |
|
700 |
+
($sbox[$word >> 16 & 0x000000FF] << 16) |
|
701 |
+
($sbox[$word >> 24 & 0x000000FF] << 24);
|
702 |
+
}
|
703 |
+
|
704 |
+
/**
|
705 |
+
* Provides the mixColumns and sboxes tables
|
706 |
+
*
|
707 |
+
* @see Crypt_Rijndael:_encryptBlock()
|
708 |
+
* @see Crypt_Rijndael:_setupInlineCrypt()
|
709 |
+
* @see Crypt_Rijndael:_subWord()
|
710 |
+
* @access private
|
711 |
+
* @return array &$tables
|
712 |
+
*/
|
713 |
+
function &_getTables()
|
714 |
+
{
|
715 |
+
static $tables;
|
716 |
+
if (empty($tables)) {
|
717 |
+
// according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
|
718 |
+
// precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
|
719 |
+
// those are the names we'll use.
|
720 |
+
$t3 = array_map('intval', array(
|
721 |
+
// with array_map('intval', ...) we ensure we have only int's and not
|
722 |
+
// some slower floats converted by php automatically on high values
|
723 |
+
0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
|
724 |
+
0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
|
725 |
+
0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
|
726 |
+
0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
|
727 |
+
0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
|
728 |
+
0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
|
729 |
+
0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
|
730 |
+
0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
|
731 |
+
0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
|
732 |
+
0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
|
733 |
+
0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
|
734 |
+
0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
|
735 |
+
0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
|
736 |
+
0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
|
737 |
+
0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
|
738 |
+
0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
|
739 |
+
0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
|
740 |
+
0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
|
741 |
+
0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
|
742 |
+
0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
|
743 |
+
0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
|
744 |
+
0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
|
745 |
+
0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
|
746 |
+
0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
|
747 |
+
0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
|
748 |
+
0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
|
749 |
+
0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
|
750 |
+
0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
|
751 |
+
0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
|
752 |
+
0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
|
753 |
+
0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
|
754 |
+
0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
|
755 |
+
));
|
756 |
+
|
757 |
+
foreach ($t3 as $t3i) {
|
758 |
+
$t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF);
|
759 |
+
$t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
|
760 |
+
$t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
|
761 |
+
}
|
762 |
+
|
763 |
+
$tables = array(
|
764 |
+
// The Precomputed mixColumns tables t0 - t3
|
765 |
+
$t0,
|
766 |
+
$t1,
|
767 |
+
$t2,
|
768 |
+
$t3,
|
769 |
+
// The SubByte S-Box
|
770 |
+
array(
|
771 |
+
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
|
772 |
+
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
|
773 |
+
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
|
774 |
+
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
|
775 |
+
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
|
776 |
+
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
|
777 |
+
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
|
778 |
+
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
|
779 |
+
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
|
780 |
+
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
|
781 |
+
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
|
782 |
+
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
|
783 |
+
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
|
784 |
+
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
|
785 |
+
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
|
786 |
+
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
|
787 |
+
)
|
788 |
+
);
|
789 |
+
}
|
790 |
+
return $tables;
|
791 |
+
}
|
792 |
+
|
793 |
+
/**
|
794 |
+
* Provides the inverse mixColumns and inverse sboxes tables
|
795 |
+
*
|
796 |
+
* @see Crypt_Rijndael:_decryptBlock()
|
797 |
+
* @see Crypt_Rijndael:_setupInlineCrypt()
|
798 |
+
* @see Crypt_Rijndael:_setupKey()
|
799 |
+
* @access private
|
800 |
+
* @return array &$tables
|
801 |
+
*/
|
802 |
+
function &_getInvTables()
|
803 |
+
{
|
804 |
+
static $tables;
|
805 |
+
if (empty($tables)) {
|
806 |
+
$dt3 = array_map('intval', array(
|
807 |
+
0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
|
808 |
+
0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
|
809 |
+
0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
|
810 |
+
0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
|
811 |
+
0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
|
812 |
+
0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
|
813 |
+
0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
|
814 |
+
0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
|
815 |
+
0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
|
816 |
+
0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
|
817 |
+
0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
|
818 |
+
0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
|
819 |
+
0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
|
820 |
+
0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
|
821 |
+
0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
|
822 |
+
0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
|
823 |
+
0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
|
824 |
+
0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
|
825 |
+
0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
|
826 |
+
0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
|
827 |
+
0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
|
828 |
+
0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
|
829 |
+
0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
|
830 |
+
0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
|
831 |
+
0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
|
832 |
+
0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
|
833 |
+
0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
|
834 |
+
0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
|
835 |
+
0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
|
836 |
+
0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
|
837 |
+
0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
|
838 |
+
0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
|
839 |
+
));
|
840 |
+
|
841 |
+
foreach ($dt3 as $dt3i) {
|
842 |
+
$dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF);
|
843 |
+
$dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
|
844 |
+
$dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
|
845 |
+
};
|
846 |
+
|
847 |
+
$tables = array(
|
848 |
+
// The Precomputed inverse mixColumns tables dt0 - dt3
|
849 |
+
$dt0,
|
850 |
+
$dt1,
|
851 |
+
$dt2,
|
852 |
+
$dt3,
|
853 |
+
// The inverse SubByte S-Box
|
854 |
+
array(
|
855 |
+
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
|
856 |
+
0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
|
857 |
+
0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
|
858 |
+
0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
|
859 |
+
0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
|
860 |
+
0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
|
861 |
+
0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
|
862 |
+
0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
|
863 |
+
0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
|
864 |
+
0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
|
865 |
+
0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
|
866 |
+
0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
|
867 |
+
0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
|
868 |
+
0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
|
869 |
+
0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
|
870 |
+
0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
|
871 |
+
)
|
872 |
+
);
|
873 |
+
}
|
874 |
+
return $tables;
|
875 |
+
}
|
876 |
+
|
877 |
+
/**
|
878 |
+
* Setup the performance-optimized function for de/encrypt()
|
879 |
+
*
|
880 |
+
* @see Crypt_Base::_setupInlineCrypt()
|
881 |
+
* @access private
|
882 |
+
*/
|
883 |
+
function _setupInlineCrypt()
|
884 |
+
{
|
885 |
+
// Note: _setupInlineCrypt() will be called only if $this->changed === true
|
886 |
+
// So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt().
|
887 |
+
// However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible.
|
888 |
+
|
889 |
+
$lambda_functions =& Crypt_Rijndael::_getLambdaFunctions();
|
890 |
+
|
891 |
+
// We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
|
892 |
+
// (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit)
|
893 |
+
// After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
|
894 |
+
$gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
|
895 |
+
|
896 |
+
// Generation of a uniqe hash for our generated code
|
897 |
+
$code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
|
898 |
+
if ($gen_hi_opt_code) {
|
899 |
+
$code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
|
900 |
+
}
|
901 |
+
|
902 |
+
if (!isset($lambda_functions[$code_hash])) {
|
903 |
+
switch (true) {
|
904 |
+
case $gen_hi_opt_code:
|
905 |
+
// The hi-optimized $lambda_functions will use the key-words hardcoded for better performance.
|
906 |
+
$w = $this->w;
|
907 |
+
$dw = $this->dw;
|
908 |
+
$init_encrypt = '';
|
909 |
+
$init_decrypt = '';
|
910 |
+
break;
|
911 |
+
default:
|
912 |
+
for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) {
|
913 |
+
$w[] = '$w[' . $i . ']';
|
914 |
+
$dw[] = '$dw[' . $i . ']';
|
915 |
+
}
|
916 |
+
$init_encrypt = '$w = $self->w;';
|
917 |
+
$init_decrypt = '$dw = $self->dw;';
|
918 |
+
}
|
919 |
+
|
920 |
+
$Nr = $this->Nr;
|
921 |
+
$Nb = $this->Nb;
|
922 |
+
$c = $this->c;
|
923 |
+
|
924 |
+
// Generating encrypt code:
|
925 |
+
$init_encrypt.= '
|
926 |
+
static $tables;
|
927 |
+
if (empty($tables)) {
|
928 |
+
$tables = &$self->_getTables();
|
929 |
+
}
|
930 |
+
$t0 = $tables[0];
|
931 |
+
$t1 = $tables[1];
|
932 |
+
$t2 = $tables[2];
|
933 |
+
$t3 = $tables[3];
|
934 |
+
$sbox = $tables[4];
|
935 |
+
';
|
936 |
+
|
937 |
+
$s = 'e';
|
938 |
+
$e = 's';
|
939 |
+
$wc = $Nb - 1;
|
940 |
+
|
941 |
+
// Preround: addRoundKey
|
942 |
+
$encrypt_block = '$in = unpack("N*", $in);'."\n";
|
943 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
944 |
+
$encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n";
|
945 |
+
}
|
946 |
+
|
947 |
+
// Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
|
948 |
+
for ($round = 1; $round < $Nr; ++$round) {
|
949 |
+
list($s, $e) = array($e, $s);
|
950 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
951 |
+
$encrypt_block.=
|
952 |
+
'$'.$e.$i.' =
|
953 |
+
$t0[($'.$s.$i .' >> 24) & 0xff] ^
|
954 |
+
$t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^
|
955 |
+
$t2[($'.$s.(($i + $c[2]) % $Nb).' >> 8) & 0xff] ^
|
956 |
+
$t3[ $'.$s.(($i + $c[3]) % $Nb).' & 0xff] ^
|
957 |
+
'.$w[++$wc].";\n";
|
958 |
+
}
|
959 |
+
}
|
960 |
+
|
961 |
+
// Finalround: subWord + shiftRows + addRoundKey
|
962 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
963 |
+
$encrypt_block.=
|
964 |
+
'$'.$e.$i.' =
|
965 |
+
$sbox[ $'.$e.$i.' & 0xff] |
|
966 |
+
($sbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
|
967 |
+
($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
|
968 |
+
($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
|
969 |
+
}
|
970 |
+
$encrypt_block .= '$in = pack("N*"'."\n";
|
971 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
972 |
+
$encrypt_block.= ',
|
973 |
+
($'.$e.$i .' & '.((int)0xFF000000).') ^
|
974 |
+
($'.$e.(($i + $c[1]) % $Nb).' & 0x00FF0000 ) ^
|
975 |
+
($'.$e.(($i + $c[2]) % $Nb).' & 0x0000FF00 ) ^
|
976 |
+
($'.$e.(($i + $c[3]) % $Nb).' & 0x000000FF ) ^
|
977 |
+
'.$w[$i]."\n";
|
978 |
+
}
|
979 |
+
$encrypt_block .= ');';
|
980 |
+
|
981 |
+
// Generating decrypt code:
|
982 |
+
$init_decrypt.= '
|
983 |
+
static $invtables;
|
984 |
+
if (empty($invtables)) {
|
985 |
+
$invtables = &$self->_getInvTables();
|
986 |
+
}
|
987 |
+
$dt0 = $invtables[0];
|
988 |
+
$dt1 = $invtables[1];
|
989 |
+
$dt2 = $invtables[2];
|
990 |
+
$dt3 = $invtables[3];
|
991 |
+
$isbox = $invtables[4];
|
992 |
+
';
|
993 |
+
|
994 |
+
$s = 'e';
|
995 |
+
$e = 's';
|
996 |
+
$wc = $Nb - 1;
|
997 |
+
|
998 |
+
// Preround: addRoundKey
|
999 |
+
$decrypt_block = '$in = unpack("N*", $in);'."\n";
|
1000 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
1001 |
+
$decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n";
|
1002 |
+
}
|
1003 |
+
|
1004 |
+
// Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
|
1005 |
+
for ($round = 1; $round < $Nr; ++$round) {
|
1006 |
+
list($s, $e) = array($e, $s);
|
1007 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
1008 |
+
$decrypt_block.=
|
1009 |
+
'$'.$e.$i.' =
|
1010 |
+
$dt0[($'.$s.$i .' >> 24) & 0xff] ^
|
1011 |
+
$dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^
|
1012 |
+
$dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >> 8) & 0xff] ^
|
1013 |
+
$dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).' & 0xff] ^
|
1014 |
+
'.$dw[++$wc].";\n";
|
1015 |
+
}
|
1016 |
+
}
|
1017 |
+
|
1018 |
+
// Finalround: subWord + shiftRows + addRoundKey
|
1019 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
1020 |
+
$decrypt_block.=
|
1021 |
+
'$'.$e.$i.' =
|
1022 |
+
$isbox[ $'.$e.$i.' & 0xff] |
|
1023 |
+
($isbox[($'.$e.$i.' >> 8) & 0xff] << 8) |
|
1024 |
+
($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
|
1025 |
+
($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
|
1026 |
+
}
|
1027 |
+
$decrypt_block .= '$in = pack("N*"'."\n";
|
1028 |
+
for ($i = 0; $i < $Nb; ++$i) {
|
1029 |
+
$decrypt_block.= ',
|
1030 |
+
($'.$e.$i. ' & '.((int)0xFF000000).') ^
|
1031 |
+
($'.$e.(($Nb + $i - $c[1]) % $Nb).' & 0x00FF0000 ) ^
|
1032 |
+
($'.$e.(($Nb + $i - $c[2]) % $Nb).' & 0x0000FF00 ) ^
|
1033 |
+
($'.$e.(($Nb + $i - $c[3]) % $Nb).' & 0x000000FF ) ^
|
1034 |
+
'.$dw[$i]."\n";
|
1035 |
+
}
|
1036 |
+
$decrypt_block .= ');';
|
1037 |
+
|
1038 |
+
$lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
|
1039 |
+
array(
|
1040 |
+
'init_crypt' => '',
|
1041 |
+
'init_encrypt' => $init_encrypt,
|
1042 |
+
'init_decrypt' => $init_decrypt,
|
1043 |
+
'encrypt_block' => $encrypt_block,
|
1044 |
+
'decrypt_block' => $decrypt_block
|
1045 |
+
)
|
1046 |
+
);
|
1047 |
+
}
|
1048 |
+
$this->inline_crypt = $lambda_functions[$code_hash];
|
1049 |
+
}
|
1050 |
+
}
|
installer/dup-installer/classes/Crypt/index.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
//silent
|
1 |
+
<?php
|
2 |
//silent
|
installer/dup-installer/classes/class.csrf.php
CHANGED
@@ -1,178 +1,178 @@
|
|
1 |
-
<?php
|
2 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
-
|
4 |
-
class DUPX_CSRF {
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Session var name prefix
|
8 |
-
* @var string
|
9 |
-
*/
|
10 |
-
public static $prefix = '_DUPX_CSRF';
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Stores all CSRF values: Key as CSRF name and Val as CRF value
|
14 |
-
* @var array
|
15 |
-
*/
|
16 |
-
private static $CSRFVars;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Set new CSRF
|
20 |
-
*
|
21 |
-
* @param $key string CSRF Key
|
22 |
-
* @param $key string CSRF Val
|
23 |
-
*
|
24 |
-
* @return Void
|
25 |
-
*/
|
26 |
-
public static function setKeyVal($key, $val) {
|
27 |
-
$CSRFVars = self::getCSRFVars();
|
28 |
-
$CSRFVars[$key] = $val;
|
29 |
-
self::saveCSRFVars($CSRFVars);
|
30 |
-
self::$CSRFVars = false;
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Get CSRF value by passing CSRF key
|
35 |
-
*
|
36 |
-
* @param $key string CSRF key
|
37 |
-
*
|
38 |
-
* @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
|
39 |
-
*/
|
40 |
-
public static function getVal($key) {
|
41 |
-
$CSRFVars = self::getCSRFVars();
|
42 |
-
if (isset($CSRFVars[$key])) {
|
43 |
-
return $CSRFVars[$key];
|
44 |
-
} else {
|
45 |
-
return false;
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
/** Generate DUPX_CSRF value for form
|
50 |
-
*
|
51 |
-
* @param string $form - Form name as session key
|
52 |
-
* @return string - token
|
53 |
-
*/
|
54 |
-
public static function generate($form = NULL) {
|
55 |
-
$keyName = self::getKeyName($form);
|
56 |
-
|
57 |
-
$existingToken = self::getVal($keyName);
|
58 |
-
if (false !== $existingToken) {
|
59 |
-
$token = $existingToken;
|
60 |
-
} else {
|
61 |
-
$token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
|
62 |
-
}
|
63 |
-
|
64 |
-
self::setKeyVal($keyName, $token);
|
65 |
-
return $token;
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Check DUPX_CSRF value of form
|
70 |
-
*
|
71 |
-
* @param string $token - Token
|
72 |
-
* @param string $form - Form name as session key
|
73 |
-
* @return boolean
|
74 |
-
*/
|
75 |
-
public static function check($token, $form = NULL) {
|
76 |
-
$keyName = self::getKeyName($form);
|
77 |
-
$CSRFVars = self::getCSRFVars();
|
78 |
-
if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) { // token OK
|
79 |
-
return true;
|
80 |
-
}
|
81 |
-
return FALSE;
|
82 |
-
}
|
83 |
-
|
84 |
-
/** Generate token
|
85 |
-
* @param void
|
86 |
-
* @return string
|
87 |
-
*/
|
88 |
-
protected static function token() {
|
89 |
-
mt_srand((double) microtime() * 10000);
|
90 |
-
$charid = strtoupper(md5(uniqid(rand(), TRUE)));
|
91 |
-
return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
|
92 |
-
}
|
93 |
-
|
94 |
-
/** Returns "digital fingerprint" of user
|
95 |
-
* @param void
|
96 |
-
* @return string - MD5 hashed data
|
97 |
-
*/
|
98 |
-
protected static function fingerprint() {
|
99 |
-
return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Generate CSRF Key name
|
104 |
-
*
|
105 |
-
* @param string the form name for which CSRF key need to generate
|
106 |
-
* @return string CSRF key
|
107 |
-
*/
|
108 |
-
private static function getKeyName($form) {
|
109 |
-
return DUPX_CSRF::$prefix . '_' . $form;
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Get Package hash
|
114 |
-
*
|
115 |
-
* @return string Package hash
|
116 |
-
*/
|
117 |
-
private static function getPackageHash() {
|
118 |
-
if (class_exists('DUPX_Bootstrap')) {
|
119 |
-
return DUPX_Bootstrap::PACKAGE_HASH;
|
120 |
-
} else {
|
121 |
-
return $GLOBALS['PACKAGE_HASH'];
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Get file path where CSRF tokens are stored in JSON encoded format
|
127 |
-
*
|
128 |
-
* @return string file path where CSRF token stored
|
129 |
-
*/
|
130 |
-
private static function getFilePath() {
|
131 |
-
if (class_exists('DUPX_Bootstrap')) {
|
132 |
-
$dupInstallerfolderPath = dirname(__FILE__).'/dup-installer/';
|
133 |
-
} else {
|
134 |
-
$dupInstallerfolderPath = $GLOBALS['DUPX_INIT'].'/';
|
135 |
-
}
|
136 |
-
$packageHash = self::getPackageHash();
|
137 |
-
$fileName = 'dup-installer-csrf__'.$packageHash.'.txt';
|
138 |
-
$filePath = $dupInstallerfolderPath.$fileName;
|
139 |
-
return $filePath;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Get all CSRF vars in array format
|
144 |
-
*
|
145 |
-
* @return array Key as CSRF name and value as CSRF value
|
146 |
-
*/
|
147 |
-
private static function getCSRFVars() {
|
148 |
-
if (!isset(self::$CSRFVars) || false === self::$CSRFVars) {
|
149 |
-
$filePath = self::getFilePath();
|
150 |
-
if (file_exists($filePath)) {
|
151 |
-
$contents = file_get_contents($filePath);
|
152 |
-
if (empty($contents)) {
|
153 |
-
self::$CSRFVars = array();
|
154 |
-
} else {
|
155 |
-
$CSRFobjs = json_decode($contents);
|
156 |
-
foreach ($CSRFobjs as $key => $value) {
|
157 |
-
self::$CSRFVars[$key] = $value;
|
158 |
-
}
|
159 |
-
}
|
160 |
-
} else {
|
161 |
-
self::$CSRFVars = array();
|
162 |
-
}
|
163 |
-
}
|
164 |
-
return self::$CSRFVars;
|
165 |
-
}
|
166 |
-
|
167 |
-
/**
|
168 |
-
* Stores all CSRF vars
|
169 |
-
*
|
170 |
-
* @param $CSRFVars array holds all CSRF key val
|
171 |
-
* @return void
|
172 |
-
*/
|
173 |
-
private static function saveCSRFVars($CSRFVars) {
|
174 |
-
$contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
|
175 |
-
$filePath = self::getFilePath();
|
176 |
-
file_put_contents($filePath, $contents);
|
177 |
-
}
|
178 |
}
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
+
|
4 |
+
class DUPX_CSRF {
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Session var name prefix
|
8 |
+
* @var string
|
9 |
+
*/
|
10 |
+
public static $prefix = '_DUPX_CSRF';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Stores all CSRF values: Key as CSRF name and Val as CRF value
|
14 |
+
* @var array
|
15 |
+
*/
|
16 |
+
private static $CSRFVars;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Set new CSRF
|
20 |
+
*
|
21 |
+
* @param $key string CSRF Key
|
22 |
+
* @param $key string CSRF Val
|
23 |
+
*
|
24 |
+
* @return Void
|
25 |
+
*/
|
26 |
+
public static function setKeyVal($key, $val) {
|
27 |
+
$CSRFVars = self::getCSRFVars();
|
28 |
+
$CSRFVars[$key] = $val;
|
29 |
+
self::saveCSRFVars($CSRFVars);
|
30 |
+
self::$CSRFVars = false;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Get CSRF value by passing CSRF key
|
35 |
+
*
|
36 |
+
* @param $key string CSRF key
|
37 |
+
*
|
38 |
+
* @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
|
39 |
+
*/
|
40 |
+
public static function getVal($key) {
|
41 |
+
$CSRFVars = self::getCSRFVars();
|
42 |
+
if (isset($CSRFVars[$key])) {
|
43 |
+
return $CSRFVars[$key];
|
44 |
+
} else {
|
45 |
+
return false;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
/** Generate DUPX_CSRF value for form
|
50 |
+
*
|
51 |
+
* @param string $form - Form name as session key
|
52 |
+
* @return string - token
|
53 |
+
*/
|
54 |
+
public static function generate($form = NULL) {
|
55 |
+
$keyName = self::getKeyName($form);
|
56 |
+
|
57 |
+
$existingToken = self::getVal($keyName);
|
58 |
+
if (false !== $existingToken) {
|
59 |
+
$token = $existingToken;
|
60 |
+
} else {
|
61 |
+
$token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
|
62 |
+
}
|
63 |
+
|
64 |
+
self::setKeyVal($keyName, $token);
|
65 |
+
return $token;
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Check DUPX_CSRF value of form
|
70 |
+
*
|
71 |
+
* @param string $token - Token
|
72 |
+
* @param string $form - Form name as session key
|
73 |
+
* @return boolean
|
74 |
+
*/
|
75 |
+
public static function check($token, $form = NULL) {
|
76 |
+
$keyName = self::getKeyName($form);
|
77 |
+
$CSRFVars = self::getCSRFVars();
|
78 |
+
if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) { // token OK
|
79 |
+
return true;
|
80 |
+
}
|
81 |
+
return FALSE;
|
82 |
+
}
|
83 |
+
|
84 |
+
/** Generate token
|
85 |
+
* @param void
|
86 |
+
* @return string
|
87 |
+
*/
|
88 |
+
protected static function token() {
|
89 |
+
mt_srand((double) microtime() * 10000);
|
90 |
+
$charid = strtoupper(md5(uniqid(rand(), TRUE)));
|
91 |
+
return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
|
92 |
+
}
|
93 |
+
|
94 |
+
/** Returns "digital fingerprint" of user
|
95 |
+
* @param void
|
96 |
+
* @return string - MD5 hashed data
|
97 |
+
*/
|
98 |
+
protected static function fingerprint() {
|
99 |
+
return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Generate CSRF Key name
|
104 |
+
*
|
105 |
+
* @param string the form name for which CSRF key need to generate
|
106 |
+
* @return string CSRF key
|
107 |
+
*/
|
108 |
+
private static function getKeyName($form) {
|
109 |
+
return DUPX_CSRF::$prefix . '_' . $form;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Get Package hash
|
114 |
+
*
|
115 |
+
* @return string Package hash
|
116 |
+
*/
|
117 |
+
private static function getPackageHash() {
|
118 |
+
if (class_exists('DUPX_Bootstrap')) {
|
119 |
+
return DUPX_Bootstrap::PACKAGE_HASH;
|
120 |
+
} else {
|
121 |
+
return $GLOBALS['PACKAGE_HASH'];
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Get file path where CSRF tokens are stored in JSON encoded format
|
127 |
+
*
|
128 |
+
* @return string file path where CSRF token stored
|
129 |
+
*/
|
130 |
+
private static function getFilePath() {
|
131 |
+
if (class_exists('DUPX_Bootstrap')) {
|
132 |
+
$dupInstallerfolderPath = dirname(__FILE__).'/dup-installer/';
|
133 |
+
} else {
|
134 |
+
$dupInstallerfolderPath = $GLOBALS['DUPX_INIT'].'/';
|
135 |
+
}
|
136 |
+
$packageHash = self::getPackageHash();
|
137 |
+
$fileName = 'dup-installer-csrf__'.$packageHash.'.txt';
|
138 |
+
$filePath = $dupInstallerfolderPath.$fileName;
|
139 |
+
return $filePath;
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Get all CSRF vars in array format
|
144 |
+
*
|
145 |
+
* @return array Key as CSRF name and value as CSRF value
|
146 |
+
*/
|
147 |
+
private static function getCSRFVars() {
|
148 |
+
if (!isset(self::$CSRFVars) || false === self::$CSRFVars) {
|
149 |
+
$filePath = self::getFilePath();
|
150 |
+
if (file_exists($filePath)) {
|
151 |
+
$contents = file_get_contents($filePath);
|
152 |
+
if (empty($contents)) {
|
153 |
+
self::$CSRFVars = array();
|
154 |
+
} else {
|
155 |
+
$CSRFobjs = json_decode($contents);
|
156 |
+
foreach ($CSRFobjs as $key => $value) {
|
157 |
+
self::$CSRFVars[$key] = $value;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
} else {
|
161 |
+
self::$CSRFVars = array();
|
162 |
+
}
|
163 |
+
}
|
164 |
+
return self::$CSRFVars;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Stores all CSRF vars
|
169 |
+
*
|
170 |
+
* @param $CSRFVars array holds all CSRF key val
|
171 |
+
* @return void
|
172 |
+
*/
|
173 |
+
private static function saveCSRFVars($CSRFVars) {
|
174 |
+
$contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
|
175 |
+
$filePath = self::getFilePath();
|
176 |
+
file_put_contents($filePath, $contents);
|
177 |
+
}
|
178 |
}
|
installer/dup-installer/classes/class.package.php
CHANGED
@@ -1,100 +1,100 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class used to update and edit web server configuration files
|
4 |
-
* for .htaccess, web.config and user.ini
|
5 |
-
*
|
6 |
-
* Standard: PSR-2
|
7 |
-
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
8 |
-
*
|
9 |
-
*/
|
10 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Package related functions
|
14 |
-
*
|
15 |
-
*/
|
16 |
-
final class DUPX_Package
|
17 |
-
{
|
18 |
-
|
19 |
-
/**
|
20 |
-
*
|
21 |
-
* @staticvar string $path
|
22 |
-
* @return string
|
23 |
-
*/
|
24 |
-
public static function getWpconfigArkPath()
|
25 |
-
{
|
26 |
-
static $path = null;
|
27 |
-
if (is_null($path)) {
|
28 |
-
$path = $GLOBALS['DUPX_AC']->installSiteOverwriteOn ? $GLOBALS['DUPX_ROOT'].'/dup-wp-config-arc__'.$GLOBALS['DUPX_AC']->package_hash.'.txt' : $GLOBALS['DUPX_ROOT'].'/wp-config.php';
|
29 |
-
}
|
30 |
-
return $path;
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
*
|
35 |
-
* @staticvar bool|string $packageHash
|
36 |
-
* @return bool|string false if fail
|
37 |
-
*/
|
38 |
-
public static function getPackageHash()
|
39 |
-
{
|
40 |
-
return $GLOBALS['DUPX_AC']->package_hash;
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
*
|
45 |
-
* @staticvar string $fileHash
|
46 |
-
* @return string
|
47 |
-
*/
|
48 |
-
public static function getArchiveFileHash()
|
49 |
-
{
|
50 |
-
static $fileHash = null;
|
51 |
-
|
52 |
-
if (is_null($fileHash)) {
|
53 |
-
$fileHash = preg_replace('/^.+_([a-z0-9]+)_[0-9]{14}_archive\.(?:daf|zip)$/', '$1', $GLOBALS['FW_PACKAGE_PATH']);
|
54 |
-
}
|
55 |
-
|
56 |
-
return $fileHash;
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
*
|
61 |
-
* @staticvar string $path
|
62 |
-
* @return string
|
63 |
-
*/
|
64 |
-
public static function getHtaccessArkPath()
|
65 |
-
{
|
66 |
-
static $path = null;
|
67 |
-
if (is_null($path)) {
|
68 |
-
$path = $GLOBALS['DUPX_ROOT'].'/.htaccess__'.$GLOBALS['DUPX_AC']->package_hash;
|
69 |
-
}
|
70 |
-
return $path;
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
*
|
75 |
-
* @staticvar string $path
|
76 |
-
* @return string
|
77 |
-
*/
|
78 |
-
public static function getOrigWpConfigPath()
|
79 |
-
{
|
80 |
-
static $path = null;
|
81 |
-
if (is_null($path)) {
|
82 |
-
$path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
83 |
-
}
|
84 |
-
return $path;
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
*
|
89 |
-
* @staticvar string $path
|
90 |
-
* @return string
|
91 |
-
*/
|
92 |
-
public static function getOrigHtaccessPath()
|
93 |
-
{
|
94 |
-
static $path = null;
|
95 |
-
if (is_null($path)) {
|
96 |
-
$path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
97 |
-
}
|
98 |
-
return $GLOBALS['DUPX_INIT'].'/dup-orig-htaccess__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
99 |
-
}
|
100 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class used to update and edit web server configuration files
|
4 |
+
* for .htaccess, web.config and user.ini
|
5 |
+
*
|
6 |
+
* Standard: PSR-2
|
7 |
+
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Package related functions
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
final class DUPX_Package
|
17 |
+
{
|
18 |
+
|
19 |
+
/**
|
20 |
+
*
|
21 |
+
* @staticvar string $path
|
22 |
+
* @return string
|
23 |
+
*/
|
24 |
+
public static function getWpconfigArkPath()
|
25 |
+
{
|
26 |
+
static $path = null;
|
27 |
+
if (is_null($path)) {
|
28 |
+
$path = $GLOBALS['DUPX_AC']->installSiteOverwriteOn ? $GLOBALS['DUPX_ROOT'].'/dup-wp-config-arc__'.$GLOBALS['DUPX_AC']->package_hash.'.txt' : $GLOBALS['DUPX_ROOT'].'/wp-config.php';
|
29 |
+
}
|
30 |
+
return $path;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
*
|
35 |
+
* @staticvar bool|string $packageHash
|
36 |
+
* @return bool|string false if fail
|
37 |
+
*/
|
38 |
+
public static function getPackageHash()
|
39 |
+
{
|
40 |
+
return $GLOBALS['DUPX_AC']->package_hash;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
*
|
45 |
+
* @staticvar string $fileHash
|
46 |
+
* @return string
|
47 |
+
*/
|
48 |
+
public static function getArchiveFileHash()
|
49 |
+
{
|
50 |
+
static $fileHash = null;
|
51 |
+
|
52 |
+
if (is_null($fileHash)) {
|
53 |
+
$fileHash = preg_replace('/^.+_([a-z0-9]+)_[0-9]{14}_archive\.(?:daf|zip)$/', '$1', $GLOBALS['FW_PACKAGE_PATH']);
|
54 |
+
}
|
55 |
+
|
56 |
+
return $fileHash;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
*
|
61 |
+
* @staticvar string $path
|
62 |
+
* @return string
|
63 |
+
*/
|
64 |
+
public static function getHtaccessArkPath()
|
65 |
+
{
|
66 |
+
static $path = null;
|
67 |
+
if (is_null($path)) {
|
68 |
+
$path = $GLOBALS['DUPX_ROOT'].'/.htaccess__'.$GLOBALS['DUPX_AC']->package_hash;
|
69 |
+
}
|
70 |
+
return $path;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
*
|
75 |
+
* @staticvar string $path
|
76 |
+
* @return string
|
77 |
+
*/
|
78 |
+
public static function getOrigWpConfigPath()
|
79 |
+
{
|
80 |
+
static $path = null;
|
81 |
+
if (is_null($path)) {
|
82 |
+
$path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
83 |
+
}
|
84 |
+
return $path;
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
*
|
89 |
+
* @staticvar string $path
|
90 |
+
* @return string
|
91 |
+
*/
|
92 |
+
public static function getOrigHtaccessPath()
|
93 |
+
{
|
94 |
+
static $path = null;
|
95 |
+
if (is_null($path)) {
|
96 |
+
$path = $GLOBALS['DUPX_INIT'].'/dup-orig-wp-config__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
97 |
+
}
|
98 |
+
return $GLOBALS['DUPX_INIT'].'/dup-orig-htaccess__'.$GLOBALS['DUPX_AC']->package_hash.'.txt';
|
99 |
+
}
|
100 |
}
|
installer/dup-installer/classes/config/class.boot.php
CHANGED
@@ -1,104 +1,104 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Boot class
|
4 |
-
*
|
5 |
-
* Standard: PSR-2
|
6 |
-
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
-
*
|
8 |
-
* @package SC\DUPX\Constants
|
9 |
-
*
|
10 |
-
*/
|
11 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
-
|
13 |
-
class DUPX_Boot
|
14 |
-
{
|
15 |
-
|
16 |
-
/**
|
17 |
-
* inizialize all
|
18 |
-
*/
|
19 |
-
public static function init()
|
20 |
-
{
|
21 |
-
self::phpIni();
|
22 |
-
self::includes();
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* init ini_set and default constants
|
27 |
-
*
|
28 |
-
* @throws Exception
|
29 |
-
*/
|
30 |
-
public static function phpIni()
|
31 |
-
{
|
32 |
-
if (!isset($GLOBALS['DUPX_INIT'])) {
|
33 |
-
throw new Exception('GLOBALS DUPX_INIT not defined.');
|
34 |
-
}
|
35 |
-
|
36 |
-
/** Absolute path to the Installer directory. - necessary for php protection */
|
37 |
-
if (!defined('KB_IN_BYTES')) {
|
38 |
-
define('KB_IN_BYTES', 1024);
|
39 |
-
}
|
40 |
-
if (!defined('MB_IN_BYTES')) {
|
41 |
-
define('MB_IN_BYTES', 1024 * KB_IN_BYTES);
|
42 |
-
}
|
43 |
-
if (!defined('GB_IN_BYTES')) {
|
44 |
-
define('GB_IN_BYTES', 1024 * MB_IN_BYTES);
|
45 |
-
}
|
46 |
-
if (!defined('DUPLICATOR_PHP_MAX_MEMORY')) {
|
47 |
-
define('DUPLICATOR_PHP_MAX_MEMORY', 4096 * MB_IN_BYTES);
|
48 |
-
}
|
49 |
-
|
50 |
-
date_default_timezone_set('UTC'); // Some machines don’t have this set so just do it here.
|
51 |
-
@ignore_user_abort(true);
|
52 |
-
|
53 |
-
require_once($GLOBALS['DUPX_INIT'].'/lib/snaplib/snaplib.all.php');
|
54 |
-
|
55 |
-
@set_time_limit(3600);
|
56 |
-
|
57 |
-
$ini_get_default_charset = ini_get("default_charset");
|
58 |
-
if (empty($ini_get_default_charset) && DupLiteSnapLibUtil::wp_is_ini_value_changeable('default_charset')) {
|
59 |
-
@ini_set("default_charset", 'utf-8');
|
60 |
-
}
|
61 |
-
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('memory_limit')) {
|
62 |
-
@ini_set('memory_limit', DUPLICATOR_PHP_MAX_MEMORY);
|
63 |
-
}
|
64 |
-
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('max_input_time')) {
|
65 |
-
@ini_set('max_input_time', '-1');
|
66 |
-
}
|
67 |
-
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('pcre.backtrack_limit')) {
|
68 |
-
@ini_set('pcre.backtrack_limit', PHP_INT_MAX);
|
69 |
-
}
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* include default utils files and constants
|
74 |
-
*
|
75 |
-
* @throws Exception
|
76 |
-
*/
|
77 |
-
public static function includes()
|
78 |
-
{
|
79 |
-
if (!isset($GLOBALS['DUPX_INIT'])) {
|
80 |
-
throw new Exception('GLOBALS DUPX_INIT not defined.');
|
81 |
-
}
|
82 |
-
|
83 |
-
$GLOBALS['DUPX_ENFORCE_PHP_INI'] = false;
|
84 |
-
$GLOBALS['DUPX_DEBUG'] = (isset($_GET['debug']) && $_GET['debug'] == 1) ? true : false;
|
85 |
-
|
86 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.exceptions.php');
|
87 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.php');
|
88 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.notices.manager.php');
|
89 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.html.php');
|
90 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.constants.php');
|
91 |
-
require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
|
92 |
-
|
93 |
-
DUPX_U::init();
|
94 |
-
DUPX_Constants::init();
|
95 |
-
}
|
96 |
-
|
97 |
-
public static function initArchiveAndLog()
|
98 |
-
{
|
99 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
|
100 |
-
$GLOBALS['DUPX_AC'] = DUPX_ArchiveConfig::getInstance();
|
101 |
-
require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
|
102 |
-
DUPX_Log::setPostProcessCallabck(array('DUPX_CTRL', 'renderPostProcessings'));
|
103 |
-
}
|
104 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Boot class
|
4 |
+
*
|
5 |
+
* Standard: PSR-2
|
6 |
+
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
+
*
|
8 |
+
* @package SC\DUPX\Constants
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
+
|
13 |
+
class DUPX_Boot
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* inizialize all
|
18 |
+
*/
|
19 |
+
public static function init()
|
20 |
+
{
|
21 |
+
self::phpIni();
|
22 |
+
self::includes();
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* init ini_set and default constants
|
27 |
+
*
|
28 |
+
* @throws Exception
|
29 |
+
*/
|
30 |
+
public static function phpIni()
|
31 |
+
{
|
32 |
+
if (!isset($GLOBALS['DUPX_INIT'])) {
|
33 |
+
throw new Exception('GLOBALS DUPX_INIT not defined.');
|
34 |
+
}
|
35 |
+
|
36 |
+
/** Absolute path to the Installer directory. - necessary for php protection */
|
37 |
+
if (!defined('KB_IN_BYTES')) {
|
38 |
+
define('KB_IN_BYTES', 1024);
|
39 |
+
}
|
40 |
+
if (!defined('MB_IN_BYTES')) {
|
41 |
+
define('MB_IN_BYTES', 1024 * KB_IN_BYTES);
|
42 |
+
}
|
43 |
+
if (!defined('GB_IN_BYTES')) {
|
44 |
+
define('GB_IN_BYTES', 1024 * MB_IN_BYTES);
|
45 |
+
}
|
46 |
+
if (!defined('DUPLICATOR_PHP_MAX_MEMORY')) {
|
47 |
+
define('DUPLICATOR_PHP_MAX_MEMORY', 4096 * MB_IN_BYTES);
|
48 |
+
}
|
49 |
+
|
50 |
+
date_default_timezone_set('UTC'); // Some machines don’t have this set so just do it here.
|
51 |
+
@ignore_user_abort(true);
|
52 |
+
|
53 |
+
require_once($GLOBALS['DUPX_INIT'].'/lib/snaplib/snaplib.all.php');
|
54 |
+
|
55 |
+
@set_time_limit(3600);
|
56 |
+
|
57 |
+
$ini_get_default_charset = ini_get("default_charset");
|
58 |
+
if (empty($ini_get_default_charset) && DupLiteSnapLibUtil::wp_is_ini_value_changeable('default_charset')) {
|
59 |
+
@ini_set("default_charset", 'utf-8');
|
60 |
+
}
|
61 |
+
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('memory_limit')) {
|
62 |
+
@ini_set('memory_limit', DUPLICATOR_PHP_MAX_MEMORY);
|
63 |
+
}
|
64 |
+
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('max_input_time')) {
|
65 |
+
@ini_set('max_input_time', '-1');
|
66 |
+
}
|
67 |
+
if (DupLiteSnapLibUtil::wp_is_ini_value_changeable('pcre.backtrack_limit')) {
|
68 |
+
@ini_set('pcre.backtrack_limit', PHP_INT_MAX);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* include default utils files and constants
|
74 |
+
*
|
75 |
+
* @throws Exception
|
76 |
+
*/
|
77 |
+
public static function includes()
|
78 |
+
{
|
79 |
+
if (!isset($GLOBALS['DUPX_INIT'])) {
|
80 |
+
throw new Exception('GLOBALS DUPX_INIT not defined.');
|
81 |
+
}
|
82 |
+
|
83 |
+
$GLOBALS['DUPX_ENFORCE_PHP_INI'] = false;
|
84 |
+
$GLOBALS['DUPX_DEBUG'] = (isset($_GET['debug']) && $_GET['debug'] == 1) ? true : false;
|
85 |
+
|
86 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.exceptions.php');
|
87 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.php');
|
88 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.notices.manager.php');
|
89 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/utilities/class.u.html.php');
|
90 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.constants.php');
|
91 |
+
require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
|
92 |
+
|
93 |
+
DUPX_U::init();
|
94 |
+
DUPX_Constants::init();
|
95 |
+
}
|
96 |
+
|
97 |
+
public static function initArchiveAndLog()
|
98 |
+
{
|
99 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
|
100 |
+
$GLOBALS['DUPX_AC'] = DUPX_ArchiveConfig::getInstance();
|
101 |
+
require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
|
102 |
+
DUPX_Log::setPostProcessCallabck(array('DUPX_CTRL', 'renderPostProcessings'));
|
103 |
+
}
|
104 |
}
|
installer/dup-installer/classes/utilities/class.u.exceptions.php
CHANGED
@@ -1,87 +1,87 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Custom exceptions
|
4 |
-
*
|
5 |
-
* Standard: PSR-2
|
6 |
-
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
-
*
|
8 |
-
* @package SC\DUPX\U
|
9 |
-
*
|
10 |
-
*/
|
11 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Dup installer custom exception
|
15 |
-
*/
|
16 |
-
class DupxException extends Exception
|
17 |
-
{
|
18 |
-
/**
|
19 |
-
*
|
20 |
-
* @var string // formatted html string
|
21 |
-
*/
|
22 |
-
protected $longMsg = '';
|
23 |
-
protected $faqLink = false;
|
24 |
-
|
25 |
-
/**
|
26 |
-
*
|
27 |
-
* @param type $shortMsg
|
28 |
-
* @param type $longMsg
|
29 |
-
* @param type $faqLinkUrl
|
30 |
-
* @param type $faqLinkLabel
|
31 |
-
* @param type $code
|
32 |
-
* @param Exception $previous
|
33 |
-
*/
|
34 |
-
public function __construct($shortMsg, $longMsg = '', $faqLinkUrl = '', $faqLinkLabel = '', $code = 0, Exception $previous = null)
|
35 |
-
{
|
36 |
-
parent::__construct($shortMsg, $code, $previous);
|
37 |
-
$this->longMsg = (string) $longMsg;
|
38 |
-
if (!empty($faqLinkUrl)) {
|
39 |
-
$this->faqLink = array(
|
40 |
-
'url' => $faqLinkUrl,
|
41 |
-
'label' => $faqLinkLabel
|
42 |
-
);
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
public function getLongMsg()
|
47 |
-
{
|
48 |
-
return $this->longMsg;
|
49 |
-
}
|
50 |
-
|
51 |
-
public function haveFaqLink()
|
52 |
-
{
|
53 |
-
return $this->faqLink !== false;
|
54 |
-
}
|
55 |
-
|
56 |
-
public function getFaqLinkUrl()
|
57 |
-
{
|
58 |
-
if ($this->haveFaqLink()) {
|
59 |
-
return $this->faqLink['url'];
|
60 |
-
} else {
|
61 |
-
return '';
|
62 |
-
}
|
63 |
-
}
|
64 |
-
|
65 |
-
public function getFaqLinkLabel()
|
66 |
-
{
|
67 |
-
if ($this->haveFaqLink()) {
|
68 |
-
return $this->faqLink['label'];
|
69 |
-
} else {
|
70 |
-
return '';
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
// custom string representation of object
|
75 |
-
public function __toString()
|
76 |
-
{
|
77 |
-
$result = __CLASS__.": [{$this->code}]: {$this->message}";
|
78 |
-
if ($this->haveFaqLink()) {
|
79 |
-
$result .= "\n\tSee FAQ ".$this->faqLink['label'].': '.$this->faqLink['url'];
|
80 |
-
}
|
81 |
-
if (!empty($this->longMsg)) {
|
82 |
-
$result .= "\n\t".strip_tags($this->longMsg);
|
83 |
-
}
|
84 |
-
$result .= "\n";
|
85 |
-
return $result;
|
86 |
-
}
|
87 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Custom exceptions
|
4 |
+
*
|
5 |
+
* Standard: PSR-2
|
6 |
+
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
+
*
|
8 |
+
* @package SC\DUPX\U
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Dup installer custom exception
|
15 |
+
*/
|
16 |
+
class DupxException extends Exception
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
*
|
20 |
+
* @var string // formatted html string
|
21 |
+
*/
|
22 |
+
protected $longMsg = '';
|
23 |
+
protected $faqLink = false;
|
24 |
+
|
25 |
+
/**
|
26 |
+
*
|
27 |
+
* @param type $shortMsg
|
28 |
+
* @param type $longMsg
|
29 |
+
* @param type $faqLinkUrl
|
30 |
+
* @param type $faqLinkLabel
|
31 |
+
* @param type $code
|
32 |
+
* @param Exception $previous
|
33 |
+
*/
|
34 |
+
public function __construct($shortMsg, $longMsg = '', $faqLinkUrl = '', $faqLinkLabel = '', $code = 0, Exception $previous = null)
|
35 |
+
{
|
36 |
+
parent::__construct($shortMsg, $code, $previous);
|
37 |
+
$this->longMsg = (string) $longMsg;
|
38 |
+
if (!empty($faqLinkUrl)) {
|
39 |
+
$this->faqLink = array(
|
40 |
+
'url' => $faqLinkUrl,
|
41 |
+
'label' => $faqLinkLabel
|
42 |
+
);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
public function getLongMsg()
|
47 |
+
{
|
48 |
+
return $this->longMsg;
|
49 |
+
}
|
50 |
+
|
51 |
+
public function haveFaqLink()
|
52 |
+
{
|
53 |
+
return $this->faqLink !== false;
|
54 |
+
}
|
55 |
+
|
56 |
+
public function getFaqLinkUrl()
|
57 |
+
{
|
58 |
+
if ($this->haveFaqLink()) {
|
59 |
+
return $this->faqLink['url'];
|
60 |
+
} else {
|
61 |
+
return '';
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
public function getFaqLinkLabel()
|
66 |
+
{
|
67 |
+
if ($this->haveFaqLink()) {
|
68 |
+
return $this->faqLink['label'];
|
69 |
+
} else {
|
70 |
+
return '';
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
// custom string representation of object
|
75 |
+
public function __toString()
|
76 |
+
{
|
77 |
+
$result = __CLASS__.": [{$this->code}]: {$this->message}";
|
78 |
+
if ($this->haveFaqLink()) {
|
79 |
+
$result .= "\n\tSee FAQ ".$this->faqLink['label'].': '.$this->faqLink['url'];
|
80 |
+
}
|
81 |
+
if (!empty($this->longMsg)) {
|
82 |
+
$result .= "\n\t".strip_tags($this->longMsg);
|
83 |
+
}
|
84 |
+
$result .= "\n";
|
85 |
+
return $result;
|
86 |
+
}
|
87 |
}
|
installer/dup-installer/classes/utilities/class.u.search.reaplce.manager.php
CHANGED
@@ -1,611 +1,611 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Search and reaplace manager
|
4 |
-
*
|
5 |
-
* Standard: PSR-2
|
6 |
-
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
-
*
|
8 |
-
* @package SC\DUPX\U
|
9 |
-
*
|
10 |
-
*/
|
11 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Search and replace manager
|
15 |
-
* singleton class
|
16 |
-
*/
|
17 |
-
final class DUPX_S_R_MANAGER
|
18 |
-
{
|
19 |
-
const GLOBAL_SCOPE_KEY = '___!GLOBAL!___!SCOPE!___';
|
20 |
-
|
21 |
-
/**
|
22 |
-
*
|
23 |
-
* @var DUPX_S_R_MANAGER
|
24 |
-
*/
|
25 |
-
private static $instance = null;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* full list items not sorted
|
29 |
-
* @var DUPX_S_R_ITEM[]
|
30 |
-
*/
|
31 |
-
private $items = array();
|
32 |
-
|
33 |
-
/**
|
34 |
-
* items sorted by priority and scope
|
35 |
-
* [
|
36 |
-
* 10 => [
|
37 |
-
* '___!GLOBAL!___!SCOPE!___' => [
|
38 |
-
* DUPX_S_R_ITEM
|
39 |
-
* DUPX_S_R_ITEM
|
40 |
-
* DUPX_S_R_ITEM
|
41 |
-
* ],
|
42 |
-
* 'scope_one' => [
|
43 |
-
* DUPX_S_R_ITEM
|
44 |
-
* DUPX_S_R_ITEM
|
45 |
-
* ]
|
46 |
-
* ],
|
47 |
-
* 20 => [
|
48 |
-
* .
|
49 |
-
* .
|
50 |
-
* .
|
51 |
-
* ]
|
52 |
-
* ]
|
53 |
-
*
|
54 |
-
* @var array
|
55 |
-
*/
|
56 |
-
private $prorityScopeItems = array();
|
57 |
-
|
58 |
-
/**
|
59 |
-
*
|
60 |
-
* @return DUPX_S_R_MANAGER
|
61 |
-
*/
|
62 |
-
public static function getInstance()
|
63 |
-
{
|
64 |
-
if (is_null(self::$instance)) {
|
65 |
-
self::$instance = new self();
|
66 |
-
}
|
67 |
-
|
68 |
-
return self::$instance;
|
69 |
-
}
|
70 |
-
|
71 |
-
private function __construct()
|
72 |
-
{
|
73 |
-
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
*
|
78 |
-
* @return array
|
79 |
-
*/
|
80 |
-
public function getArrayData()
|
81 |
-
{
|
82 |
-
$data = array();
|
83 |
-
|
84 |
-
foreach ($this->items as $item) {
|
85 |
-
$data[] = $item->toArray();
|
86 |
-
}
|
87 |
-
|
88 |
-
return $data;
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
*
|
93 |
-
* @param array $json
|
94 |
-
*/
|
95 |
-
public function setFromArrayData($data)
|
96 |
-
{
|
97 |
-
|
98 |
-
foreach ($data as $itemArray) {
|
99 |
-
$new_item = DUPX_S_R_ITEM::getItemFromArray($itemArray);
|
100 |
-
$this->setNewItem($new_item);
|
101 |
-
}
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
*
|
106 |
-
* @param string $search
|
107 |
-
* @param string $replace
|
108 |
-
* @param string $type // item type DUPX_S_R_ITEM::[TYPE_STRING|TYPE_URL|TYPE_URL_NORMALIZE_DOMAIN|TYPE_PATH]
|
109 |
-
* @param int $prority // lower first
|
110 |
-
* @param bool|string|string[] $scope // true = global scope | false = never | string signle scope | string[] scope list
|
111 |
-
*
|
112 |
-
* @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
|
113 |
-
*/
|
114 |
-
public function addItem($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = true)
|
115 |
-
{
|
116 |
-
if (strlen((string) $search) == 0) {
|
117 |
-
return false;
|
118 |
-
}
|
119 |
-
|
120 |
-
if (is_bool($scope)) {
|
121 |
-
$scope = $scope ? self::GLOBAL_SCOPE_KEY : '';
|
122 |
-
}
|
123 |
-
DUPX_Log::info(
|
124 |
-
'ADD SEARCH AND REPLACE ITEM'."\n".
|
125 |
-
'Search:"'.$search.'" Replace:"'.$replace.'" Type:"'.$type.'" Prority:"'.$prority.'" Scope:"'.$scope, 2);
|
126 |
-
$new_item = new DUPX_S_R_ITEM($search, $replace, $type, $prority, $scope);
|
127 |
-
|
128 |
-
return $this->setNewItem($new_item);
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
*
|
133 |
-
* @param DUPX_S_R_ITEM $new_item
|
134 |
-
*
|
135 |
-
* @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
|
136 |
-
*/
|
137 |
-
private function setNewItem($new_item)
|
138 |
-
{
|
139 |
-
$this->items[$new_item->getId()] = $new_item;
|
140 |
-
|
141 |
-
// create priority array
|
142 |
-
if (!isset($this->prorityScopeItems[$new_item->prority])) {
|
143 |
-
$this->prorityScopeItems[$new_item->prority] = array();
|
144 |
-
|
145 |
-
// sort by priority
|
146 |
-
ksort($this->prorityScopeItems);
|
147 |
-
}
|
148 |
-
|
149 |
-
// create scope list
|
150 |
-
foreach ($new_item->scope as $scope) {
|
151 |
-
if (!isset($this->prorityScopeItems[$new_item->prority][$scope])) {
|
152 |
-
$this->prorityScopeItems[$new_item->prority][$scope] = array();
|
153 |
-
}
|
154 |
-
$this->prorityScopeItems[$new_item->prority][$scope][] = $new_item;
|
155 |
-
}
|
156 |
-
|
157 |
-
return $new_item;
|
158 |
-
}
|
159 |
-
|
160 |
-
/**
|
161 |
-
* get all search and reaple items by scpoe
|
162 |
-
*
|
163 |
-
* @param null|string $scope if scope is empty get only global scope
|
164 |
-
* @return DUPX_S_R_ITEM[]
|
165 |
-
*/
|
166 |
-
private function getSearchReplaceItems($scope = null, $globalScope = true)
|
167 |
-
{
|
168 |
-
$items_list = array();
|
169 |
-
foreach ($this->prorityScopeItems as $priority => $priority_list) {
|
170 |
-
// get scope list
|
171 |
-
if (!empty($scope) && isset($priority_list[$scope])) {
|
172 |
-
foreach ($priority_list[$scope] as $item) {
|
173 |
-
$items_list[] = $item;
|
174 |
-
}
|
175 |
-
}
|
176 |
-
|
177 |
-
// get global scope
|
178 |
-
if ($globalScope && isset($priority_list[self::GLOBAL_SCOPE_KEY])) {
|
179 |
-
foreach ($priority_list[self::GLOBAL_SCOPE_KEY] as $item) {
|
180 |
-
$items_list[] = $item;
|
181 |
-
}
|
182 |
-
}
|
183 |
-
}
|
184 |
-
|
185 |
-
return $items_list;
|
186 |
-
}
|
187 |
-
|
188 |
-
/**
|
189 |
-
* get replace list by scope
|
190 |
-
* result
|
191 |
-
* [
|
192 |
-
* ['search' => ...,'replace' => ...]
|
193 |
-
* ['search' => ...,'replace' => ...]
|
194 |
-
* ]
|
195 |
-
*
|
196 |
-
* @param null|string $scope if scope is empty get only global scope
|
197 |
-
* @param bool $unique_search If true it eliminates the double searches leaving the one with lower priority.
|
198 |
-
*
|
199 |
-
* @return array
|
200 |
-
*/
|
201 |
-
public function getSearchReplaceList($scope = null, $unique_search = true, $globalScope = true)
|
202 |
-
{
|
203 |
-
DUPX_Log::info('-- SEARCH LIST -- SCOPE: '.DUPX_Log::varToString($scope), DUPX_Log::LV_DEBUG);
|
204 |
-
|
205 |
-
$items_list = $this->getSearchReplaceItems($scope, $globalScope);
|
206 |
-
DUPX_Log::info('-- SEARCH LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
|
207 |
-
|
208 |
-
if ($unique_search) {
|
209 |
-
$items_list = self::uniqueSearchListItem($items_list);
|
210 |
-
DUPX_Log::info('-- UNIQUE LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
|
211 |
-
}
|
212 |
-
$result = array();
|
213 |
-
|
214 |
-
foreach ($items_list as $item) {
|
215 |
-
$result = array_merge($result, $item->getPairsSearchReplace());
|
216 |
-
}
|
217 |
-
|
218 |
-
foreach ($result as $index => $c_sr) {
|
219 |
-
DUPX_Log::info(
|
220 |
-
'SEARCH'.str_pad($index + 1, 3, ' ', STR_PAD_LEFT).":".
|
221 |
-
str_pad(DUPX_Log::varToString($c_sr['search'])." ", 50, '=', STR_PAD_RIGHT).
|
222 |
-
"=> ".
|
223 |
-
DUPX_Log::varToString($c_sr['replace']));
|
224 |
-
}
|
225 |
-
|
226 |
-
return $result;
|
227 |
-
}
|
228 |
-
|
229 |
-
/**
|
230 |
-
* remove duplicated search strings.
|
231 |
-
* Leave the object at lower priority
|
232 |
-
*
|
233 |
-
* @param DUPX_S_R_ITEM[] $list
|
234 |
-
* @return boolean|DUPX_S_R_ITEM[]
|
235 |
-
*/
|
236 |
-
private static function uniqueSearchListItem($list)
|
237 |
-
{
|
238 |
-
$search_strings = array();
|
239 |
-
$result = array();
|
240 |
-
|
241 |
-
if (!is_array($list)) {
|
242 |
-
return false;
|
243 |
-
}
|
244 |
-
|
245 |
-
foreach ($list as $item) {
|
246 |
-
if (!in_array($item->search, $search_strings)) {
|
247 |
-
$result[] = $item;
|
248 |
-
$search_strings[] = $item->search;
|
249 |
-
}
|
250 |
-
}
|
251 |
-
|
252 |
-
return $result;
|
253 |
-
}
|
254 |
-
|
255 |
-
private function __clone()
|
256 |
-
{
|
257 |
-
|
258 |
-
}
|
259 |
-
|
260 |
-
private function __wakeup()
|
261 |
-
{
|
262 |
-
|
263 |
-
}
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* search and replace item use in manager to creat the search and replace list.
|
268 |
-
*/
|
269 |
-
class DUPX_S_R_ITEM
|
270 |
-
{
|
271 |
-
private static $uniqueIdCount = 0;
|
272 |
-
|
273 |
-
const TYPE_STRING = 'str';
|
274 |
-
const TYPE_URL = 'url';
|
275 |
-
const TYPE_URL_NORMALIZE_DOMAIN = 'urlnd';
|
276 |
-
const TYPE_PATH = 'path';
|
277 |
-
|
278 |
-
/**
|
279 |
-
*
|
280 |
-
* @var int
|
281 |
-
*/
|
282 |
-
private $id = 0;
|
283 |
-
|
284 |
-
/**
|
285 |
-
*
|
286 |
-
* @var int prority lower first
|
287 |
-
*/
|
288 |
-
public $prority = 10;
|
289 |
-
|
290 |
-
/**
|
291 |
-
*
|
292 |
-
* @var string[] scope list
|
293 |
-
*/
|
294 |
-
public $scope = array();
|
295 |
-
|
296 |
-
/**
|
297 |
-
*
|
298 |
-
* @var string type of string
|
299 |
-
*/
|
300 |
-
public $type = self::TYPE_STRING;
|
301 |
-
|
302 |
-
/**
|
303 |
-
*
|
304 |
-
* @var string search string
|
305 |
-
*/
|
306 |
-
public $search = '';
|
307 |
-
|
308 |
-
/**
|
309 |
-
*
|
310 |
-
* @var string replace string
|
311 |
-
*/
|
312 |
-
public $replace = '';
|
313 |
-
|
314 |
-
/**
|
315 |
-
*
|
316 |
-
* @param string $search
|
317 |
-
* @param string $replace
|
318 |
-
* @param string $type
|
319 |
-
* @param int $prority
|
320 |
-
* @param string|string[] $scope if empty never used
|
321 |
-
*/
|
322 |
-
public function __construct($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = array())
|
323 |
-
{
|
324 |
-
if (!is_array($scope)) {
|
325 |
-
$this->scope = empty($scope) ? array() : array((string) $scope);
|
326 |
-
} else {
|
327 |
-
$this->scope = $scope;
|
328 |
-
}
|
329 |
-
$this->prority = (int) $prority;
|
330 |
-
switch ($type) {
|
331 |
-
case DUPX_S_R_ITEM::TYPE_URL:
|
332 |
-
case DUPX_S_R_ITEM::TYPE_URL_NORMALIZE_DOMAIN:
|
333 |
-
$this->search = rtrim($search, '/');
|
334 |
-
$this->replace = rtrim($replace, '/');
|
335 |
-
break;
|
336 |
-
case DUPX_S_R_ITEM::TYPE_PATH:
|
337 |
-
case DUPX_S_R_ITEM::TYPE_STRING:
|
338 |
-
default:
|
339 |
-
$this->search = (string) $search;
|
340 |
-
$this->replace = (string) $replace;
|
341 |
-
break;
|
342 |
-
}
|
343 |
-
$this->type = $type;
|
344 |
-
$this->id = self::$uniqueIdCount;
|
345 |
-
self::$uniqueIdCount ++;
|
346 |
-
}
|
347 |
-
|
348 |
-
public function toArray()
|
349 |
-
{
|
350 |
-
return array(
|
351 |
-
'id' => $this->id,
|
352 |
-
'prority' => $this->prority,
|
353 |
-
'scope' => $this->scope,
|
354 |
-
'type' => $this->type,
|
355 |
-
'search' => $this->search,
|
356 |
-
'replace' => $this->replace
|
357 |
-
);
|
358 |
-
}
|
359 |
-
|
360 |
-
public static function getItemFromArray($array)
|
361 |
-
{
|
362 |
-
$result = new self($array['search'], $array['replace'], $array['type'], $array['prority'], $array['scope']);
|
363 |
-
return $result;
|
364 |
-
}
|
365 |
-
|
366 |
-
/**
|
367 |
-
* return search an replace string
|
368 |
-
*
|
369 |
-
* result
|
370 |
-
* [
|
371 |
-
* ['search' => ...,'replace' => ...]
|
372 |
-
* ['search' => ...,'replace' => ...]
|
373 |
-
* ]
|
374 |
-
*
|
375 |
-
* @return array
|
376 |
-
*/
|
377 |
-
public function getPairsSearchReplace()
|
378 |
-
{
|
379 |
-
switch ($this->type) {
|
380 |
-
case self::TYPE_URL:
|
381 |
-
return self::searchReplaceUrl($this->search, $this->replace);
|
382 |
-
case self::TYPE_URL_NORMALIZE_DOMAIN:
|
383 |
-
return self::searchReplaceUrl($this->search, $this->replace, true, true);
|
384 |
-
case self::TYPE_PATH:
|
385 |
-
return self::searchReplacePath($this->search, $this->replace);
|
386 |
-
case self::TYPE_STRING:
|
387 |
-
default:
|
388 |
-
return self::searchReplaceWithEncodings($this->search, $this->replace);
|
389 |
-
}
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* Get search and replace strings with encodings
|
394 |
-
* prevents unnecessary substitution like when search and reaplace are the same.
|
395 |
-
*
|
396 |
-
* result
|
397 |
-
* [
|
398 |
-
* ['search' => ...,'replace' => ...]
|
399 |
-
* ['search' => ...,'replace' => ...]
|
400 |
-
* ]
|
401 |
-
*
|
402 |
-
* @param string $search
|
403 |
-
* @param string $replace
|
404 |
-
* @param bool $json add json encode string
|
405 |
-
* @param bool $urlencode add urlencode string
|
406 |
-
*
|
407 |
-
* @return array pairs search and replace
|
408 |
-
*/
|
409 |
-
public static function searchReplaceWithEncodings($search, $replace, $json = true, $urlencode = true)
|
410 |
-
{
|
411 |
-
$result = array();
|
412 |
-
if ($search != $replace) {
|
413 |
-
$result[] = array('search' => $search, 'replace' => $replace);
|
414 |
-
} else {
|
415 |
-
return array();
|
416 |
-
}
|
417 |
-
|
418 |
-
// JSON ENCODE
|
419 |
-
if ($json) {
|
420 |
-
$search_json = str_replace('"', "", json_encode($search));
|
421 |
-
$replace_json = str_replace('"', "", json_encode($replace));
|
422 |
-
|
423 |
-
if ($search != $search_json && $search_json != $replace_json) {
|
424 |
-
$result[] = array('search' => $search_json, 'replace' => $replace_json);
|
425 |
-
}
|
426 |
-
}
|
427 |
-
|
428 |
-
// URL ENCODE
|
429 |
-
if ($urlencode) {
|
430 |
-
$search_urlencode = urlencode($search);
|
431 |
-
$replace_urlencode = urlencode($replace);
|
432 |
-
|
433 |
-
if ($search != $search_urlencode && $search_urlencode != $replace_urlencode) {
|
434 |
-
$result[] = array('search' => $search_urlencode, 'replace' => $replace_urlencode);
|
435 |
-
}
|
436 |
-
}
|
437 |
-
|
438 |
-
return $result;
|
439 |
-
}
|
440 |
-
|
441 |
-
/**
|
442 |
-
* Add replace strings to substitute old url to new url
|
443 |
-
* 1) no protocol old url to no protocol new url (es. //www.hold.url => //www.new.url)
|
444 |
-
* 2) wrong protocol new url to right protocol new url (es. http://www.new.url => https://www.new.url)
|
445 |
-
*
|
446 |
-
* result
|
447 |
-
* [
|
448 |
-
* ['search' => ...,'replace' => ...]
|
449 |
-
* ['search' => ...,'replace' => ...]
|
450 |
-
* ]
|
451 |
-
*
|
452 |
-
* @param string $search_url
|
453 |
-
* @param string $replace_url
|
454 |
-
* @param bool $force_new_protocol if true force http or https protocol (work only if replace url have http or https scheme)
|
455 |
-
*
|
456 |
-
* @return array
|
457 |
-
*/
|
458 |
-
public static function searchReplaceUrl($search_url, $replace_url, $force_new_protocol = true, $normalizeWww = false)
|
459 |
-
{
|
460 |
-
if (($parse_search_url = parse_url($search_url)) !== false && isset($parse_search_url['scheme'])) {
|
461 |
-
$search_url_raw = substr($search_url, strlen($parse_search_url['scheme']) + 1);
|
462 |
-
} else {
|
463 |
-
$search_url_raw = $search_url;
|
464 |
-
}
|
465 |
-
|
466 |
-
if (($parse_replace_url = parse_url($replace_url)) !== false && isset($parse_replace_url['scheme'])) {
|
467 |
-
$replace_url_raw = substr($replace_url, strlen($parse_replace_url['scheme']) + 1);
|
468 |
-
} else {
|
469 |
-
$replace_url_raw = $replace_url;
|
470 |
-
}
|
471 |
-
//SEARCH WITH NO PROTOCOL: RAW "//"
|
472 |
-
$result = self::searchReplaceWithEncodings($search_url_raw, $replace_url_raw);
|
473 |
-
|
474 |
-
// NORMALIZE source www
|
475 |
-
if ($normalizeWww && self::domainCanNormalized($search_url_raw)) {
|
476 |
-
if (self::isWww($search_url_raw)) {
|
477 |
-
$fromDomain = '//'.substr($search_url_raw , strlen('//www.'));
|
478 |
-
} else {
|
479 |
-
$fromDomain = '//www.'.substr($search_url_raw , strlen('//'));
|
480 |
-
}
|
481 |
-
|
482 |
-
// prevent double subsition for subdiv problems.
|
483 |
-
if (strpos($replace_url_raw, $fromDomain) !== 0) {
|
484 |
-
$result = array_merge($result, self::searchReplaceWithEncodings($fromDomain, $replace_url_raw));
|
485 |
-
}
|
486 |
-
}
|
487 |
-
|
488 |
-
// NORMALIZE source protocol
|
489 |
-
if ($force_new_protocol && $parse_replace_url !== false && isset($parse_replace_url['scheme'])) {
|
490 |
-
//FORCE NEW PROTOCOL [HTTP / HTTPS]
|
491 |
-
switch ($parse_replace_url['scheme']) {
|
492 |
-
case 'http':
|
493 |
-
$replace_url_wrong_protocol = 'https:'.$replace_url_raw;
|
494 |
-
break;
|
495 |
-
case 'https':
|
496 |
-
$replace_url_wrong_protocol = 'http:'.$replace_url_raw;
|
497 |
-
break;
|
498 |
-
default:
|
499 |
-
$replace_url_wrong_protocol = '';
|
500 |
-
break;
|
501 |
-
}
|
502 |
-
|
503 |
-
if (!empty($replace_url_wrong_protocol)) {
|
504 |
-
$result = array_merge($result, self::searchReplaceWithEncodings($replace_url_wrong_protocol, $replace_url));
|
505 |
-
}
|
506 |
-
}
|
507 |
-
|
508 |
-
return $result;
|
509 |
-
}
|
510 |
-
|
511 |
-
/**
|
512 |
-
* result
|
513 |
-
* [
|
514 |
-
* ['search' => ...,'replace' => ...]
|
515 |
-
* ['search' => ...,'replace' => ...]
|
516 |
-
* ]
|
517 |
-
*
|
518 |
-
* @param string $search_path
|
519 |
-
* @param string $replace_path
|
520 |
-
*
|
521 |
-
* @return array
|
522 |
-
*/
|
523 |
-
public static function searchReplacePath($search_path, $replace_path)
|
524 |
-
{
|
525 |
-
$result = self::searchReplaceWithEncodings($search_path, $replace_path);
|
526 |
-
|
527 |
-
$search_path_unsetSafe = rtrim(DUPX_U::unsetSafePath($search_path), '\\');
|
528 |
-
$replace_path_unsetSafe = rtrim($replace_path, '/');
|
529 |
-
$result = array_merge($result, self::searchReplaceWithEncodings($search_path_unsetSafe, $replace_path_unsetSafe));
|
530 |
-
|
531 |
-
return $result;
|
532 |
-
}
|
533 |
-
|
534 |
-
/**
|
535 |
-
* get unique item id
|
536 |
-
*
|
537 |
-
* @return int
|
538 |
-
*/
|
539 |
-
public function getId()
|
540 |
-
{
|
541 |
-
return $this->id;
|
542 |
-
}
|
543 |
-
|
544 |
-
/**
|
545 |
-
* @param $url string The URL whichs domain you want to get
|
546 |
-
* @return string The domain part of the given URL
|
547 |
-
* www.myurl.co.uk => myurl.co.uk
|
548 |
-
* www.google.com => google.com
|
549 |
-
* my.test.myurl.co.uk => myurl.co.uk
|
550 |
-
* www.myurl.localweb => myurl.localweb
|
551 |
-
*
|
552 |
-
*/
|
553 |
-
public static function getDomain($url)
|
554 |
-
{
|
555 |
-
$pieces = parse_url($url);
|
556 |
-
$domain = isset($pieces['host']) ? $pieces['host'] : '';
|
557 |
-
$regs = null;
|
558 |
-
if (strpos($domain, ".") !== false) {
|
559 |
-
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
|
560 |
-
return $regs['domain'];
|
561 |
-
} else {
|
562 |
-
$exDomain = explode('.', $domain);
|
563 |
-
return implode('.', array_slice($exDomain, -2, 2));
|
564 |
-
}
|
565 |
-
} else {
|
566 |
-
return $domain;
|
567 |
-
}
|
568 |
-
}
|
569 |
-
|
570 |
-
public static function domainCanNormalized($url)
|
571 |
-
{
|
572 |
-
$pieces = parse_url($url);
|
573 |
-
|
574 |
-
if (!isset($pieces['host'])) {
|
575 |
-
return false;
|
576 |
-
}
|
577 |
-
|
578 |
-
if (strpos($pieces['host'], ".") === false) {
|
579 |
-
return false;
|
580 |
-
}
|
581 |
-
|
582 |
-
$dLevels = explode('.', $pieces['host']);
|
583 |
-
if ($dLevels[0] == 'www') {
|
584 |
-
return true;
|
585 |
-
}
|
586 |
-
|
587 |
-
switch (count($dLevels)) {
|
588 |
-
case 1:
|
589 |
-
return false;
|
590 |
-
case 2:
|
591 |
-
return true;
|
592 |
-
case 3:
|
593 |
-
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $pieces['host'], $regs)) {
|
594 |
-
return $regs['domain'] == $pieces['host'];
|
595 |
-
}
|
596 |
-
return false;
|
597 |
-
default:
|
598 |
-
return false;
|
599 |
-
}
|
600 |
-
}
|
601 |
-
|
602 |
-
public static function isWww($url)
|
603 |
-
{
|
604 |
-
$pieces = parse_url($url);
|
605 |
-
if (!isset($pieces['host'])) {
|
606 |
-
return false;
|
607 |
-
} else {
|
608 |
-
return strpos($pieces['host'], 'www.') === 0;
|
609 |
-
}
|
610 |
-
}
|
611 |
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Search and reaplace manager
|
4 |
+
*
|
5 |
+
* Standard: PSR-2
|
6 |
+
* @link http://www.php-fig.org/psr/psr-2 Full Documentation
|
7 |
+
*
|
8 |
+
* @package SC\DUPX\U
|
9 |
+
*
|
10 |
+
*/
|
11 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Search and replace manager
|
15 |
+
* singleton class
|
16 |
+
*/
|
17 |
+
final class DUPX_S_R_MANAGER
|
18 |
+
{
|
19 |
+
const GLOBAL_SCOPE_KEY = '___!GLOBAL!___!SCOPE!___';
|
20 |
+
|
21 |
+
/**
|
22 |
+
*
|
23 |
+
* @var DUPX_S_R_MANAGER
|
24 |
+
*/
|
25 |
+
private static $instance = null;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* full list items not sorted
|
29 |
+
* @var DUPX_S_R_ITEM[]
|
30 |
+
*/
|
31 |
+
private $items = array();
|
32 |
+
|
33 |
+
/**
|
34 |
+
* items sorted by priority and scope
|
35 |
+
* [
|
36 |
+
* 10 => [
|
37 |
+
* '___!GLOBAL!___!SCOPE!___' => [
|
38 |
+
* DUPX_S_R_ITEM
|
39 |
+
* DUPX_S_R_ITEM
|
40 |
+
* DUPX_S_R_ITEM
|
41 |
+
* ],
|
42 |
+
* 'scope_one' => [
|
43 |
+
* DUPX_S_R_ITEM
|
44 |
+
* DUPX_S_R_ITEM
|
45 |
+
* ]
|
46 |
+
* ],
|
47 |
+
* 20 => [
|
48 |
+
* .
|
49 |
+
* .
|
50 |
+
* .
|
51 |
+
* ]
|
52 |
+
* ]
|
53 |
+
*
|
54 |
+
* @var array
|
55 |
+
*/
|
56 |
+
private $prorityScopeItems = array();
|
57 |
+
|
58 |
+
/**
|
59 |
+
*
|
60 |
+
* @return DUPX_S_R_MANAGER
|
61 |
+
*/
|
62 |
+
public static function getInstance()
|
63 |
+
{
|
64 |
+
if (is_null(self::$instance)) {
|
65 |
+
self::$instance = new self();
|
66 |
+
}
|
67 |
+
|
68 |
+
return self::$instance;
|
69 |
+
}
|
70 |
+
|
71 |
+
private function __construct()
|
72 |
+
{
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
public function getArrayData()
|
81 |
+
{
|
82 |
+
$data = array();
|
83 |
+
|
84 |
+
foreach ($this->items as $item) {
|
85 |
+
$data[] = $item->toArray();
|
86 |
+
}
|
87 |
+
|
88 |
+
return $data;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
*
|
93 |
+
* @param array $json
|
94 |
+
*/
|
95 |
+
public function setFromArrayData($data)
|
96 |
+
{
|
97 |
+
|
98 |
+
foreach ($data as $itemArray) {
|
99 |
+
$new_item = DUPX_S_R_ITEM::getItemFromArray($itemArray);
|
100 |
+
$this->setNewItem($new_item);
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
*
|
106 |
+
* @param string $search
|
107 |
+
* @param string $replace
|
108 |
+
* @param string $type // item type DUPX_S_R_ITEM::[TYPE_STRING|TYPE_URL|TYPE_URL_NORMALIZE_DOMAIN|TYPE_PATH]
|
109 |
+
* @param int $prority // lower first
|
110 |
+
* @param bool|string|string[] $scope // true = global scope | false = never | string signle scope | string[] scope list
|
111 |
+
*
|
112 |
+
* @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
|
113 |
+
*/
|
114 |
+
public function addItem($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = true)
|
115 |
+
{
|
116 |
+
if (strlen((string) $search) == 0) {
|
117 |
+
return false;
|
118 |
+
}
|
119 |
+
|
120 |
+
if (is_bool($scope)) {
|
121 |
+
$scope = $scope ? self::GLOBAL_SCOPE_KEY : '';
|
122 |
+
}
|
123 |
+
DUPX_Log::info(
|
124 |
+
'ADD SEARCH AND REPLACE ITEM'."\n".
|
125 |
+
'Search:"'.$search.'" Replace:"'.$replace.'" Type:"'.$type.'" Prority:"'.$prority.'" Scope:"'.$scope, 2);
|
126 |
+
$new_item = new DUPX_S_R_ITEM($search, $replace, $type, $prority, $scope);
|
127 |
+
|
128 |
+
return $this->setNewItem($new_item);
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
*
|
133 |
+
* @param DUPX_S_R_ITEM $new_item
|
134 |
+
*
|
135 |
+
* @return boolean|DUPX_S_R_ITEM // false if fail or new DUPX_S_R_ITEM
|
136 |
+
*/
|
137 |
+
private function setNewItem($new_item)
|
138 |
+
{
|
139 |
+
$this->items[$new_item->getId()] = $new_item;
|
140 |
+
|
141 |
+
// create priority array
|
142 |
+
if (!isset($this->prorityScopeItems[$new_item->prority])) {
|
143 |
+
$this->prorityScopeItems[$new_item->prority] = array();
|
144 |
+
|
145 |
+
// sort by priority
|
146 |
+
ksort($this->prorityScopeItems);
|
147 |
+
}
|
148 |
+
|
149 |
+
// create scope list
|
150 |
+
foreach ($new_item->scope as $scope) {
|
151 |
+
if (!isset($this->prorityScopeItems[$new_item->prority][$scope])) {
|
152 |
+
$this->prorityScopeItems[$new_item->prority][$scope] = array();
|
153 |
+
}
|
154 |
+
$this->prorityScopeItems[$new_item->prority][$scope][] = $new_item;
|
155 |
+
}
|
156 |
+
|
157 |
+
return $new_item;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* get all search and reaple items by scpoe
|
162 |
+
*
|
163 |
+
* @param null|string $scope if scope is empty get only global scope
|
164 |
+
* @return DUPX_S_R_ITEM[]
|
165 |
+
*/
|
166 |
+
private function getSearchReplaceItems($scope = null, $globalScope = true)
|
167 |
+
{
|
168 |
+
$items_list = array();
|
169 |
+
foreach ($this->prorityScopeItems as $priority => $priority_list) {
|
170 |
+
// get scope list
|
171 |
+
if (!empty($scope) && isset($priority_list[$scope])) {
|
172 |
+
foreach ($priority_list[$scope] as $item) {
|
173 |
+
$items_list[] = $item;
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
// get global scope
|
178 |
+
if ($globalScope && isset($priority_list[self::GLOBAL_SCOPE_KEY])) {
|
179 |
+
foreach ($priority_list[self::GLOBAL_SCOPE_KEY] as $item) {
|
180 |
+
$items_list[] = $item;
|
181 |
+
}
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
return $items_list;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* get replace list by scope
|
190 |
+
* result
|
191 |
+
* [
|
192 |
+
* ['search' => ...,'replace' => ...]
|
193 |
+
* ['search' => ...,'replace' => ...]
|
194 |
+
* ]
|
195 |
+
*
|
196 |
+
* @param null|string $scope if scope is empty get only global scope
|
197 |
+
* @param bool $unique_search If true it eliminates the double searches leaving the one with lower priority.
|
198 |
+
*
|
199 |
+
* @return array
|
200 |
+
*/
|
201 |
+
public function getSearchReplaceList($scope = null, $unique_search = true, $globalScope = true)
|
202 |
+
{
|
203 |
+
DUPX_Log::info('-- SEARCH LIST -- SCOPE: '.DUPX_Log::varToString($scope), DUPX_Log::LV_DEBUG);
|
204 |
+
|
205 |
+
$items_list = $this->getSearchReplaceItems($scope, $globalScope);
|
206 |
+
DUPX_Log::info('-- SEARCH LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
|
207 |
+
|
208 |
+
if ($unique_search) {
|
209 |
+
$items_list = self::uniqueSearchListItem($items_list);
|
210 |
+
DUPX_Log::info('-- UNIQUE LIST ITEMS --'."\n".print_r($items_list, true), DUPX_Log::LV_HARD_DEBUG);
|
211 |
+
}
|
212 |
+
$result = array();
|
213 |
+
|
214 |
+
foreach ($items_list as $item) {
|
215 |
+
$result = array_merge($result, $item->getPairsSearchReplace());
|
216 |
+
}
|
217 |
+
|
218 |
+
foreach ($result as $index => $c_sr) {
|
219 |
+
DUPX_Log::info(
|
220 |
+
'SEARCH'.str_pad($index + 1, 3, ' ', STR_PAD_LEFT).":".
|
221 |
+
str_pad(DUPX_Log::varToString($c_sr['search'])." ", 50, '=', STR_PAD_RIGHT).
|
222 |
+
"=> ".
|
223 |
+
DUPX_Log::varToString($c_sr['replace']));
|
224 |
+
}
|
225 |
+
|
226 |
+
return $result;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* remove duplicated search strings.
|
231 |
+
* Leave the object at lower priority
|
232 |
+
*
|
233 |
+
* @param DUPX_S_R_ITEM[] $list
|
234 |
+
* @return boolean|DUPX_S_R_ITEM[]
|
235 |
+
*/
|
236 |
+
private static function uniqueSearchListItem($list)
|
237 |
+
{
|
238 |
+
$search_strings = array();
|
239 |
+
$result = array();
|
240 |
+
|
241 |
+
if (!is_array($list)) {
|
242 |
+
return false;
|
243 |
+
}
|
244 |
+
|
245 |
+
foreach ($list as $item) {
|
246 |
+
if (!in_array($item->search, $search_strings)) {
|
247 |
+
$result[] = $item;
|
248 |
+
$search_strings[] = $item->search;
|
249 |
+
}
|
250 |
+
}
|
251 |
+
|
252 |
+
return $result;
|
253 |
+
}
|
254 |
+
|
255 |
+
private function __clone()
|
256 |
+
{
|
257 |
+
|
258 |
+
}
|
259 |
+
|
260 |
+
private function __wakeup()
|
261 |
+
{
|
262 |
+
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* search and replace item use in manager to creat the search and replace list.
|
268 |
+
*/
|
269 |
+
class DUPX_S_R_ITEM
|
270 |
+
{
|
271 |
+
private static $uniqueIdCount = 0;
|
272 |
+
|
273 |
+
const TYPE_STRING = 'str';
|
274 |
+
const TYPE_URL = 'url';
|
275 |
+
const TYPE_URL_NORMALIZE_DOMAIN = 'urlnd';
|
276 |
+
const TYPE_PATH = 'path';
|
277 |
+
|
278 |
+
/**
|
279 |
+
*
|
280 |
+
* @var int
|
281 |
+
*/
|
282 |
+
private $id = 0;
|
283 |
+
|
284 |
+
/**
|
285 |
+
*
|
286 |
+
* @var int prority lower first
|
287 |
+
*/
|
288 |
+
public $prority = 10;
|
289 |
+
|
290 |
+
/**
|
291 |
+
*
|
292 |
+
* @var string[] scope list
|
293 |
+
*/
|
294 |
+
public $scope = array();
|
295 |
+
|
296 |
+
/**
|
297 |
+
*
|
298 |
+
* @var string type of string
|
299 |
+
*/
|
300 |
+
public $type = self::TYPE_STRING;
|
301 |
+
|
302 |
+
/**
|
303 |
+
*
|
304 |
+
* @var string search string
|
305 |
+
*/
|
306 |
+
public $search = '';
|
307 |
+
|
308 |
+
/**
|
309 |
+
*
|
310 |
+
* @var string replace string
|
311 |
+
*/
|
312 |
+
public $replace = '';
|
313 |
+
|
314 |
+
/**
|
315 |
+
*
|
316 |
+
* @param string $search
|
317 |
+
* @param string $replace
|
318 |
+
* @param string $type
|
319 |
+
* @param int $prority
|
320 |
+
* @param string|string[] $scope if empty never used
|
321 |
+
*/
|
322 |
+
public function __construct($search, $replace, $type = DUPX_S_R_ITEM::TYPE_STRING, $prority = 10, $scope = array())
|
323 |
+
{
|
324 |
+
if (!is_array($scope)) {
|
325 |
+
$this->scope = empty($scope) ? array() : array((string) $scope);
|
326 |
+
} else {
|
327 |
+
$this->scope = $scope;
|
328 |
+
}
|
329 |
+
$this->prority = (int) $prority;
|
330 |
+
switch ($type) {
|
331 |
+
case DUPX_S_R_ITEM::TYPE_URL:
|
332 |
+
case DUPX_S_R_ITEM::TYPE_URL_NORMALIZE_DOMAIN:
|
333 |
+
$this->search = rtrim($search, '/');
|
334 |
+
$this->replace = rtrim($replace, '/');
|
335 |
+
break;
|
336 |
+
case DUPX_S_R_ITEM::TYPE_PATH:
|
337 |
+
case DUPX_S_R_ITEM::TYPE_STRING:
|
338 |
+
default:
|
339 |
+
$this->search = (string) $search;
|
340 |
+
$this->replace = (string) $replace;
|
341 |
+
break;
|
342 |
+
}
|
343 |
+
$this->type = $type;
|
344 |
+
$this->id = self::$uniqueIdCount;
|
345 |
+
self::$uniqueIdCount ++;
|
346 |
+
}
|
347 |
+
|
348 |
+
public function toArray()
|
349 |
+
{
|
350 |
+
return array(
|
351 |
+
'id' => $this->id,
|
352 |
+
'prority' => $this->prority,
|
353 |
+
'scope' => $this->scope,
|
354 |
+
'type' => $this->type,
|
355 |
+
'search' => $this->search,
|
356 |
+
'replace' => $this->replace
|
357 |
+
);
|
358 |
+
}
|
359 |
+
|
360 |
+
public static function getItemFromArray($array)
|
361 |
+
{
|
362 |
+
$result = new self($array['search'], $array['replace'], $array['type'], $array['prority'], $array['scope']);
|
363 |
+
return $result;
|
364 |
+
}
|
365 |
+
|
366 |
+
/**
|
367 |
+
* return search an replace string
|
368 |
+
*
|
369 |
+
* result
|
370 |
+
* [
|
371 |
+
* ['search' => ...,'replace' => ...]
|
372 |
+
* ['search' => ...,'replace' => ...]
|
373 |
+
* ]
|
374 |
+
*
|
375 |
+
* @return array
|
376 |
+
*/
|
377 |
+
public function getPairsSearchReplace()
|
378 |
+
{
|
379 |
+
switch ($this->type) {
|
380 |
+
case self::TYPE_URL:
|
381 |
+
return self::searchReplaceUrl($this->search, $this->replace);
|
382 |
+
case self::TYPE_URL_NORMALIZE_DOMAIN:
|
383 |
+
return self::searchReplaceUrl($this->search, $this->replace, true, true);
|
384 |
+
case self::TYPE_PATH:
|
385 |
+
return self::searchReplacePath($this->search, $this->replace);
|
386 |
+
case self::TYPE_STRING:
|
387 |
+
default:
|
388 |
+
return self::searchReplaceWithEncodings($this->search, $this->replace);
|
389 |
+
}
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Get search and replace strings with encodings
|
394 |
+
* prevents unnecessary substitution like when search and reaplace are the same.
|
395 |
+
*
|
396 |
+
* result
|
397 |
+
* [
|
398 |
+
* ['search' => ...,'replace' => ...]
|
399 |
+
* ['search' => ...,'replace' => ...]
|
400 |
+
* ]
|
401 |
+
*
|
402 |
+
* @param string $search
|
403 |
+
* @param string $replace
|
404 |
+
* @param bool $json add json encode string
|
405 |
+
* @param bool $urlencode add urlencode string
|
406 |
+
*
|
407 |
+
* @return array pairs search and replace
|
408 |
+
*/
|
409 |
+
public static function searchReplaceWithEncodings($search, $replace, $json = true, $urlencode = true)
|
410 |
+
{
|
411 |
+
$result = array();
|
412 |
+
if ($search != $replace) {
|
413 |
+
$result[] = array('search' => $search, 'replace' => $replace);
|
414 |
+
} else {
|
415 |
+
return array();
|
416 |
+
}
|
417 |
+
|
418 |
+
// JSON ENCODE
|
419 |
+
if ($json) {
|
420 |
+
$search_json = str_replace('"', "", json_encode($search));
|
421 |
+
$replace_json = str_replace('"', "", json_encode($replace));
|
422 |
+
|
423 |
+
if ($search != $search_json && $search_json != $replace_json) {
|
424 |
+
$result[] = array('search' => $search_json, 'replace' => $replace_json);
|
425 |
+
}
|
426 |
+
}
|
427 |
+
|
428 |
+
// URL ENCODE
|
429 |
+
if ($urlencode) {
|
430 |
+
$search_urlencode = urlencode($search);
|
431 |
+
$replace_urlencode = urlencode($replace);
|
432 |
+
|
433 |
+
if ($search != $search_urlencode && $search_urlencode != $replace_urlencode) {
|
434 |
+
$result[] = array('search' => $search_urlencode, 'replace' => $replace_urlencode);
|
435 |
+
}
|
436 |
+
}
|
437 |
+
|
438 |
+
return $result;
|
439 |
+
}
|
440 |
+
|
441 |
+
/**
|
442 |
+
* Add replace strings to substitute old url to new url
|
443 |
+
* 1) no protocol old url to no protocol new url (es. //www.hold.url => //www.new.url)
|
444 |
+
* 2) wrong protocol new url to right protocol new url (es. http://www.new.url => https://www.new.url)
|
445 |
+
*
|
446 |
+
* result
|
447 |
+
* [
|
448 |
+
* ['search' => ...,'replace' => ...]
|
449 |
+
* ['search' => ...,'replace' => ...]
|
450 |
+
* ]
|
451 |
+
*
|
452 |
+
* @param string $search_url
|
453 |
+
* @param string $replace_url
|
454 |
+
* @param bool $force_new_protocol if true force http or https protocol (work only if replace url have http or https scheme)
|
455 |
+
*
|
456 |
+
* @return array
|
457 |
+
*/
|
458 |
+
public static function searchReplaceUrl($search_url, $replace_url, $force_new_protocol = true, $normalizeWww = false)
|
459 |
+
{
|
460 |
+
if (($parse_search_url = parse_url($search_url)) !== false && isset($parse_search_url['scheme'])) {
|
461 |
+
$search_url_raw = substr($search_url, strlen($parse_search_url['scheme']) + 1);
|
462 |
+
} else {
|
463 |
+
$search_url_raw = $search_url;
|
464 |
+
}
|
465 |
+
|
466 |
+
if (($parse_replace_url = parse_url($replace_url)) !== false && isset($parse_replace_url['scheme'])) {
|
467 |
+
$replace_url_raw = substr($replace_url, strlen($parse_replace_url['scheme']) + 1);
|
468 |
+
} else {
|
469 |
+
$replace_url_raw = $replace_url;
|
470 |
+
}
|
471 |
+
//SEARCH WITH NO PROTOCOL: RAW "//"
|
472 |
+
$result = self::searchReplaceWithEncodings($search_url_raw, $replace_url_raw);
|
473 |
+
|
474 |
+
// NORMALIZE source www
|
475 |
+
if ($normalizeWww && self::domainCanNormalized($search_url_raw)) {
|
476 |
+
if (self::isWww($search_url_raw)) {
|
477 |
+
$fromDomain = '//'.substr($search_url_raw , strlen('//www.'));
|
478 |
+
} else {
|
479 |
+
$fromDomain = '//www.'.substr($search_url_raw , strlen('//'));
|
480 |
+
}
|
481 |
+
|
482 |
+
// prevent double subsition for subdiv problems.
|
483 |
+
if (strpos($replace_url_raw, $fromDomain) !== 0) {
|
484 |
+
$result = array_merge($result, self::searchReplaceWithEncodings($fromDomain, $replace_url_raw));
|
485 |
+
}
|
486 |
+
}
|
487 |
+
|
488 |
+
// NORMALIZE source protocol
|
489 |
+
if ($force_new_protocol && $parse_replace_url !== false && isset($parse_replace_url['scheme'])) {
|
490 |
+
//FORCE NEW PROTOCOL [HTTP / HTTPS]
|
491 |
+
switch ($parse_replace_url['scheme']) {
|
492 |
+
case 'http':
|
493 |
+
$replace_url_wrong_protocol = 'https:'.$replace_url_raw;
|
494 |
+
break;
|
495 |
+
case 'https':
|
496 |
+
$replace_url_wrong_protocol = 'http:'.$replace_url_raw;
|
497 |
+
break;
|
498 |
+
default:
|
499 |
+
$replace_url_wrong_protocol = '';
|
500 |
+
break;
|
501 |
+
}
|
502 |
+
|
503 |
+
if (!empty($replace_url_wrong_protocol)) {
|
504 |
+
$result = array_merge($result, self::searchReplaceWithEncodings($replace_url_wrong_protocol, $replace_url));
|
505 |
+
}
|
506 |
+
}
|
507 |
+
|
508 |
+
return $result;
|
509 |
+
}
|
510 |
+
|
511 |
+
/**
|
512 |
+
* result
|
513 |
+
* [
|
514 |
+
* ['search' => ...,'replace' => ...]
|
515 |
+
* ['search' => ...,'replace' => ...]
|
516 |
+
* ]
|
517 |
+
*
|
518 |
+
* @param string $search_path
|
519 |
+
* @param string $replace_path
|
520 |
+
*
|
521 |
+
* @return array
|
522 |
+
*/
|
523 |
+
public static function searchReplacePath($search_path, $replace_path)
|
524 |
+
{
|
525 |
+
$result = self::searchReplaceWithEncodings($search_path, $replace_path);
|
526 |
+
|
527 |
+
$search_path_unsetSafe = rtrim(DUPX_U::unsetSafePath($search_path), '\\');
|
528 |
+
$replace_path_unsetSafe = rtrim($replace_path, '/');
|
529 |
+
$result = array_merge($result, self::searchReplaceWithEncodings($search_path_unsetSafe, $replace_path_unsetSafe));
|
530 |
+
|
531 |
+
return $result;
|
532 |
+
}
|
533 |
+
|
534 |
+
/**
|
535 |
+
* get unique item id
|
536 |
+
*
|
537 |
+
* @return int
|
538 |
+
*/
|
539 |
+
public function getId()
|
540 |
+
{
|
541 |
+
return $this->id;
|
542 |
+
}
|
543 |
+
|
544 |
+
/**
|
545 |
+
* @param $url string The URL whichs domain you want to get
|
546 |
+
* @return string The domain part of the given URL
|
547 |
+
* www.myurl.co.uk => myurl.co.uk
|
548 |
+
* www.google.com => google.com
|
549 |
+
* my.test.myurl.co.uk => myurl.co.uk
|
550 |
+
* www.myurl.localweb => myurl.localweb
|
551 |
+
*
|
552 |
+
*/
|
553 |
+
public static function getDomain($url)
|
554 |
+
{
|
555 |
+
$pieces = parse_url($url);
|
556 |
+
$domain = isset($pieces['host']) ? $pieces['host'] : '';
|
557 |
+
$regs = null;
|
558 |
+
if (strpos($domain, ".") !== false) {
|
559 |
+
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
|
560 |
+
return $regs['domain'];
|
561 |
+
} else {
|
562 |
+
$exDomain = explode('.', $domain);
|
563 |
+
return implode('.', array_slice($exDomain, -2, 2));
|
564 |
+
}
|
565 |
+
} else {
|
566 |
+
return $domain;
|
567 |
+
}
|
568 |
+
}
|
569 |
+
|
570 |
+
public static function domainCanNormalized($url)
|
571 |
+
{
|
572 |
+
$pieces = parse_url($url);
|
573 |
+
|
574 |
+
if (!isset($pieces['host'])) {
|
575 |
+
return false;
|
576 |
+
}
|
577 |
+
|
578 |
+
if (strpos($pieces['host'], ".") === false) {
|
579 |
+
return false;
|
580 |
+
}
|
581 |
+
|
582 |
+
$dLevels = explode('.', $pieces['host']);
|
583 |
+
if ($dLevels[0] == 'www') {
|
584 |
+
return true;
|
585 |
+
}
|
586 |
+
|
587 |
+
switch (count($dLevels)) {
|
588 |
+
case 1:
|
589 |
+
return false;
|
590 |
+
case 2:
|
591 |
+
return true;
|
592 |
+
case 3:
|
593 |
+
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $pieces['host'], $regs)) {
|
594 |
+
return $regs['domain'] == $pieces['host'];
|
595 |
+
}
|
596 |
+
return false;
|
597 |
+
default:
|
598 |
+
return false;
|
599 |
+
}
|
600 |
+
}
|
601 |
+
|
602 |
+
public static function isWww($url)
|
603 |
+
{
|
604 |
+
$pieces = parse_url($url);
|
605 |
+
if (!isset($pieces['host'])) {
|
606 |
+
return false;
|
607 |
+
} else {
|
608 |
+
return strpos($pieces['host'], 'www.') === 0;
|
609 |
+
}
|
610 |
+
}
|
611 |
}
|
installer/dup-installer/favicon/browserconfig.xml
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
<?xml version="1.0" encoding="utf-8"?>
|
2 |
-
<browserconfig>
|
3 |
-
<msapplication>
|
4 |
-
<tile>
|
5 |
-
<square150x150logo src="/dup-installer/favicon/lite01_mstile-150x150.png"/>
|
6 |
-
<TileColor>#00aba9</TileColor>
|
7 |
-
</tile>
|
8 |
-
</msapplication>
|
9 |
-
</browserconfig>
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<browserconfig>
|
3 |
+
<msapplication>
|
4 |
+
<tile>
|
5 |
+
<square150x150logo src="/dup-installer/favicon/lite01_mstile-150x150.png"/>
|
6 |
+
<TileColor>#00aba9</TileColor>
|
7 |
+
</tile>
|
8 |
+
</msapplication>
|
9 |
+
</browserconfig>
|
installer/dup-installer/favicon/lite01_safari-pinned-tab.svg
CHANGED
@@ -1,42 +1,42 @@
|
|
1 |
-
<?xml version="1.0" standalone="no"?>
|
2 |
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
-
width="256.000000pt" height="256.000000pt" viewBox="0 0 256.000000 256.000000"
|
6 |
-
preserveAspectRatio="xMidYMid meet">
|
7 |
-
<metadata>
|
8 |
-
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
9 |
-
</metadata>
|
10 |
-
<g transform="translate(0.000000,256.000000) scale(0.100000,-0.100000)"
|
11 |
-
fill="#000000" stroke="none">
|
12 |
-
<path d="M945 2506 c-38 -11 -72 -21 -74 -23 -4 -3 -10 -69 -16 -163 -1 -30
|
13 |
-
-3 -63 -4 -72 0 -9 -11 -20 -23 -24 -12 -3 -50 -24 -85 -45 -35 -22 -67 -39
|
14 |
-
-72 -39 -5 0 -53 23 -107 50 -54 28 -103 50 -108 50 -6 0 -38 -28 -73 -62
|
15 |
-
l-62 -61 56 -111 c43 -86 53 -113 44 -126 -6 -8 -29 -48 -52 -87 -22 -40 -46
|
16 |
-
-73 -52 -74 -7 0 -23 -2 -37 -4 -14 -2 -62 -4 -108 -5 -45 -2 -85 -7 -89 -13
|
17 |
-
-4 -6 -16 -46 -28 -89 -26 -90 -35 -75 94 -159 l86 -56 0 -105 1 -105 -103
|
18 |
-
-68 c-113 -75 -109 -65 -77 -160 8 -22 14 -48 14 -57 0 -26 12 -29 123 -34 56
|
19 |
-
-3 107 -7 114 -9 7 -2 20 28 33 78 12 45 28 103 36 128 8 25 16 56 19 68 2 12
|
20 |
-
7 31 10 42 4 11 7 57 7 102 0 286 134 547 367 719 59 43 193 106 277 130 67
|
21 |
-
19 102 23 229 22 133 -1 160 -4 238 -27 49 -15 107 -37 129 -48 l41 -21 -586
|
22 |
-
-586 c-322 -322 -588 -584 -590 -582 -3 3 -8 50 -11 105 -8 110 -17 199 -20
|
23 |
-
202 -1 2 -44 -150 -95 -336 -51 -187 -99 -361 -107 -387 l-14 -48 41 39 c23
|
24 |
-
22 401 399 840 838 l799 799 -37 27 c-21 15 -69 46 -108 69 -96 57 -95 55 -96
|
25 |
-
120 0 88 -8 165 -16 172 -7 6 -75 26 -155 45 -12 2 -35 -25 -83 -98 l-68 -102
|
26 |
-
-103 1 c-58 1 -106 3 -108 5 -2 2 -31 48 -65 101 -41 63 -68 96 -79 95 -9 -1
|
27 |
-
-48 -10 -87 -21z"/>
|
28 |
-
<path d="M1452 1307 l-833 -833 23 -20 c26 -24 154 -104 165 -104 5 0 17 -7
|
29 |
-
27 -15 20 -15 23 -31 26 -157 2 -42 6 -81 10 -88 4 -6 45 -22 91 -34 l84 -23
|
30 |
-
67 101 68 101 102 0 103 0 64 -95 c35 -52 66 -98 70 -102 8 -10 170 35 179 49
|
31 |
-
4 6 9 58 10 114 4 104 12 139 35 139 7 0 44 20 82 44 l70 43 104 -54 c57 -29
|
32 |
-
108 -53 112 -53 5 0 37 28 73 62 l64 62 -55 111 -56 112 47 76 c25 42 46 81
|
33 |
-
46 87 0 5 3 10 8 11 30 3 89 8 161 13 46 3 85 6 86 8 5 5 45 154 45 166 0 7
|
34 |
-
-45 42 -100 78 l-100 67 0 102 0 102 104 69 103 68 -23 84 c-13 47 -25 87 -28
|
35 |
-
89 -2 3 -35 7 -73 9 -37 3 -89 6 -115 8 l-48 3 -19 -66 c-61 -206 -74 -269
|
36 |
-
-76 -366 -4 -126 -9 -158 -47 -272 -84 -255 -290 -461 -548 -546 -100 -33
|
37 |
-
-126 -38 -250 -42 -113 -5 -226 14 -338 55 -116 43 -166 -22 492 636 322 323
|
38 |
-
587 583 587 578 1 -5 2 -22 4 -39 5 -59 17 -191 20 -230 2 -22 4 -42 5 -45 1
|
39 |
-
-4 73 244 85 295 11 49 25 101 70 259 45 164 58 216 53 216 -2 0 -378 -375
|
40 |
-
-836 -833z"/>
|
41 |
-
</g>
|
42 |
-
</svg>
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
+
width="256.000000pt" height="256.000000pt" viewBox="0 0 256.000000 256.000000"
|
6 |
+
preserveAspectRatio="xMidYMid meet">
|
7 |
+
<metadata>
|
8 |
+
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
9 |
+
</metadata>
|
10 |
+
<g transform="translate(0.000000,256.000000) scale(0.100000,-0.100000)"
|
11 |
+
fill="#000000" stroke="none">
|
12 |
+
<path d="M945 2506 c-38 -11 -72 -21 -74 -23 -4 -3 -10 -69 -16 -163 -1 -30
|
13 |
+
-3 -63 -4 -72 0 -9 -11 -20 -23 -24 -12 -3 -50 -24 -85 -45 -35 -22 -67 -39
|
14 |
+
-72 -39 -5 0 -53 23 -107 50 -54 28 -103 50 -108 50 -6 0 -38 -28 -73 -62
|
15 |
+
l-62 -61 56 -111 c43 -86 53 -113 44 -126 -6 -8 -29 -48 -52 -87 -22 -40 -46
|
16 |
+
-73 -52 -74 -7 0 -23 -2 -37 -4 -14 -2 -62 -4 -108 -5 -45 -2 -85 -7 -89 -13
|
17 |
+
-4 -6 -16 -46 -28 -89 -26 -90 -35 -75 94 -159 l86 -56 0 -105 1 -105 -103
|
18 |
+
-68 c-113 -75 -109 -65 -77 -160 8 -22 14 -48 14 -57 0 -26 12 -29 123 -34 56
|
19 |
+
-3 107 -7 114 -9 7 -2 20 28 33 78 12 45 28 103 36 128 8 25 16 56 19 68 2 12
|
20 |
+
7 31 10 42 4 11 7 57 7 102 0 286 134 547 367 719 59 43 193 106 277 130 67
|
21 |
+
19 102 23 229 22 133 -1 160 -4 238 -27 49 -15 107 -37 129 -48 l41 -21 -586
|
22 |
+
-586 c-322 -322 -588 -584 -590 -582 -3 3 -8 50 -11 105 -8 110 -17 199 -20
|
23 |
+
202 -1 2 -44 -150 -95 -336 -51 -187 -99 -361 -107 -387 l-14 -48 41 39 c23
|
24 |
+
22 401 399 840 838 l799 799 -37 27 c-21 15 -69 46 -108 69 -96 57 -95 55 -96
|
25 |
+
120 0 88 -8 165 -16 172 -7 6 -75 26 -155 45 -12 2 -35 -25 -83 -98 l-68 -102
|
26 |
+
-103 1 c-58 1 -106 3 -108 5 -2 2 -31 48 -65 101 -41 63 -68 96 -79 95 -9 -1
|
27 |
+
-48 -10 -87 -21z"/>
|
28 |
+
<path d="M1452 1307 l-833 -833 23 -20 c26 -24 154 -104 165 -104 5 0 17 -7
|
29 |
+
27 -15 20 -15 23 -31 26 -157 2 -42 6 -81 10 -88 4 -6 45 -22 91 -34 l84 -23
|
30 |
+
67 101 68 101 102 0 103 0 64 -95 c35 -52 66 -98 70 -102 8 -10 170 35 179 49
|
31 |
+
4 6 9 58 10 114 4 104 12 139 35 139 7 0 44 20 82 44 l70 43 104 -54 c57 -29
|
32 |
+
108 -53 112 -53 5 0 37 28 73 62 l64 62 -55 111 -56 112 47 76 c25 42 46 81
|
33 |
+
46 87 0 5 3 10 8 11 30 3 89 8 161 13 46 3 85 6 86 8 5 5 45 154 45 166 0 7
|
34 |
+
-45 42 -100 78 l-100 67 0 102 0 102 104 69 103 68 -23 84 c-13 47 -25 87 -28
|
35 |
+
89 -2 3 -35 7 -73 9 -37 3 -89 6 -115 8 l-48 3 -19 -66 c-61 -206 -74 -269
|
36 |
+
-76 -366 -4 -126 -9 -158 -47 -272 -84 -255 -290 -461 -548 -546 -100 -33
|
37 |
+
-126 -38 -250 -42 -113 -5 -226 14 -338 55 -116 43 -166 -22 492 636 322 323
|
38 |
+
587 583 587 578 1 -5 2 -22 4 -39 5 -59 17 -191 20 -230 2 -22 4 -42 5 -45 1
|
39 |
+
-4 73 244 85 295 11 49 25 101 70 259 45 164 58 216 53 216 -2 0 -378 -375
|
40 |
+
-836 -833z"/>
|
41 |
+
</g>
|
42 |
+
</svg>
|
installer/dup-installer/favicon/site.webmanifest
CHANGED
@@ -1,19 +1,19 @@
|
|
1 |
-
{
|
2 |
-
"name": "",
|
3 |
-
"short_name": "",
|
4 |
-
"icons": [
|
5 |
-
{
|
6 |
-
"src": "/dup-installer/favicon/lite01_android-chrome-192x192.png",
|
7 |
-
"sizes": "192x192",
|
8 |
-
"type": "image/png"
|
9 |
-
},
|
10 |
-
{
|
11 |
-
"src": "/dup-installer/favicon/lite01_android-chrome-256x256.png",
|
12 |
-
"sizes": "256x256",
|
13 |
-
"type": "image/png"
|
14 |
-
}
|
15 |
-
],
|
16 |
-
"theme_color": "#ffffff",
|
17 |
-
"background_color": "#ffffff",
|
18 |
-
"display": "standalone"
|
19 |
-
}
|
1 |
+
{
|
2 |
+
"name": "",
|
3 |
+
"short_name": "",
|
4 |
+
"icons": [
|
5 |
+
{
|
6 |
+
"src": "/dup-installer/favicon/lite01_android-chrome-192x192.png",
|
7 |
+
"sizes": "192x192",
|
8 |
+
"type": "image/png"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"src": "/dup-installer/favicon/lite01_android-chrome-256x256.png",
|
12 |
+
"sizes": "256x256",
|
13 |
+
"type": "image/png"
|
14 |
+
}
|
15 |
+
],
|
16 |
+
"theme_color": "#ffffff",
|
17 |
+
"background_color": "#ffffff",
|
18 |
+
"display": "standalone"
|
19 |
+
}
|
installer/dup-installer/views/view.exception.php
CHANGED
@@ -1,39 +1,39 @@
|
|
1 |
-
<?php
|
2 |
-
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
-
$log_link = './'.$GLOBALS["LOG_FILE_NAME"];
|
4 |
-
$attr_log_link = DUPX_U::esc_attr($log_link);
|
5 |
-
?>
|
6 |
-
<div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
|
7 |
-
<div class="hdr-main">
|
8 |
-
Exception error
|
9 |
-
</div><br/>
|
10 |
-
<div id="ajaxerr-data">
|
11 |
-
<b style="color:#B80000;">INSTALL ERROR!</b>
|
12 |
-
<p>
|
13 |
-
Message: <b><?php echo DUPX_U::esc_html($exceptionError->getMessage()); ?></b><br>
|
14 |
-
Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.
|
15 |
-
<?php
|
16 |
-
if ($exceptionError instanceof DupxException) {
|
17 |
-
if ($exceptionError->haveFaqLink()) {
|
18 |
-
?>
|
19 |
-
<br>
|
20 |
-
See FAQ: <a href="<?php echo $exceptionError->getFaqLinkUrl (); ?>" ><?php echo $exceptionError->getFaqLinkLabel(); ?></a>
|
21 |
-
|
22 |
-
<?php
|
23 |
-
}
|
24 |
-
if (strlen($longMsg = $exceptionError->getLongMsg())) {
|
25 |
-
echo '<br><br>'.$longMsg;
|
26 |
-
}
|
27 |
-
}
|
28 |
-
?>
|
29 |
-
</p>
|
30 |
-
<hr>
|
31 |
-
Trace:
|
32 |
-
<pre class="exception-trace"><?php
|
33 |
-
echo $exceptionError->getTraceAsString();
|
34 |
-
?></pre>
|
35 |
-
</div>
|
36 |
-
<div style="text-align:center; margin:10px auto 0px auto">
|
37 |
-
<!--<input type="button" class="default-btn" onclick="DUPX.hideErrorResult()" value="« Try Again" /><br/><br/>-->
|
38 |
-
<i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/ticket' target='_blank'>snapcreek.com</a></i>
|
39 |
-
</div>
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
|
3 |
+
$log_link = './'.$GLOBALS["LOG_FILE_NAME"];
|
4 |
+
$attr_log_link = DUPX_U::esc_attr($log_link);
|
5 |
+
?>
|
6 |
+
<div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
|
7 |
+
<div class="hdr-main">
|
8 |
+
Exception error
|
9 |
+
</div><br/>
|
10 |
+
<div id="ajaxerr-data">
|
11 |
+
<b style="color:#B80000;">INSTALL ERROR!</b>
|
12 |
+
<p>
|
13 |
+
Message: <b><?php echo DUPX_U::esc_html($exceptionError->getMessage()); ?></b><br>
|
14 |
+
Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.
|
15 |
+
<?php
|
16 |
+
if ($exceptionError instanceof DupxException) {
|
17 |
+
if ($exceptionError->haveFaqLink()) {
|
18 |
+
?>
|
19 |
+
<br>
|
20 |
+
See FAQ: <a href="<?php echo $exceptionError->getFaqLinkUrl (); ?>" ><?php echo $exceptionError->getFaqLinkLabel(); ?></a>
|
21 |
+
|
22 |
+
<?php
|
23 |
+
}
|
24 |
+
if (strlen($longMsg = $exceptionError->getLongMsg())) {
|
25 |
+
echo '<br><br>'.$longMsg;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
?>
|
29 |
+
</p>
|
30 |
+
<hr>
|
31 |
+
Trace:
|
32 |
+
<pre class="exception-trace"><?php
|
33 |
+
echo $exceptionError->getTraceAsString();
|
34 |
+
?></pre>
|
35 |
+
</div>
|
36 |
+
<div style="text-align:center; margin:10px auto 0px auto">
|
37 |
+
<!--<input type="button" class="default-btn" onclick="DUPX.hideErrorResult()" value="« Try Again" /><br/><br/>-->
|
38 |
+
<i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/ticket' target='_blank'>snapcreek.com</a></i>
|
39 |
+
</div>
|
languages/duplicator-en_US.po
CHANGED
@@ -1,3856 +1,3856 @@
|
|
1 |
-
# Copyright (C) 2019 Snap Creek
|
2 |
-
# This file is distributed under the same license as the Duplicator plugin.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: Duplicator 1.3.7\n"
|
6 |
-
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
|
7 |
-
"Language-Team: \n"
|
8 |
-
"MIME-Version: 1.0\n"
|
9 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
-
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"POT-Creation-Date: 2019-09-02 12:30+0530\n"
|
12 |
-
"PO-Revision-Date: 2019-09-02 12:45+0530\n"
|
13 |
-
"X-Generator: Poedit 2.2.3\n"
|
14 |
-
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;"
|
15 |
-
"esc_attr__\n"
|
16 |
-
"X-Poedit-Basepath: ..\n"
|
17 |
-
"Last-Translator: \n"
|
18 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
-
"Language: en_US\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
|
22 |
-
#: classes/class.logging.php:141
|
23 |
-
msgid "No Log"
|
24 |
-
msgstr ""
|
25 |
-
|
26 |
-
#: classes/class.server.php:207
|
27 |
-
msgid "(directory)"
|
28 |
-
msgstr ""
|
29 |
-
|
30 |
-
#: classes/package/class.pack.database.php:663
|
31 |
-
msgid "Please contact your DataBase administrator to fix the error."
|
32 |
-
msgstr ""
|
33 |
-
|
34 |
-
#: classes/package/class.pack.installer.php:90
|
35 |
-
msgid "Error reading DupArchive mini expander"
|
36 |
-
msgstr ""
|
37 |
-
|
38 |
-
#: classes/package/class.pack.installer.php:103
|
39 |
-
msgid "Error writing installer contents"
|
40 |
-
msgstr ""
|
41 |
-
|
42 |
-
#: classes/package/class.pack.php:309
|
43 |
-
msgid "Package name can't be empty"
|
44 |
-
msgstr ""
|
45 |
-
|
46 |
-
#: classes/package/class.pack.php:315
|
47 |
-
#, php-format
|
48 |
-
msgid "Directories: <b>%1$s</b> isn't a valid path"
|
49 |
-
msgstr ""
|
50 |
-
|
51 |
-
#: classes/package/class.pack.php:321
|
52 |
-
#, php-format
|
53 |
-
msgid "File extension: <b>%1$s</b> isn't a valid extension"
|
54 |
-
msgstr ""
|
55 |
-
|
56 |
-
#: classes/package/class.pack.php:327
|
57 |
-
#, php-format
|
58 |
-
msgid "Files: <b>%1$s</b> isn't a valid file name"
|
59 |
-
msgstr ""
|
60 |
-
|
61 |
-
#: classes/package/class.pack.php:335
|
62 |
-
#, php-format
|
63 |
-
msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
|
64 |
-
msgstr ""
|
65 |
-
|
66 |
-
#: classes/package/class.pack.php:346
|
67 |
-
#, php-format
|
68 |
-
msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
|
69 |
-
msgstr ""
|
70 |
-
|
71 |
-
#: classes/package/class.pack.php:845
|
72 |
-
#, php-format
|
73 |
-
msgid ""
|
74 |
-
"Can't find Scanfile %s. Please ensure there no non-English characters in the "
|
75 |
-
"package or schedule name."
|
76 |
-
msgstr ""
|
77 |
-
|
78 |
-
#: classes/package/class.pack.php:868
|
79 |
-
#, php-format
|
80 |
-
msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
|
81 |
-
msgstr ""
|
82 |
-
|
83 |
-
#: classes/package/class.pack.php:869
|
84 |
-
#, php-format
|
85 |
-
msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
|
86 |
-
msgstr ""
|
87 |
-
|
88 |
-
#: classes/package/class.pack.php:913
|
89 |
-
#, php-format
|
90 |
-
msgid "ERROR: Cannot open created archive. Error code = %1$s"
|
91 |
-
msgstr ""
|
92 |
-
|
93 |
-
#: classes/package/class.pack.php:918
|
94 |
-
msgid "ERROR: Archive is not valid zip archive."
|
95 |
-
msgstr ""
|
96 |
-
|
97 |
-
#: classes/package/class.pack.php:922
|
98 |
-
msgid "ERROR: Archive doesn't pass consistency check."
|
99 |
-
msgstr ""
|
100 |
-
|
101 |
-
#: classes/package/class.pack.php:927
|
102 |
-
msgid "ERROR: Archive checksum is bad."
|
103 |
-
msgstr ""
|
104 |
-
|
105 |
-
#: classes/package/class.pack.php:938
|
106 |
-
msgid "ARCHIVE CONSISTENCY TEST: Pass"
|
107 |
-
msgstr ""
|
108 |
-
|
109 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:44
|
110 |
-
msgid ""
|
111 |
-
"Package build appears stuck so marking package as failed. Is the Max Worker "
|
112 |
-
"Time set too high?."
|
113 |
-
msgstr ""
|
114 |
-
|
115 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:45
|
116 |
-
msgid "Build Failure"
|
117 |
-
msgstr ""
|
118 |
-
|
119 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:83
|
120 |
-
msgid "Click on \"Resolve This\" button to fix the JSON settings."
|
121 |
-
msgstr ""
|
122 |
-
|
123 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:95
|
124 |
-
#, php-format
|
125 |
-
msgid ""
|
126 |
-
"ERROR: Can't find Scanfile %s. Please ensure there no non-English characters "
|
127 |
-
"in the package or schedule name."
|
128 |
-
msgstr ""
|
129 |
-
|
130 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:214
|
131 |
-
msgid "Problem adding items to archive."
|
132 |
-
msgstr ""
|
133 |
-
|
134 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:216
|
135 |
-
msgid "Problems adding items to archive."
|
136 |
-
msgstr ""
|
137 |
-
|
138 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:314
|
139 |
-
msgid "Critical failure present in validation"
|
140 |
-
msgstr ""
|
141 |
-
|
142 |
-
#: classes/ui/class.ui.dialog.php:95
|
143 |
-
msgid "Processing please wait..."
|
144 |
-
msgstr ""
|
145 |
-
|
146 |
-
#: classes/ui/class.ui.dialog.php:98
|
147 |
-
msgid "OK"
|
148 |
-
msgstr ""
|
149 |
-
|
150 |
-
#: classes/ui/class.ui.dialog.php:99 deactivation.php:135
|
151 |
-
msgid "Cancel"
|
152 |
-
msgstr ""
|
153 |
-
|
154 |
-
#: classes/ui/class.ui.notice.php:47
|
155 |
-
msgid "Safe Mode:"
|
156 |
-
msgstr ""
|
157 |
-
|
158 |
-
#: classes/ui/class.ui.notice.php:48
|
159 |
-
msgid ""
|
160 |
-
"During the install safe mode was enabled deactivating all plugins.<br/> "
|
161 |
-
"Please be sure to "
|
162 |
-
msgstr ""
|
163 |
-
|
164 |
-
#: classes/ui/class.ui.notice.php:49
|
165 |
-
msgid "re-activate the plugins"
|
166 |
-
msgstr ""
|
167 |
-
|
168 |
-
#: classes/ui/class.ui.notice.php:56
|
169 |
-
#: views/tools/diagnostics/information.php:158
|
170 |
-
msgid "This site has been successfully migrated!"
|
171 |
-
msgstr ""
|
172 |
-
|
173 |
-
#: classes/ui/class.ui.notice.php:57
|
174 |
-
msgid "Final step(s):"
|
175 |
-
msgstr ""
|
176 |
-
|
177 |
-
#: classes/ui/class.ui.notice.php:58
|
178 |
-
msgid ""
|
179 |
-
"This message will be removed after all installer files are removed. "
|
180 |
-
"Installer files must be removed to maintain a secure site. Click the link "
|
181 |
-
"above or button below to remove all installer files and complete the "
|
182 |
-
"migration."
|
183 |
-
msgstr ""
|
184 |
-
|
185 |
-
#: classes/ui/class.ui.notice.php:62
|
186 |
-
msgid "Remove Installation Files Now!"
|
187 |
-
msgstr ""
|
188 |
-
|
189 |
-
#: classes/ui/class.ui.notice.php:63
|
190 |
-
msgid "Optionally, Review Duplicator at WordPress.org..."
|
191 |
-
msgstr ""
|
192 |
-
|
193 |
-
#: classes/ui/class.ui.notice.php:69
|
194 |
-
msgid "Migration Almost Complete!"
|
195 |
-
msgstr ""
|
196 |
-
|
197 |
-
#: classes/ui/class.ui.notice.php:70
|
198 |
-
msgid ""
|
199 |
-
"Reserved Duplicator installation files have been detected in the root "
|
200 |
-
"directory. Please delete these installation files to avoid security issues. "
|
201 |
-
"<br/> Go to:Duplicator > Tools > Information >Stored Data and click the "
|
202 |
-
"\"Remove Installation Files\" button"
|
203 |
-
msgstr ""
|
204 |
-
|
205 |
-
#: classes/ui/class.ui.notice.php:76
|
206 |
-
msgid "Take me there now!"
|
207 |
-
msgstr ""
|
208 |
-
|
209 |
-
#: classes/ui/class.ui.notice.php:91
|
210 |
-
msgid "Redirecting Please Wait..."
|
211 |
-
msgstr ""
|
212 |
-
|
213 |
-
#: classes/ui/class.ui.notice.php:94
|
214 |
-
msgid "Invalid token permissions to perform this request."
|
215 |
-
msgstr ""
|
216 |
-
|
217 |
-
#: classes/ui/class.ui.notice.php:117
|
218 |
-
#, php-format
|
219 |
-
msgid "Activate %s"
|
220 |
-
msgstr ""
|
221 |
-
|
222 |
-
#: classes/ui/class.ui.screen.base.php:44
|
223 |
-
msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
|
224 |
-
msgstr ""
|
225 |
-
|
226 |
-
#: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
|
227 |
-
#: views/tools/diagnostics/main.php:45
|
228 |
-
msgid "Support"
|
229 |
-
msgstr ""
|
230 |
-
|
231 |
-
#: classes/ui/class.ui.screen.base.php:65
|
232 |
-
msgid "Resources"
|
233 |
-
msgstr ""
|
234 |
-
|
235 |
-
#: classes/ui/class.ui.screen.base.php:66
|
236 |
-
msgid "Knowledge Base"
|
237 |
-
msgstr ""
|
238 |
-
|
239 |
-
#: classes/ui/class.ui.screen.base.php:67
|
240 |
-
msgid "Full User Guide"
|
241 |
-
msgstr ""
|
242 |
-
|
243 |
-
#: classes/ui/class.ui.screen.base.php:68
|
244 |
-
msgid "Technical FAQs"
|
245 |
-
msgstr ""
|
246 |
-
|
247 |
-
#: classes/ui/class.ui.screen.base.php:69
|
248 |
-
msgid "Package Settings"
|
249 |
-
msgstr ""
|
250 |
-
|
251 |
-
#: classes/utilities/class.u.php:64
|
252 |
-
msgid "32-bit"
|
253 |
-
msgstr ""
|
254 |
-
|
255 |
-
#: classes/utilities/class.u.php:67
|
256 |
-
msgid "64-bit"
|
257 |
-
msgstr ""
|
258 |
-
|
259 |
-
#: classes/utilities/class.u.php:70
|
260 |
-
msgid "Unknown"
|
261 |
-
msgstr ""
|
262 |
-
|
263 |
-
#: classes/utilities/class.u.php:496
|
264 |
-
msgid "You do not have sufficient permissions to access this page."
|
265 |
-
msgstr ""
|
266 |
-
|
267 |
-
#: ctrls/ctrl.package.php:175
|
268 |
-
msgid "Error building DupArchive package"
|
269 |
-
msgstr ""
|
270 |
-
|
271 |
-
#: ctrls/ctrl.package.php:303
|
272 |
-
msgid ""
|
273 |
-
"An unathorized security request was made to this page. Please try again!"
|
274 |
-
msgstr ""
|
275 |
-
|
276 |
-
#: ctrls/ctrl.package.php:325
|
277 |
-
msgid "Active package object error"
|
278 |
-
msgstr ""
|
279 |
-
|
280 |
-
#: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
|
281 |
-
msgid "Couldn't find a local copy of the file requested."
|
282 |
-
msgstr ""
|
283 |
-
|
284 |
-
#: deactivation.php:48
|
285 |
-
msgid "Need help? We are ready to answer your questions."
|
286 |
-
msgstr ""
|
287 |
-
|
288 |
-
#: deactivation.php:48
|
289 |
-
msgid "Contact Support"
|
290 |
-
msgstr ""
|
291 |
-
|
292 |
-
#: deactivation.php:53
|
293 |
-
msgid "It's not working on my server."
|
294 |
-
msgstr ""
|
295 |
-
|
296 |
-
#: deactivation.php:55
|
297 |
-
msgid "Kindly share what didn't work so we can fix it in future updates..."
|
298 |
-
msgstr ""
|
299 |
-
|
300 |
-
#: deactivation.php:60
|
301 |
-
msgid "It's too confusing to understand."
|
302 |
-
msgstr ""
|
303 |
-
|
304 |
-
#: deactivation.php:62
|
305 |
-
msgid "Please tell us what is not clear so that we can improve it."
|
306 |
-
msgstr ""
|
307 |
-
|
308 |
-
#: deactivation.php:67
|
309 |
-
msgid "I found a different plugin that I like better."
|
310 |
-
msgstr ""
|
311 |
-
|
312 |
-
#: deactivation.php:69
|
313 |
-
msgid "What's the plugin name?"
|
314 |
-
msgstr ""
|
315 |
-
|
316 |
-
#: deactivation.php:73
|
317 |
-
msgid "It does not do what I need."
|
318 |
-
msgstr ""
|
319 |
-
|
320 |
-
#: deactivation.php:75
|
321 |
-
msgid "What does it need to do?"
|
322 |
-
msgstr ""
|
323 |
-
|
324 |
-
#: deactivation.php:79
|
325 |
-
msgid "It's a temporary deactivation, I use the plugin all the time."
|
326 |
-
msgstr ""
|
327 |
-
|
328 |
-
#: deactivation.php:85
|
329 |
-
#, php-format
|
330 |
-
msgid "I'm switching over to the %s"
|
331 |
-
msgstr ""
|
332 |
-
|
333 |
-
#: deactivation.php:85
|
334 |
-
msgid "Pro version"
|
335 |
-
msgstr ""
|
336 |
-
|
337 |
-
#: deactivation.php:128
|
338 |
-
msgid "Quick Feedback"
|
339 |
-
msgstr ""
|
340 |
-
|
341 |
-
#: deactivation.php:129
|
342 |
-
msgid "If you have a moment, please let us know why you are deactivating"
|
343 |
-
msgstr ""
|
344 |
-
|
345 |
-
#: deactivation.php:136 deactivation.php:344
|
346 |
-
msgid "Skip & Deactivate"
|
347 |
-
msgstr ""
|
348 |
-
|
349 |
-
#: deactivation.php:137
|
350 |
-
msgid "Send & Deactivate"
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
-
#: deactivation.php:140
|
354 |
-
msgid "Your response is sent anonymously."
|
355 |
-
msgstr ""
|
356 |
-
|
357 |
-
#: deactivation.php:235 deactivation.php:236
|
358 |
-
msgid "Processing"
|
359 |
-
msgstr ""
|
360 |
-
|
361 |
-
#: deactivation.php:283
|
362 |
-
msgid "Please tell us the reason so we can improve it."
|
363 |
-
msgstr ""
|
364 |
-
|
365 |
-
#: duplicator.php:398 views/packages/details/controller.php:48
|
366 |
-
#: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
|
367 |
-
#: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
|
368 |
-
#: views/settings/controller.php:23
|
369 |
-
msgid "Packages"
|
370 |
-
msgstr ""
|
371 |
-
|
372 |
-
#: duplicator.php:404 views/tools/controller.php:19
|
373 |
-
msgid "Tools"
|
374 |
-
msgstr ""
|
375 |
-
|
376 |
-
#: duplicator.php:409 views/packages/main/packages.php:85
|
377 |
-
#: views/settings/controller.php:19 views/settings/general.php:179
|
378 |
-
msgid "Settings"
|
379 |
-
msgstr ""
|
380 |
-
|
381 |
-
#: duplicator.php:413
|
382 |
-
msgid "Go Pro!"
|
383 |
-
msgstr ""
|
384 |
-
|
385 |
-
#: duplicator.php:481 views/settings/license.php:8
|
386 |
-
msgid "Manage"
|
387 |
-
msgstr ""
|
388 |
-
|
389 |
-
#: duplicator.php:498 views/packages/main/packages.php:82
|
390 |
-
msgid "Get Help"
|
391 |
-
msgstr ""
|
392 |
-
|
393 |
-
#: duplicator.php:498
|
394 |
-
msgid "Go Pro"
|
395 |
-
msgstr ""
|
396 |
-
|
397 |
-
#: views/packages/details/controller.php:13
|
398 |
-
msgid "package log"
|
399 |
-
msgstr ""
|
400 |
-
|
401 |
-
#: views/packages/details/controller.php:14
|
402 |
-
msgid "FAQ"
|
403 |
-
msgstr ""
|
404 |
-
|
405 |
-
#: views/packages/details/controller.php:15
|
406 |
-
msgid "resources page"
|
407 |
-
msgstr ""
|
408 |
-
|
409 |
-
#: views/packages/details/controller.php:34
|
410 |
-
msgid "This package contains an error. Please review the "
|
411 |
-
msgstr ""
|
412 |
-
|
413 |
-
#: views/packages/details/controller.php:34
|
414 |
-
msgid " for details."
|
415 |
-
msgstr ""
|
416 |
-
|
417 |
-
#: views/packages/details/controller.php:35
|
418 |
-
msgid "For help visit the "
|
419 |
-
msgstr ""
|
420 |
-
|
421 |
-
#: views/packages/details/controller.php:35
|
422 |
-
msgid " and "
|
423 |
-
msgstr ""
|
424 |
-
|
425 |
-
#: views/packages/details/controller.php:42
|
426 |
-
msgid "Details"
|
427 |
-
msgstr ""
|
428 |
-
|
429 |
-
#: views/packages/details/controller.php:45
|
430 |
-
msgid "Transfer"
|
431 |
-
msgstr ""
|
432 |
-
|
433 |
-
#: views/packages/details/detail.php:63
|
434 |
-
msgid "Invalid Package ID request. Please try again!"
|
435 |
-
msgstr ""
|
436 |
-
|
437 |
-
#: views/packages/details/detail.php:75 views/settings/controller.php:22
|
438 |
-
#: views/tools/diagnostics/inc.settings.php:29
|
439 |
-
msgid "General"
|
440 |
-
msgstr ""
|
441 |
-
|
442 |
-
#: views/packages/details/detail.php:81 views/packages/details/detail.php:184
|
443 |
-
#: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
|
444 |
-
#: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
|
445 |
-
#: views/packages/main/s3.build.php:133
|
446 |
-
msgid "Name"
|
447 |
-
msgstr ""
|
448 |
-
|
449 |
-
#: views/packages/details/detail.php:85
|
450 |
-
msgid "ID"
|
451 |
-
msgstr ""
|
452 |
-
|
453 |
-
#: views/packages/details/detail.php:86
|
454 |
-
msgid "Hash"
|
455 |
-
msgstr ""
|
456 |
-
|
457 |
-
#: views/packages/details/detail.php:87
|
458 |
-
msgid "Full Name"
|
459 |
-
msgstr ""
|
460 |
-
|
461 |
-
#: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
|
462 |
-
#: views/packages/main/s2.scan3.php:530
|
463 |
-
msgid "Notes"
|
464 |
-
msgstr ""
|
465 |
-
|
466 |
-
#: views/packages/details/detail.php:93
|
467 |
-
msgid "- no notes -"
|
468 |
-
msgstr ""
|
469 |
-
|
470 |
-
#: views/packages/details/detail.php:96
|
471 |
-
msgid "Versions"
|
472 |
-
msgstr ""
|
473 |
-
|
474 |
-
#: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
|
475 |
-
msgid "WordPress"
|
476 |
-
msgstr ""
|
477 |
-
|
478 |
-
#: views/packages/details/detail.php:100 views/packages/details/detail.php:101
|
479 |
-
#: views/packages/details/detail.php:103 views/packages/details/detail.php:104
|
480 |
-
#: views/packages/details/detail.php:118
|
481 |
-
msgid "- unknown -"
|
482 |
-
msgstr ""
|
483 |
-
|
484 |
-
#: views/packages/details/detail.php:101
|
485 |
-
msgid "PHP"
|
486 |
-
msgstr ""
|
487 |
-
|
488 |
-
#: views/packages/details/detail.php:102
|
489 |
-
msgid "Mysql"
|
490 |
-
msgstr ""
|
491 |
-
|
492 |
-
#: views/packages/details/detail.php:109
|
493 |
-
msgid "Runtime"
|
494 |
-
msgstr ""
|
495 |
-
|
496 |
-
#: views/packages/details/detail.php:110
|
497 |
-
msgid "error running"
|
498 |
-
msgstr ""
|
499 |
-
|
500 |
-
#: views/packages/details/detail.php:113
|
501 |
-
msgid "Status"
|
502 |
-
msgstr ""
|
503 |
-
|
504 |
-
#: views/packages/details/detail.php:114
|
505 |
-
msgid "completed"
|
506 |
-
msgstr ""
|
507 |
-
|
508 |
-
#: views/packages/details/detail.php:114
|
509 |
-
msgid "in-complete"
|
510 |
-
msgstr ""
|
511 |
-
|
512 |
-
#: views/packages/details/detail.php:117 views/packages/details/detail.php:366
|
513 |
-
#: views/packages/main/s1.setup2.php:472
|
514 |
-
#: views/tools/diagnostics/inc.settings.php:118
|
515 |
-
msgid "User"
|
516 |
-
msgstr ""
|
517 |
-
|
518 |
-
#: views/packages/details/detail.php:121 views/packages/details/detail.php:269
|
519 |
-
#: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
|
520 |
-
#: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
|
521 |
-
msgid "Files"
|
522 |
-
msgstr ""
|
523 |
-
|
524 |
-
#: views/packages/details/detail.php:129
|
525 |
-
msgid "Log"
|
526 |
-
msgstr ""
|
527 |
-
|
528 |
-
#: views/packages/details/detail.php:130
|
529 |
-
msgid "Share"
|
530 |
-
msgstr ""
|
531 |
-
|
532 |
-
#: views/packages/details/detail.php:138 views/packages/details/detail.php:226
|
533 |
-
#: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
|
534 |
-
#: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
|
535 |
-
#: views/settings/packages.php:204
|
536 |
-
msgid "Archive"
|
537 |
-
msgstr ""
|
538 |
-
|
539 |
-
#: views/packages/details/detail.php:142 views/packages/details/detail.php:325
|
540 |
-
#: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
|
541 |
-
#: views/packages/main/s3.build.php:143
|
542 |
-
msgid "Installer"
|
543 |
-
msgstr ""
|
544 |
-
|
545 |
-
#: views/packages/details/detail.php:146 views/packages/details/detail.php:362
|
546 |
-
#: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
|
547 |
-
#: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
|
548 |
-
#: views/settings/packages.php:70
|
549 |
-
msgid "Database"
|
550 |
-
msgstr ""
|
551 |
-
|
552 |
-
#: views/packages/details/detail.php:160
|
553 |
-
msgid "Download Links"
|
554 |
-
msgstr ""
|
555 |
-
|
556 |
-
#: views/packages/details/detail.php:163
|
557 |
-
msgid "The following links contain sensitive data. Please share with caution!"
|
558 |
-
msgstr ""
|
559 |
-
|
560 |
-
#: views/packages/details/detail.php:169
|
561 |
-
msgid ""
|
562 |
-
"The database SQL script is a quick link to your database backup script. An "
|
563 |
-
"exact copy is also stored in the package."
|
564 |
-
msgstr ""
|
565 |
-
|
566 |
-
#: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
|
567 |
-
#: views/settings/controller.php:25 views/settings/general.php:110
|
568 |
-
msgid "Storage"
|
569 |
-
msgstr ""
|
570 |
-
|
571 |
-
#: views/packages/details/detail.php:185 views/packages/details/detail.php:286
|
572 |
-
#: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
|
573 |
-
msgid "Type"
|
574 |
-
msgstr ""
|
575 |
-
|
576 |
-
#: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
|
577 |
-
msgid "Location"
|
578 |
-
msgstr ""
|
579 |
-
|
580 |
-
#: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
|
581 |
-
msgid "Default"
|
582 |
-
msgstr ""
|
583 |
-
|
584 |
-
#: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
|
585 |
-
msgid "Local"
|
586 |
-
msgstr ""
|
587 |
-
|
588 |
-
#: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
|
589 |
-
#, php-format
|
590 |
-
msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
|
591 |
-
msgstr ""
|
592 |
-
|
593 |
-
#: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
|
594 |
-
#: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
|
595 |
-
#: views/packages/main/s3.build.php:21
|
596 |
-
msgid "Duplicator Pro"
|
597 |
-
msgstr ""
|
598 |
-
|
599 |
-
#: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
|
600 |
-
msgid "Additional Storage:"
|
601 |
-
msgstr ""
|
602 |
-
|
603 |
-
#: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
|
604 |
-
msgid ""
|
605 |
-
"Duplicator Pro allows you to create a package and then store it at a custom "
|
606 |
-
"location on this server or to a cloud based location such as Google Drive, "
|
607 |
-
"Amazon, Dropbox or FTP."
|
608 |
-
msgstr ""
|
609 |
-
|
610 |
-
#: views/packages/details/detail.php:234 views/packages/details/detail.php:290
|
611 |
-
#: views/packages/main/s1.setup2.php:260
|
612 |
-
msgid "Build Mode"
|
613 |
-
msgstr ""
|
614 |
-
|
615 |
-
#: views/packages/details/detail.php:241
|
616 |
-
msgid "Database Mode"
|
617 |
-
msgstr ""
|
618 |
-
|
619 |
-
#: views/packages/details/detail.php:242
|
620 |
-
msgid "Archive Database Only Enabled"
|
621 |
-
msgstr ""
|
622 |
-
|
623 |
-
#: views/packages/details/detail.php:246 views/packages/details/detail.php:303
|
624 |
-
msgid "Filters"
|
625 |
-
msgstr ""
|
626 |
-
|
627 |
-
#: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
|
628 |
-
#: views/packages/main/s2.scan3.php:629
|
629 |
-
msgid "Directories"
|
630 |
-
msgstr ""
|
631 |
-
|
632 |
-
#: views/packages/details/detail.php:254 views/packages/details/detail.php:264
|
633 |
-
#: views/packages/details/detail.php:273 views/packages/details/detail.php:312
|
634 |
-
msgid "- no filters -"
|
635 |
-
msgstr ""
|
636 |
-
|
637 |
-
#: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
|
638 |
-
msgid "Extensions"
|
639 |
-
msgstr ""
|
640 |
-
|
641 |
-
#: views/packages/details/detail.php:283 views/packages/details/detail.php:395
|
642 |
-
msgid "DATABASE"
|
643 |
-
msgstr ""
|
644 |
-
|
645 |
-
#: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
|
646 |
-
msgid "MySQL Compatibility Mode Enabled"
|
647 |
-
msgstr ""
|
648 |
-
|
649 |
-
#: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
|
650 |
-
#: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
|
651 |
-
#: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
|
652 |
-
msgid "details"
|
653 |
-
msgstr ""
|
654 |
-
|
655 |
-
#: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
|
656 |
-
msgid "Tables"
|
657 |
-
msgstr ""
|
658 |
-
|
659 |
-
#: views/packages/details/detail.php:332
|
660 |
-
msgid " Security"
|
661 |
-
msgstr ""
|
662 |
-
|
663 |
-
#: views/packages/details/detail.php:336
|
664 |
-
msgid "Password Protection"
|
665 |
-
msgstr ""
|
666 |
-
|
667 |
-
#: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
|
668 |
-
msgid "Show/Hide Password"
|
669 |
-
msgstr ""
|
670 |
-
|
671 |
-
#: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
|
672 |
-
msgid " MySQL Server"
|
673 |
-
msgstr ""
|
674 |
-
|
675 |
-
#: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
|
676 |
-
msgid "Host"
|
677 |
-
msgstr ""
|
678 |
-
|
679 |
-
#: views/packages/details/detail.php:359 views/packages/details/detail.php:363
|
680 |
-
#: views/packages/details/detail.php:367
|
681 |
-
msgid "- not set -"
|
682 |
-
msgstr ""
|
683 |
-
|
684 |
-
#: views/packages/details/detail.php:375
|
685 |
-
msgid "View Package Object"
|
686 |
-
msgstr ""
|
687 |
-
|
688 |
-
#: views/packages/details/detail.php:392
|
689 |
-
msgid "Package File Links"
|
690 |
-
msgstr ""
|
691 |
-
|
692 |
-
#: views/packages/details/detail.php:396
|
693 |
-
msgid "PACKAGE"
|
694 |
-
msgstr ""
|
695 |
-
|
696 |
-
#: views/packages/details/detail.php:397
|
697 |
-
msgid "INSTALLER"
|
698 |
-
msgstr ""
|
699 |
-
|
700 |
-
#: views/packages/details/detail.php:398
|
701 |
-
msgid "LOG"
|
702 |
-
msgstr ""
|
703 |
-
|
704 |
-
#: views/packages/details/transfer.php:15
|
705 |
-
msgid "Transfer your packages to multiple locations with Duplicator Pro"
|
706 |
-
msgstr ""
|
707 |
-
|
708 |
-
#: views/packages/details/transfer.php:20 views/settings/storage.php:19
|
709 |
-
msgid "Amazon S3"
|
710 |
-
msgstr ""
|
711 |
-
|
712 |
-
#: views/packages/details/transfer.php:21
|
713 |
-
msgid "Dropbox"
|
714 |
-
msgstr ""
|
715 |
-
|
716 |
-
#: views/packages/details/transfer.php:22 views/settings/storage.php:21
|
717 |
-
msgid "Google Drive"
|
718 |
-
msgstr ""
|
719 |
-
|
720 |
-
#: views/packages/details/transfer.php:23 views/settings/storage.php:22
|
721 |
-
msgid "One Drive"
|
722 |
-
msgstr ""
|
723 |
-
|
724 |
-
#: views/packages/details/transfer.php:24 views/settings/storage.php:23
|
725 |
-
msgid "FTP & SFTP"
|
726 |
-
msgstr ""
|
727 |
-
|
728 |
-
#: views/packages/details/transfer.php:25 views/settings/storage.php:24
|
729 |
-
msgid "Custom Directory"
|
730 |
-
msgstr ""
|
731 |
-
|
732 |
-
#: views/packages/details/transfer.php:29
|
733 |
-
msgid ""
|
734 |
-
"Set up a one-time storage location and automatically push the package to "
|
735 |
-
"your destination."
|
736 |
-
msgstr ""
|
737 |
-
|
738 |
-
#: views/packages/details/transfer.php:35 views/settings/schedule.php:22
|
739 |
-
#: views/settings/storage.php:34 views/tools/templates.php:23
|
740 |
-
msgid "Learn More"
|
741 |
-
msgstr ""
|
742 |
-
|
743 |
-
#: views/packages/main/controller.php:9
|
744 |
-
msgid "An invalid request was made to this page."
|
745 |
-
msgstr ""
|
746 |
-
|
747 |
-
#: views/packages/main/controller.php:10
|
748 |
-
msgid "Please retry by going to the"
|
749 |
-
msgstr ""
|
750 |
-
|
751 |
-
#: views/packages/main/controller.php:11
|
752 |
-
msgid "Packages Screen"
|
753 |
-
msgstr ""
|
754 |
-
|
755 |
-
#: views/packages/main/controller.php:59
|
756 |
-
msgid "Packages » All"
|
757 |
-
msgstr ""
|
758 |
-
|
759 |
-
#: views/packages/main/controller.php:63 views/packages/main/controller.php:67
|
760 |
-
#: views/packages/main/controller.php:71
|
761 |
-
msgid "Packages » New"
|
762 |
-
msgstr ""
|
763 |
-
|
764 |
-
#: views/packages/main/packages.php:77
|
765 |
-
msgid "Bulk Actions"
|
766 |
-
msgstr ""
|
767 |
-
|
768 |
-
#: views/packages/main/packages.php:78
|
769 |
-
msgid "Delete selected package(s)"
|
770 |
-
msgstr ""
|
771 |
-
|
772 |
-
#: views/packages/main/packages.php:78
|
773 |
-
msgid "Delete"
|
774 |
-
msgstr ""
|
775 |
-
|
776 |
-
#: views/packages/main/packages.php:80
|
777 |
-
msgid "Apply"
|
778 |
-
msgstr ""
|
779 |
-
|
780 |
-
#: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
|
781 |
-
#: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
|
782 |
-
msgid "Create New"
|
783 |
-
msgstr ""
|
784 |
-
|
785 |
-
#: views/packages/main/packages.php:114 views/packages/main/packages.php:148
|
786 |
-
msgid "No Packages Found."
|
787 |
-
msgstr ""
|
788 |
-
|
789 |
-
#: views/packages/main/packages.php:115 views/packages/main/packages.php:149
|
790 |
-
msgid "Click the 'Create New' button to build a package."
|
791 |
-
msgstr ""
|
792 |
-
|
793 |
-
#: views/packages/main/packages.php:117 views/packages/main/packages.php:151
|
794 |
-
msgid "New to Duplicator?"
|
795 |
-
msgstr ""
|
796 |
-
|
797 |
-
#: views/packages/main/packages.php:119 views/packages/main/packages.php:153
|
798 |
-
msgid "Check out the 'Quick Start' guide!"
|
799 |
-
msgstr ""
|
800 |
-
|
801 |
-
#: views/packages/main/packages.php:135
|
802 |
-
msgid "Select all packages"
|
803 |
-
msgstr ""
|
804 |
-
|
805 |
-
#: views/packages/main/packages.php:136
|
806 |
-
msgid "Created"
|
807 |
-
msgstr ""
|
808 |
-
|
809 |
-
#: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
|
810 |
-
#: views/packages/main/s2.scan3.php:392
|
811 |
-
msgid "Size"
|
812 |
-
msgstr ""
|
813 |
-
|
814 |
-
#: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
|
815 |
-
msgid "Package"
|
816 |
-
msgstr ""
|
817 |
-
|
818 |
-
#: views/packages/main/packages.php:189
|
819 |
-
msgid "Archive created as zip file"
|
820 |
-
msgstr ""
|
821 |
-
|
822 |
-
#: views/packages/main/packages.php:190
|
823 |
-
msgid "Archive created as daf file"
|
824 |
-
msgstr ""
|
825 |
-
|
826 |
-
#: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
|
827 |
-
#: views/packages/main/s2.scan3.php:35
|
828 |
-
msgid "Database Only"
|
829 |
-
msgstr ""
|
830 |
-
|
831 |
-
#: views/packages/main/packages.php:199
|
832 |
-
msgid "Package Build Running"
|
833 |
-
msgstr ""
|
834 |
-
|
835 |
-
#: views/packages/main/packages.php:200
|
836 |
-
msgid ""
|
837 |
-
"To stop or reset this package build goto Settings > Advanced > Reset Packages"
|
838 |
-
msgstr ""
|
839 |
-
|
840 |
-
#: views/packages/main/packages.php:210 views/packages/main/packages.php:228
|
841 |
-
msgid "Package Details"
|
842 |
-
msgstr ""
|
843 |
-
|
844 |
-
#: views/packages/main/packages.php:226
|
845 |
-
msgid "Error Processing"
|
846 |
-
msgstr ""
|
847 |
-
|
848 |
-
#: views/packages/main/packages.php:246
|
849 |
-
msgid "Current Server Time"
|
850 |
-
msgstr ""
|
851 |
-
|
852 |
-
#: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
|
853 |
-
msgid "Time"
|
854 |
-
msgstr ""
|
855 |
-
|
856 |
-
#: views/packages/main/packages.php:258
|
857 |
-
msgid "Items"
|
858 |
-
msgstr ""
|
859 |
-
|
860 |
-
#: views/packages/main/packages.php:268
|
861 |
-
msgid "Bulk Action Required"
|
862 |
-
msgstr ""
|
863 |
-
|
864 |
-
#: views/packages/main/packages.php:270
|
865 |
-
msgid ""
|
866 |
-
"No selections made! Please select an action from the \"Bulk Actions\" drop "
|
867 |
-
"down menu."
|
868 |
-
msgstr ""
|
869 |
-
|
870 |
-
#: views/packages/main/packages.php:274
|
871 |
-
msgid "Selection Required"
|
872 |
-
msgstr ""
|
873 |
-
|
874 |
-
#: views/packages/main/packages.php:276
|
875 |
-
msgid "No selections made! Please select at least one package to delete."
|
876 |
-
msgstr ""
|
877 |
-
|
878 |
-
#: views/packages/main/packages.php:280
|
879 |
-
msgid "Delete Packages?"
|
880 |
-
msgstr ""
|
881 |
-
|
882 |
-
#: views/packages/main/packages.php:281
|
883 |
-
msgid "Are you sure you want to delete the selected package(s)?"
|
884 |
-
msgstr ""
|
885 |
-
|
886 |
-
#: views/packages/main/packages.php:282
|
887 |
-
msgid "Removing Packages, Please Wait..."
|
888 |
-
msgstr ""
|
889 |
-
|
890 |
-
#: views/packages/main/packages.php:289
|
891 |
-
msgid "Duplicator Help"
|
892 |
-
msgstr ""
|
893 |
-
|
894 |
-
#: views/packages/main/packages.php:294
|
895 |
-
msgid "Alert!"
|
896 |
-
msgstr ""
|
897 |
-
|
898 |
-
#: views/packages/main/packages.php:295
|
899 |
-
msgid "A package is being processed. Retry later."
|
900 |
-
msgstr ""
|
901 |
-
|
902 |
-
#: views/packages/main/packages.php:302
|
903 |
-
msgid "Common Questions:"
|
904 |
-
msgstr ""
|
905 |
-
|
906 |
-
#: views/packages/main/packages.php:303
|
907 |
-
msgid "How do I create a package"
|
908 |
-
msgstr ""
|
909 |
-
|
910 |
-
#: views/packages/main/packages.php:304
|
911 |
-
msgid "How do I install a package?"
|
912 |
-
msgstr ""
|
913 |
-
|
914 |
-
#: views/packages/main/packages.php:305
|
915 |
-
msgid "Frequently Asked Questions!"
|
916 |
-
msgstr ""
|
917 |
-
|
918 |
-
#: views/packages/main/packages.php:308
|
919 |
-
msgid "Other Resources:"
|
920 |
-
msgstr ""
|
921 |
-
|
922 |
-
#: views/packages/main/packages.php:309
|
923 |
-
msgid "Need help with the plugin?"
|
924 |
-
msgstr ""
|
925 |
-
|
926 |
-
#: views/packages/main/packages.php:310
|
927 |
-
msgid "Have an idea for the plugin?"
|
928 |
-
msgstr ""
|
929 |
-
|
930 |
-
#: views/packages/main/packages.php:312
|
931 |
-
msgid "Help review the plugin!"
|
932 |
-
msgstr ""
|
933 |
-
|
934 |
-
#: views/packages/main/s1.setup1.php:12
|
935 |
-
msgid "Package settings have been reset."
|
936 |
-
msgstr ""
|
937 |
-
|
938 |
-
#: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
|
939 |
-
#: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
|
940 |
-
#: views/packages/main/s3.build.php:79
|
941 |
-
msgid "Setup"
|
942 |
-
msgstr ""
|
943 |
-
|
944 |
-
#: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
|
945 |
-
#: views/packages/main/s3.build.php:80
|
946 |
-
msgid "Scan"
|
947 |
-
msgstr ""
|
948 |
-
|
949 |
-
#: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
|
950 |
-
#: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
|
951 |
-
msgid "Build"
|
952 |
-
msgstr ""
|
953 |
-
|
954 |
-
#: views/packages/main/s1.setup1.php:67
|
955 |
-
msgid "Step 1: Package Setup"
|
956 |
-
msgstr ""
|
957 |
-
|
958 |
-
#: views/packages/main/s1.setup1.php:90
|
959 |
-
msgid "Requirements:"
|
960 |
-
msgstr ""
|
961 |
-
|
962 |
-
#: views/packages/main/s1.setup1.php:99
|
963 |
-
msgid ""
|
964 |
-
"System requirements must pass for the Duplicator to work properly. Click "
|
965 |
-
"each link for details."
|
966 |
-
msgstr ""
|
967 |
-
|
968 |
-
#: views/packages/main/s1.setup1.php:105
|
969 |
-
msgid "PHP Support"
|
970 |
-
msgstr ""
|
971 |
-
|
972 |
-
#: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
|
973 |
-
msgid "PHP Version"
|
974 |
-
msgstr ""
|
975 |
-
|
976 |
-
#: views/packages/main/s1.setup1.php:113
|
977 |
-
msgid "PHP versions 5.2.9+ or higher is required."
|
978 |
-
msgstr ""
|
979 |
-
|
980 |
-
#: views/packages/main/s1.setup1.php:117
|
981 |
-
msgid "Zip Archive Enabled"
|
982 |
-
msgstr ""
|
983 |
-
|
984 |
-
#: views/packages/main/s1.setup1.php:121
|
985 |
-
msgid "ZipArchive extension is required or"
|
986 |
-
msgstr ""
|
987 |
-
|
988 |
-
#: views/packages/main/s1.setup1.php:122
|
989 |
-
msgid "Switch to DupArchive"
|
990 |
-
msgstr ""
|
991 |
-
|
992 |
-
#: views/packages/main/s1.setup1.php:123
|
993 |
-
msgid "to by-pass this requirement."
|
994 |
-
msgstr ""
|
995 |
-
|
996 |
-
#: views/packages/main/s1.setup1.php:129
|
997 |
-
msgid "Safe Mode Off"
|
998 |
-
msgstr ""
|
999 |
-
|
1000 |
-
#: views/packages/main/s1.setup1.php:131
|
1001 |
-
msgid ""
|
1002 |
-
"Safe Mode should be set to Off in you php.ini file and is deprecated as of "
|
1003 |
-
"PHP 5.3.0."
|
1004 |
-
msgstr ""
|
1005 |
-
|
1006 |
-
#: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
|
1007 |
-
#: views/packages/main/s1.setup1.php:144
|
1008 |
-
msgid "Function"
|
1009 |
-
msgstr ""
|
1010 |
-
|
1011 |
-
#: views/packages/main/s1.setup1.php:150
|
1012 |
-
msgid ""
|
1013 |
-
"For any issues in this section please contact your hosting provider or "
|
1014 |
-
"server administrator. For additional information see our online "
|
1015 |
-
"documentation."
|
1016 |
-
msgstr ""
|
1017 |
-
|
1018 |
-
#: views/packages/main/s1.setup1.php:158
|
1019 |
-
msgid "Required Paths"
|
1020 |
-
msgstr ""
|
1021 |
-
|
1022 |
-
#: views/packages/main/s1.setup1.php:178
|
1023 |
-
msgid ""
|
1024 |
-
"If the root WordPress path is not writable by PHP on some systems this can "
|
1025 |
-
"cause issues."
|
1026 |
-
msgstr ""
|
1027 |
-
|
1028 |
-
#: views/packages/main/s1.setup1.php:181
|
1029 |
-
msgid ""
|
1030 |
-
"If Duplicator does not have enough permissions then you will need to "
|
1031 |
-
"manually create the paths above. "
|
1032 |
-
msgstr ""
|
1033 |
-
|
1034 |
-
#: views/packages/main/s1.setup1.php:190
|
1035 |
-
msgid "Server Support"
|
1036 |
-
msgstr ""
|
1037 |
-
|
1038 |
-
#: views/packages/main/s1.setup1.php:196
|
1039 |
-
msgid "MySQL Version"
|
1040 |
-
msgstr ""
|
1041 |
-
|
1042 |
-
#: views/packages/main/s1.setup1.php:200
|
1043 |
-
msgid "MySQLi Support"
|
1044 |
-
msgstr ""
|
1045 |
-
|
1046 |
-
#: views/packages/main/s1.setup1.php:206
|
1047 |
-
msgid ""
|
1048 |
-
"MySQL version 5.0+ or better is required and the PHP MySQLi extension (note "
|
1049 |
-
"the trailing 'i') is also required. Contact your server administrator and "
|
1050 |
-
"request that mysqli extension and MySQL Server 5.0+ be installed."
|
1051 |
-
msgstr ""
|
1052 |
-
|
1053 |
-
#: views/packages/main/s1.setup1.php:207
|
1054 |
-
#: views/tools/diagnostics/inc.data.php:26
|
1055 |
-
msgid "more info"
|
1056 |
-
msgstr ""
|
1057 |
-
|
1058 |
-
#: views/packages/main/s1.setup1.php:216
|
1059 |
-
msgid "Reserved Files"
|
1060 |
-
msgstr ""
|
1061 |
-
|
1062 |
-
#: views/packages/main/s1.setup1.php:221
|
1063 |
-
msgid ""
|
1064 |
-
"None of the reserved files where found from a previous install. This means "
|
1065 |
-
"you are clear to create a new package."
|
1066 |
-
msgstr ""
|
1067 |
-
|
1068 |
-
#: views/packages/main/s1.setup1.php:229
|
1069 |
-
msgid "WordPress Root Path:"
|
1070 |
-
msgstr ""
|
1071 |
-
|
1072 |
-
#: views/packages/main/s1.setup1.php:231
|
1073 |
-
msgid "Remove Files Now"
|
1074 |
-
msgstr ""
|
1075 |
-
|
1076 |
-
#: views/packages/main/s1.setup2.php:76
|
1077 |
-
msgid "Add Notes"
|
1078 |
-
msgstr ""
|
1079 |
-
|
1080 |
-
#: views/packages/main/s1.setup2.php:79
|
1081 |
-
msgid "Toggle a default name"
|
1082 |
-
msgstr ""
|
1083 |
-
|
1084 |
-
#: views/packages/main/s1.setup2.php:146
|
1085 |
-
msgid "File filter enabled"
|
1086 |
-
msgstr ""
|
1087 |
-
|
1088 |
-
#: views/packages/main/s1.setup2.php:147
|
1089 |
-
msgid "Database filter enabled"
|
1090 |
-
msgstr ""
|
1091 |
-
|
1092 |
-
#: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
|
1093 |
-
msgid "Archive Only the Database"
|
1094 |
-
msgstr ""
|
1095 |
-
|
1096 |
-
#: views/packages/main/s1.setup2.php:177
|
1097 |
-
msgid "Enable File Filters"
|
1098 |
-
msgstr ""
|
1099 |
-
|
1100 |
-
#: views/packages/main/s1.setup2.php:179
|
1101 |
-
msgid "File Filters:"
|
1102 |
-
msgstr ""
|
1103 |
-
|
1104 |
-
#: views/packages/main/s1.setup2.php:180
|
1105 |
-
msgid ""
|
1106 |
-
"File filters allow you to ignore directories and file extensions. When "
|
1107 |
-
"creating a package only include the data you want and need. This helps to "
|
1108 |
-
"improve the overall archive build time and keep your backups simple and "
|
1109 |
-
"clean."
|
1110 |
-
msgstr ""
|
1111 |
-
|
1112 |
-
#: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
|
1113 |
-
#: views/packages/main/s1.setup2.php:207
|
1114 |
-
msgid "Separate all filters by semicolon"
|
1115 |
-
msgstr ""
|
1116 |
-
|
1117 |
-
#: views/packages/main/s1.setup2.php:187
|
1118 |
-
msgid "Directories:"
|
1119 |
-
msgstr ""
|
1120 |
-
|
1121 |
-
#: views/packages/main/s1.setup2.php:188
|
1122 |
-
msgid "Number of directories filtered"
|
1123 |
-
msgstr ""
|
1124 |
-
|
1125 |
-
#: views/packages/main/s1.setup2.php:192
|
1126 |
-
msgid "root path"
|
1127 |
-
msgstr ""
|
1128 |
-
|
1129 |
-
#: views/packages/main/s1.setup2.php:193
|
1130 |
-
msgid "wp-uploads"
|
1131 |
-
msgstr ""
|
1132 |
-
|
1133 |
-
#: views/packages/main/s1.setup2.php:194
|
1134 |
-
msgid "cache"
|
1135 |
-
msgstr ""
|
1136 |
-
|
1137 |
-
#: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
|
1138 |
-
#: views/packages/main/s1.setup2.php:215
|
1139 |
-
msgid "(clear)"
|
1140 |
-
msgstr ""
|
1141 |
-
|
1142 |
-
#: views/packages/main/s1.setup2.php:199
|
1143 |
-
msgid "File extensions"
|
1144 |
-
msgstr ""
|
1145 |
-
|
1146 |
-
#: views/packages/main/s1.setup2.php:201
|
1147 |
-
msgid "media"
|
1148 |
-
msgstr ""
|
1149 |
-
|
1150 |
-
#: views/packages/main/s1.setup2.php:202
|
1151 |
-
msgid "archive"
|
1152 |
-
msgstr ""
|
1153 |
-
|
1154 |
-
#: views/packages/main/s1.setup2.php:209
|
1155 |
-
msgid "Files:"
|
1156 |
-
msgstr ""
|
1157 |
-
|
1158 |
-
#: views/packages/main/s1.setup2.php:210
|
1159 |
-
msgid "Number of files filtered"
|
1160 |
-
msgstr ""
|
1161 |
-
|
1162 |
-
#: views/packages/main/s1.setup2.php:214
|
1163 |
-
msgid "(file path)"
|
1164 |
-
msgstr ""
|
1165 |
-
|
1166 |
-
#: views/packages/main/s1.setup2.php:220
|
1167 |
-
msgid ""
|
1168 |
-
"The directory, file and extensions paths above will be excluded from the "
|
1169 |
-
"archive file if enabled is checked."
|
1170 |
-
msgstr ""
|
1171 |
-
|
1172 |
-
#: views/packages/main/s1.setup2.php:221
|
1173 |
-
msgid ""
|
1174 |
-
"Use the full path for directories and files with semicolons to separate all "
|
1175 |
-
"paths."
|
1176 |
-
msgstr ""
|
1177 |
-
|
1178 |
-
#: views/packages/main/s1.setup2.php:231
|
1179 |
-
msgid ""
|
1180 |
-
"This option has automatically been checked because you have opted for a <i "
|
1181 |
-
"class='fa fa-random'></i> Two-Part Install Process. Please complete the "
|
1182 |
-
"package build and continue with the "
|
1183 |
-
msgstr ""
|
1184 |
-
|
1185 |
-
#: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
|
1186 |
-
msgid "Quick Start Two-Part Install Instructions"
|
1187 |
-
msgstr ""
|
1188 |
-
|
1189 |
-
#: views/packages/main/s1.setup2.php:238
|
1190 |
-
msgid ""
|
1191 |
-
"<b>Overview:</b><br/> This advanced option excludes all files from the "
|
1192 |
-
"archive. Only the database and a copy of the installer.php will be included "
|
1193 |
-
"in the archive.zip file. The option can be used for backing up and moving "
|
1194 |
-
"only the database."
|
1195 |
-
msgstr ""
|
1196 |
-
|
1197 |
-
#: views/packages/main/s1.setup2.php:243
|
1198 |
-
msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
|
1199 |
-
msgstr ""
|
1200 |
-
|
1201 |
-
#: views/packages/main/s1.setup2.php:245
|
1202 |
-
msgid ""
|
1203 |
-
"Please use caution when installing only the database over an existing site "
|
1204 |
-
"and be sure the correct files correspond with the database. For example, if "
|
1205 |
-
"WordPress 4.6 is on this site and you copy the database to a host that has "
|
1206 |
-
"WordPress 4.8 files then the source code of the files will not be in sync "
|
1207 |
-
"with the database causing possible errors. If you’re immediately moving the "
|
1208 |
-
"source files with the database then you can ignore this notice. Please use "
|
1209 |
-
"this advanced feature with caution!"
|
1210 |
-
msgstr ""
|
1211 |
-
|
1212 |
-
#: views/packages/main/s1.setup2.php:267
|
1213 |
-
msgid "Enable Table Filters"
|
1214 |
-
msgstr ""
|
1215 |
-
|
1216 |
-
#: views/packages/main/s1.setup2.php:269
|
1217 |
-
msgid "Enable Table Filters:"
|
1218 |
-
msgstr ""
|
1219 |
-
|
1220 |
-
#: views/packages/main/s1.setup2.php:270
|
1221 |
-
msgid ""
|
1222 |
-
"Checked tables will not be added to the database script. Excluding certain "
|
1223 |
-
"tables can possibly cause your site or plugins to not work correctly after "
|
1224 |
-
"install!"
|
1225 |
-
msgstr ""
|
1226 |
-
|
1227 |
-
#: views/packages/main/s1.setup2.php:276
|
1228 |
-
msgid "Include All"
|
1229 |
-
msgstr ""
|
1230 |
-
|
1231 |
-
#: views/packages/main/s1.setup2.php:277
|
1232 |
-
msgid "Exclude All"
|
1233 |
-
msgstr ""
|
1234 |
-
|
1235 |
-
#: views/packages/main/s1.setup2.php:321
|
1236 |
-
msgid "Checked tables will be <u>excluded</u> from the database script. "
|
1237 |
-
msgstr ""
|
1238 |
-
|
1239 |
-
#: views/packages/main/s1.setup2.php:322
|
1240 |
-
msgid ""
|
1241 |
-
"Excluding certain tables can cause your site or plugins to not work "
|
1242 |
-
"correctly after install!<br/>"
|
1243 |
-
msgstr ""
|
1244 |
-
|
1245 |
-
#: views/packages/main/s1.setup2.php:323
|
1246 |
-
msgid ""
|
1247 |
-
"<i class='core-table-info'> Use caution when excluding tables! It is highly "
|
1248 |
-
"recommended to not exclude WordPress core tables*, unless you know the "
|
1249 |
-
"impact.</i>"
|
1250 |
-
msgstr ""
|
1251 |
-
|
1252 |
-
#: views/packages/main/s1.setup2.php:328
|
1253 |
-
msgid "Compatibility Mode"
|
1254 |
-
msgstr ""
|
1255 |
-
|
1256 |
-
#: views/packages/main/s1.setup2.php:330
|
1257 |
-
msgid "Compatibility Mode:"
|
1258 |
-
msgstr ""
|
1259 |
-
|
1260 |
-
#: views/packages/main/s1.setup2.php:331
|
1261 |
-
msgid ""
|
1262 |
-
"This is an advanced database backwards compatibility feature that should "
|
1263 |
-
"ONLY be used if having problems installing packages. If the database server "
|
1264 |
-
"version is lower than the version where the package was built then these "
|
1265 |
-
"options may help generate a script that is more compliant with the older "
|
1266 |
-
"database server. It is recommended to try each option separately starting "
|
1267 |
-
"with mysql40."
|
1268 |
-
msgstr ""
|
1269 |
-
|
1270 |
-
#: views/packages/main/s1.setup2.php:352
|
1271 |
-
msgid "mysql40"
|
1272 |
-
msgstr ""
|
1273 |
-
|
1274 |
-
#: views/packages/main/s1.setup2.php:356
|
1275 |
-
msgid "no_table_options"
|
1276 |
-
msgstr ""
|
1277 |
-
|
1278 |
-
#: views/packages/main/s1.setup2.php:360
|
1279 |
-
msgid "no_key_options"
|
1280 |
-
msgstr ""
|
1281 |
-
|
1282 |
-
#: views/packages/main/s1.setup2.php:364
|
1283 |
-
msgid "no_field_options"
|
1284 |
-
msgstr ""
|
1285 |
-
|
1286 |
-
#: views/packages/main/s1.setup2.php:369
|
1287 |
-
msgid "This option is only available with mysqldump mode."
|
1288 |
-
msgstr ""
|
1289 |
-
|
1290 |
-
#: views/packages/main/s1.setup2.php:382
|
1291 |
-
msgid "Installer password protection is on"
|
1292 |
-
msgstr ""
|
1293 |
-
|
1294 |
-
#: views/packages/main/s1.setup2.php:383
|
1295 |
-
msgid "Installer password protection is off"
|
1296 |
-
msgstr ""
|
1297 |
-
|
1298 |
-
#: views/packages/main/s1.setup2.php:390
|
1299 |
-
msgid "All values in this section are"
|
1300 |
-
msgstr ""
|
1301 |
-
|
1302 |
-
#: views/packages/main/s1.setup2.php:390
|
1303 |
-
msgid "optional"
|
1304 |
-
msgstr ""
|
1305 |
-
|
1306 |
-
#: views/packages/main/s1.setup2.php:392
|
1307 |
-
msgid "Setup/Prefills"
|
1308 |
-
msgstr ""
|
1309 |
-
|
1310 |
-
#: views/packages/main/s1.setup2.php:393
|
1311 |
-
msgid ""
|
1312 |
-
"All values in this section are OPTIONAL! If you know ahead of time the "
|
1313 |
-
"database input fields the installer will use, then you can optionally enter "
|
1314 |
-
"them here and they will be prefilled at install time. Otherwise you can "
|
1315 |
-
"just enter them in at install time and ignore all these options in the "
|
1316 |
-
"Installer section."
|
1317 |
-
msgstr ""
|
1318 |
-
|
1319 |
-
#: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
|
1320 |
-
msgid "Branding"
|
1321 |
-
msgstr ""
|
1322 |
-
|
1323 |
-
#: views/packages/main/s1.setup2.php:407
|
1324 |
-
msgid "Available with Duplicator Pro - Freelancer!"
|
1325 |
-
msgstr ""
|
1326 |
-
|
1327 |
-
#: views/packages/main/s1.setup2.php:410
|
1328 |
-
msgid ""
|
1329 |
-
"Branding is a way to customize the installer look and feel. With branding "
|
1330 |
-
"you can create multiple brands of installers."
|
1331 |
-
msgstr ""
|
1332 |
-
|
1333 |
-
#: views/packages/main/s1.setup2.php:415
|
1334 |
-
msgid "Security"
|
1335 |
-
msgstr ""
|
1336 |
-
|
1337 |
-
#: views/packages/main/s1.setup2.php:422
|
1338 |
-
msgid "Enable Password Protection"
|
1339 |
-
msgstr ""
|
1340 |
-
|
1341 |
-
#: views/packages/main/s1.setup2.php:424
|
1342 |
-
msgid "Security:"
|
1343 |
-
msgstr ""
|
1344 |
-
|
1345 |
-
#: views/packages/main/s1.setup2.php:425
|
1346 |
-
msgid ""
|
1347 |
-
"Enabling this option will allow for basic password protection on the "
|
1348 |
-
"installer. Before running the installer the password below must be entered "
|
1349 |
-
"before proceeding with an install. This password is a general deterrent and "
|
1350 |
-
"should not be substituted for properly keeping your files secure. Be sure "
|
1351 |
-
"to remove all installer files when the install process is completed."
|
1352 |
-
msgstr ""
|
1353 |
-
|
1354 |
-
#: views/packages/main/s1.setup2.php:440
|
1355 |
-
msgid "Prefills"
|
1356 |
-
msgstr ""
|
1357 |
-
|
1358 |
-
#: views/packages/main/s1.setup2.php:448
|
1359 |
-
msgid "Basic"
|
1360 |
-
msgstr ""
|
1361 |
-
|
1362 |
-
#: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
|
1363 |
-
msgid "cPanel"
|
1364 |
-
msgstr ""
|
1365 |
-
|
1366 |
-
#: views/packages/main/s1.setup2.php:461
|
1367 |
-
msgid "example: localhost (value is optional)"
|
1368 |
-
msgstr ""
|
1369 |
-
|
1370 |
-
#: views/packages/main/s1.setup2.php:464
|
1371 |
-
msgid "Host Port"
|
1372 |
-
msgstr ""
|
1373 |
-
|
1374 |
-
#: views/packages/main/s1.setup2.php:465
|
1375 |
-
msgid "example: 3306 (value is optional)"
|
1376 |
-
msgstr ""
|
1377 |
-
|
1378 |
-
#: views/packages/main/s1.setup2.php:469
|
1379 |
-
msgid "example: DatabaseName (value is optional)"
|
1380 |
-
msgstr ""
|
1381 |
-
|
1382 |
-
#: views/packages/main/s1.setup2.php:473
|
1383 |
-
msgid "example: DatabaseUserName (value is optional)"
|
1384 |
-
msgstr ""
|
1385 |
-
|
1386 |
-
#: views/packages/main/s1.setup2.php:483
|
1387 |
-
msgid ""
|
1388 |
-
"Create the database and database user at install time without leaving the "
|
1389 |
-
"installer!"
|
1390 |
-
msgstr ""
|
1391 |
-
|
1392 |
-
#: views/packages/main/s1.setup2.php:484
|
1393 |
-
msgid "This feature is only availble in "
|
1394 |
-
msgstr ""
|
1395 |
-
|
1396 |
-
#: views/packages/main/s1.setup2.php:485
|
1397 |
-
msgid "Duplicator Pro!"
|
1398 |
-
msgstr ""
|
1399 |
-
|
1400 |
-
#: views/packages/main/s1.setup2.php:486
|
1401 |
-
msgid "This feature works only with hosts that support cPanel."
|
1402 |
-
msgstr ""
|
1403 |
-
|
1404 |
-
#: views/packages/main/s1.setup2.php:498
|
1405 |
-
msgid "Reset"
|
1406 |
-
msgstr ""
|
1407 |
-
|
1408 |
-
#: views/packages/main/s1.setup2.php:499
|
1409 |
-
msgid "Next"
|
1410 |
-
msgstr ""
|
1411 |
-
|
1412 |
-
#: views/packages/main/s1.setup2.php:508
|
1413 |
-
msgid "Reset Package Settings?"
|
1414 |
-
msgstr ""
|
1415 |
-
|
1416 |
-
#: views/packages/main/s1.setup2.php:509
|
1417 |
-
msgid ""
|
1418 |
-
"This will clear and reset all of the current package settings. Would you "
|
1419 |
-
"like to continue?"
|
1420 |
-
msgstr ""
|
1421 |
-
|
1422 |
-
#: views/packages/main/s2.scan1.php:148
|
1423 |
-
msgid "Input fields not valid"
|
1424 |
-
msgstr ""
|
1425 |
-
|
1426 |
-
#: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
|
1427 |
-
msgid "Please try again!"
|
1428 |
-
msgstr ""
|
1429 |
-
|
1430 |
-
#: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
|
1431 |
-
#: views/packages/main/s3.build.php:353
|
1432 |
-
msgid "Error Message:"
|
1433 |
-
msgstr ""
|
1434 |
-
|
1435 |
-
#: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
|
1436 |
-
msgid "Back"
|
1437 |
-
msgstr ""
|
1438 |
-
|
1439 |
-
#: views/packages/main/s2.scan1.php:180
|
1440 |
-
msgid "Step 2: System Scan"
|
1441 |
-
msgstr ""
|
1442 |
-
|
1443 |
-
#: views/packages/main/s2.scan1.php:197
|
1444 |
-
msgid "Scanning Site"
|
1445 |
-
msgstr ""
|
1446 |
-
|
1447 |
-
#: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
|
1448 |
-
msgid "Please Wait..."
|
1449 |
-
msgstr ""
|
1450 |
-
|
1451 |
-
#: views/packages/main/s2.scan1.php:200
|
1452 |
-
msgid "Keep this window open during the scan process."
|
1453 |
-
msgstr ""
|
1454 |
-
|
1455 |
-
#: views/packages/main/s2.scan1.php:201
|
1456 |
-
msgid "This can take several minutes."
|
1457 |
-
msgstr ""
|
1458 |
-
|
1459 |
-
#: views/packages/main/s2.scan1.php:206
|
1460 |
-
msgid "Scan Error"
|
1461 |
-
msgstr ""
|
1462 |
-
|
1463 |
-
#: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
|
1464 |
-
msgid "Server Status:"
|
1465 |
-
msgstr ""
|
1466 |
-
|
1467 |
-
#: views/packages/main/s2.scan1.php:221
|
1468 |
-
msgid "Scan Complete"
|
1469 |
-
msgstr ""
|
1470 |
-
|
1471 |
-
#: views/packages/main/s2.scan1.php:223
|
1472 |
-
msgid "Process Time:"
|
1473 |
-
msgstr ""
|
1474 |
-
|
1475 |
-
#: views/packages/main/s2.scan1.php:239
|
1476 |
-
msgid "A notice status has been detected, are you sure you want to continue?"
|
1477 |
-
msgstr ""
|
1478 |
-
|
1479 |
-
#: views/packages/main/s2.scan1.php:243
|
1480 |
-
msgid "Yes. Continue with the build process!"
|
1481 |
-
msgstr ""
|
1482 |
-
|
1483 |
-
#: views/packages/main/s2.scan1.php:249
|
1484 |
-
msgid ""
|
1485 |
-
"Scan checks are not required to pass, however they could cause issues on "
|
1486 |
-
"some systems."
|
1487 |
-
msgstr ""
|
1488 |
-
|
1489 |
-
#: views/packages/main/s2.scan1.php:251
|
1490 |
-
msgid ""
|
1491 |
-
"Please review the details for each section by clicking on the detail title."
|
1492 |
-
msgstr ""
|
1493 |
-
|
1494 |
-
#: views/packages/main/s2.scan1.php:258
|
1495 |
-
msgid "Do you want to continue?"
|
1496 |
-
msgstr ""
|
1497 |
-
|
1498 |
-
#: views/packages/main/s2.scan1.php:260
|
1499 |
-
msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
|
1500 |
-
msgstr ""
|
1501 |
-
|
1502 |
-
#: views/packages/main/s2.scan1.php:261
|
1503 |
-
msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
|
1504 |
-
msgstr ""
|
1505 |
-
|
1506 |
-
#: views/packages/main/s2.scan1.php:263
|
1507 |
-
msgid "Yes. Continue without applying any file filters."
|
1508 |
-
msgstr ""
|
1509 |
-
|
1510 |
-
#: views/packages/main/s2.scan1.php:268
|
1511 |
-
msgid "Rescan"
|
1512 |
-
msgstr ""
|
1513 |
-
|
1514 |
-
#: views/packages/main/s2.scan1.php:414
|
1515 |
-
msgid "Unable to perform a full scan, please try the following actions:"
|
1516 |
-
msgstr ""
|
1517 |
-
|
1518 |
-
#: views/packages/main/s2.scan1.php:415
|
1519 |
-
msgid ""
|
1520 |
-
"1. Go back and create a root path directory filter to validate the site is "
|
1521 |
-
"scan-able."
|
1522 |
-
msgstr ""
|
1523 |
-
|
1524 |
-
#: views/packages/main/s2.scan1.php:416
|
1525 |
-
msgid ""
|
1526 |
-
"2. Continue to add/remove filters to isolate which path is causing issues."
|
1527 |
-
msgstr ""
|
1528 |
-
|
1529 |
-
#: views/packages/main/s2.scan1.php:417
|
1530 |
-
msgid "3. This message will go away once the correct filters are applied."
|
1531 |
-
msgstr ""
|
1532 |
-
|
1533 |
-
#: views/packages/main/s2.scan1.php:419
|
1534 |
-
msgid "Common Issues:"
|
1535 |
-
msgstr ""
|
1536 |
-
|
1537 |
-
#: views/packages/main/s2.scan1.php:420
|
1538 |
-
msgid ""
|
1539 |
-
"- On some budget hosts scanning over 30k files can lead to timeout/gateway "
|
1540 |
-
"issues. Consider scanning only your main WordPress site and avoid trying to "
|
1541 |
-
"backup other external directories."
|
1542 |
-
msgstr ""
|
1543 |
-
|
1544 |
-
#: views/packages/main/s2.scan1.php:421
|
1545 |
-
msgid ""
|
1546 |
-
"- Symbolic link recursion can cause timeouts. Ask your server admin if any "
|
1547 |
-
"are present in the scan path. If they are add the full path as a filter and "
|
1548 |
-
"try running the scan again."
|
1549 |
-
msgstr ""
|
1550 |
-
|
1551 |
-
#: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
|
1552 |
-
#: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
|
1553 |
-
msgid "Notice"
|
1554 |
-
msgstr ""
|
1555 |
-
|
1556 |
-
#: views/packages/main/s2.scan1.php:436
|
1557 |
-
msgid "Good"
|
1558 |
-
msgstr ""
|
1559 |
-
|
1560 |
-
#: views/packages/main/s2.scan1.php:437
|
1561 |
-
msgid "Fail"
|
1562 |
-
msgstr ""
|
1563 |
-
|
1564 |
-
#: views/packages/main/s2.scan2.php:7
|
1565 |
-
msgid "Server"
|
1566 |
-
msgstr ""
|
1567 |
-
|
1568 |
-
#: views/packages/main/s2.scan2.php:8
|
1569 |
-
msgid "Show Diagnostics"
|
1570 |
-
msgstr ""
|
1571 |
-
|
1572 |
-
#: views/packages/main/s2.scan2.php:63
|
1573 |
-
#: views/tools/diagnostics/inc.settings.php:51
|
1574 |
-
msgid "Web Server"
|
1575 |
-
msgstr ""
|
1576 |
-
|
1577 |
-
#: views/packages/main/s2.scan2.php:64
|
1578 |
-
msgid "Supported web servers: "
|
1579 |
-
msgstr ""
|
1580 |
-
|
1581 |
-
#: views/packages/main/s2.scan2.php:69
|
1582 |
-
msgid ""
|
1583 |
-
"The minimum PHP version supported by Duplicator is 5.2.9. It is highly "
|
1584 |
-
"recommended to use PHP 5.3+ for improved stability. For international "
|
1585 |
-
"language support please use PHP 7.0+."
|
1586 |
-
msgstr ""
|
1587 |
-
|
1588 |
-
#: views/packages/main/s2.scan2.php:74
|
1589 |
-
msgid "PHP Open Base Dir"
|
1590 |
-
msgstr ""
|
1591 |
-
|
1592 |
-
#: views/packages/main/s2.scan2.php:75
|
1593 |
-
msgid ""
|
1594 |
-
"Issues might occur when [open_basedir] is enabled. Work with your server "
|
1595 |
-
"admin to disable this value in the php.ini file if you’re having issues "
|
1596 |
-
"building a package."
|
1597 |
-
msgstr ""
|
1598 |
-
|
1599 |
-
#: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
|
1600 |
-
msgid "PHP Max Execution Time"
|
1601 |
-
msgstr ""
|
1602 |
-
|
1603 |
-
#: views/packages/main/s2.scan2.php:81
|
1604 |
-
msgid ""
|
1605 |
-
"Timeouts may occur for larger packages when [max_execution_time] time in the "
|
1606 |
-
"php.ini is too low. A value of 0 (recommended) indicates that PHP has no "
|
1607 |
-
"time limits. An attempt is made to override this value if the server allows "
|
1608 |
-
"it."
|
1609 |
-
msgstr ""
|
1610 |
-
|
1611 |
-
#: views/packages/main/s2.scan2.php:84
|
1612 |
-
msgid ""
|
1613 |
-
"Note: Timeouts can also be set at the web server layer, so if the PHP max "
|
1614 |
-
"timeout passes and you still see a build timeout messages, then your web "
|
1615 |
-
"server could be killing the process. If you are on a budget host and "
|
1616 |
-
"limited on processing time, consider using the database or file filters to "
|
1617 |
-
"shrink the size of your overall package. However use caution as excluding "
|
1618 |
-
"the wrong resources can cause your install to not work properly."
|
1619 |
-
msgstr ""
|
1620 |
-
|
1621 |
-
#: views/packages/main/s2.scan2.php:92
|
1622 |
-
msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
|
1623 |
-
msgstr ""
|
1624 |
-
|
1625 |
-
#: views/packages/main/s2.scan2.php:112
|
1626 |
-
msgid "WordPress Version"
|
1627 |
-
msgstr ""
|
1628 |
-
|
1629 |
-
#: views/packages/main/s2.scan2.php:113
|
1630 |
-
#, php-format
|
1631 |
-
msgid ""
|
1632 |
-
"It is recommended to have a version of WordPress that is greater than %1$s. "
|
1633 |
-
"Older version of WordPress can lead to migration issues and are a security "
|
1634 |
-
"risk. If possible please update your WordPress site to the latest version."
|
1635 |
-
msgstr ""
|
1636 |
-
|
1637 |
-
#: views/packages/main/s2.scan2.php:117
|
1638 |
-
msgid "Core Files"
|
1639 |
-
msgstr ""
|
1640 |
-
|
1641 |
-
#: views/packages/main/s2.scan2.php:123
|
1642 |
-
msgid ""
|
1643 |
-
"The core WordPress paths below will <u>not</u> be included in the archive. "
|
1644 |
-
"These paths are required for WordPress to function!"
|
1645 |
-
msgstr ""
|
1646 |
-
|
1647 |
-
#: views/packages/main/s2.scan2.php:134
|
1648 |
-
msgid ""
|
1649 |
-
"The core WordPress file below will <u>not</u> be included in the archive. "
|
1650 |
-
"This file is required for WordPress to function!"
|
1651 |
-
msgstr ""
|
1652 |
-
|
1653 |
-
#: views/packages/main/s2.scan2.php:147
|
1654 |
-
msgid " to the new location for the site to function properly."
|
1655 |
-
msgstr ""
|
1656 |
-
|
1657 |
-
#: views/packages/main/s2.scan2.php:153
|
1658 |
-
msgid ""
|
1659 |
-
"If the scanner is unable to locate the wp-config.php file in the root "
|
1660 |
-
"directory, then you will need to manually copy it to its new location. This "
|
1661 |
-
"check will also look for core WordPress paths that should be included in the "
|
1662 |
-
"archive for WordPress to work correctly."
|
1663 |
-
msgstr ""
|
1664 |
-
|
1665 |
-
#: views/packages/main/s2.scan2.php:172
|
1666 |
-
msgid "Multisite: Unsupported"
|
1667 |
-
msgstr ""
|
1668 |
-
|
1669 |
-
#: views/packages/main/s2.scan2.php:173
|
1670 |
-
msgid ""
|
1671 |
-
"Duplicator does not support WordPress multisite migrations. We recommend "
|
1672 |
-
"using Duplicator Pro which currently supports full multisite migrations and "
|
1673 |
-
"subsite to standalone site migrations."
|
1674 |
-
msgstr ""
|
1675 |
-
|
1676 |
-
#: views/packages/main/s2.scan2.php:177
|
1677 |
-
msgid ""
|
1678 |
-
"While it is not recommended you can still continue with the build of this "
|
1679 |
-
"package. Please note that at install time additional manual custom "
|
1680 |
-
"configurations will need to be made to finalize this multisite migration."
|
1681 |
-
msgstr ""
|
1682 |
-
|
1683 |
-
#: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
|
1684 |
-
msgid "upgrade to pro"
|
1685 |
-
msgstr ""
|
1686 |
-
|
1687 |
-
#: views/packages/main/s2.scan2.php:181
|
1688 |
-
msgid "Multisite: N/A"
|
1689 |
-
msgstr ""
|
1690 |
-
|
1691 |
-
#: views/packages/main/s2.scan2.php:182
|
1692 |
-
msgid ""
|
1693 |
-
"This is not a multisite install so duplication will proceed without issue. "
|
1694 |
-
"Duplicator does not officially support multisite. However, Duplicator Pro "
|
1695 |
-
"supports duplication of a full multisite network and also has the ability to "
|
1696 |
-
"install a multisite subsite as a standalone site."
|
1697 |
-
msgstr ""
|
1698 |
-
|
1699 |
-
#: views/packages/main/s2.scan3.php:6
|
1700 |
-
#: views/tools/diagnostics/inc.settings.php:55
|
1701 |
-
msgid "Root Path"
|
1702 |
-
msgstr ""
|
1703 |
-
|
1704 |
-
#: views/packages/main/s2.scan3.php:23
|
1705 |
-
msgid "Show Scan Details"
|
1706 |
-
msgstr ""
|
1707 |
-
|
1708 |
-
#: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
|
1709 |
-
#: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
|
1710 |
-
#: views/tools/diagnostics/inc.settings.php:167
|
1711 |
-
msgid "Enabled"
|
1712 |
-
msgstr ""
|
1713 |
-
|
1714 |
-
#: views/packages/main/s2.scan3.php:44
|
1715 |
-
msgid "Archive Size"
|
1716 |
-
msgstr ""
|
1717 |
-
|
1718 |
-
#: views/packages/main/s2.scan3.php:45
|
1719 |
-
msgid ""
|
1720 |
-
"This size includes only files BEFORE compression is applied. It does not "
|
1721 |
-
"include the size of the database script or any applied filters. Once "
|
1722 |
-
"complete the package size will be smaller than this number."
|
1723 |
-
msgstr ""
|
1724 |
-
|
1725 |
-
#: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
|
1726 |
-
#: views/packages/main/s2.scan3.php:442
|
1727 |
-
msgid "uncompressed"
|
1728 |
-
msgstr ""
|
1729 |
-
|
1730 |
-
#: views/packages/main/s2.scan3.php:56
|
1731 |
-
msgid "Database only"
|
1732 |
-
msgstr ""
|
1733 |
-
|
1734 |
-
#: views/packages/main/s2.scan3.php:60
|
1735 |
-
msgid ""
|
1736 |
-
"Only the database and a copy of the installer.php will be included in the "
|
1737 |
-
"archive.zip file."
|
1738 |
-
msgstr ""
|
1739 |
-
|
1740 |
-
#: views/packages/main/s2.scan3.php:67
|
1741 |
-
msgid "Skip archive scan enabled"
|
1742 |
-
msgstr ""
|
1743 |
-
|
1744 |
-
#: views/packages/main/s2.scan3.php:71
|
1745 |
-
msgid ""
|
1746 |
-
"All file checks are skipped. This could cause problems during extraction if "
|
1747 |
-
"problematic files are included."
|
1748 |
-
msgstr ""
|
1749 |
-
|
1750 |
-
#: views/packages/main/s2.scan3.php:73
|
1751 |
-
msgid " Disable the advanced option to re-enable file controls."
|
1752 |
-
msgstr ""
|
1753 |
-
|
1754 |
-
#: views/packages/main/s2.scan3.php:84
|
1755 |
-
msgid "Size Checks"
|
1756 |
-
msgstr ""
|
1757 |
-
|
1758 |
-
#: views/packages/main/s2.scan3.php:89
|
1759 |
-
msgid "File Count"
|
1760 |
-
msgstr ""
|
1761 |
-
|
1762 |
-
#: views/packages/main/s2.scan3.php:90
|
1763 |
-
msgid "Directory Count"
|
1764 |
-
msgstr ""
|
1765 |
-
|
1766 |
-
#: views/packages/main/s2.scan3.php:92
|
1767 |
-
msgid ""
|
1768 |
-
"Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
|
1769 |
-
msgstr ""
|
1770 |
-
|
1771 |
-
#: views/packages/main/s2.scan3.php:93
|
1772 |
-
msgid "more details..."
|
1773 |
-
msgstr ""
|
1774 |
-
|
1775 |
-
#: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
|
1776 |
-
#: views/packages/main/s3.build.php:203 views/packages/screen.php:53
|
1777 |
-
msgid "Overview"
|
1778 |
-
msgstr ""
|
1779 |
-
|
1780 |
-
#: views/packages/main/s2.scan3.php:99
|
1781 |
-
#, php-format
|
1782 |
-
msgid ""
|
1783 |
-
"This notice is triggered at [%s] and can be ignored on most hosts. If "
|
1784 |
-
"during the build process you see a \"Host Build Interrupt\" message then "
|
1785 |
-
"this host has strict processing limits. Below are some options you can take "
|
1786 |
-
"to overcome constraints set up on this host."
|
1787 |
-
msgstr ""
|
1788 |
-
|
1789 |
-
#: views/packages/main/s2.scan3.php:103
|
1790 |
-
msgid "Timeout Options"
|
1791 |
-
msgstr ""
|
1792 |
-
|
1793 |
-
#: views/packages/main/s2.scan3.php:105
|
1794 |
-
msgid ""
|
1795 |
-
"Apply the \"Quick Filters\" below or click the back button to apply on "
|
1796 |
-
"previous page."
|
1797 |
-
msgstr ""
|
1798 |
-
|
1799 |
-
#: views/packages/main/s2.scan3.php:106
|
1800 |
-
msgid "See the FAQ link to adjust this hosts timeout limits: "
|
1801 |
-
msgstr ""
|
1802 |
-
|
1803 |
-
#: views/packages/main/s2.scan3.php:106
|
1804 |
-
msgid "What can I try for Timeout Issues?"
|
1805 |
-
msgstr ""
|
1806 |
-
|
1807 |
-
#: views/packages/main/s2.scan3.php:107
|
1808 |
-
msgid "Consider trying multi-threaded support in "
|
1809 |
-
msgstr ""
|
1810 |
-
|
1811 |
-
#: views/packages/main/s2.scan3.php:108
|
1812 |
-
msgid "Duplicator Pro."
|
1813 |
-
msgstr ""
|
1814 |
-
|
1815 |
-
#: views/packages/main/s2.scan3.php:112
|
1816 |
-
#, php-format
|
1817 |
-
msgid ""
|
1818 |
-
"Files over %1$s are listed below. Larger files such as movies or zipped "
|
1819 |
-
"content can cause timeout issues on some budget hosts. If you are having "
|
1820 |
-
"issues creating a package try excluding the directory paths below or go back "
|
1821 |
-
"to Step 1 and add them."
|
1822 |
-
msgstr ""
|
1823 |
-
|
1824 |
-
#: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
|
1825 |
-
#: views/packages/main/s2.scan3.php:257
|
1826 |
-
msgid "Quick Filters"
|
1827 |
-
msgstr ""
|
1828 |
-
|
1829 |
-
#: views/packages/main/s2.scan3.php:122
|
1830 |
-
msgid "Large Files"
|
1831 |
-
msgstr ""
|
1832 |
-
|
1833 |
-
#: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
|
1834 |
-
msgid "Hide All"
|
1835 |
-
msgstr ""
|
1836 |
-
|
1837 |
-
#: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
|
1838 |
-
msgid "Show All"
|
1839 |
-
msgstr ""
|
1840 |
-
|
1841 |
-
#: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
|
1842 |
-
msgid ""
|
1843 |
-
"Core WordPress directories should not be filtered. Use caution when "
|
1844 |
-
"excluding files."
|
1845 |
-
msgstr ""
|
1846 |
-
|
1847 |
-
#: views/packages/main/s2.scan3.php:156
|
1848 |
-
msgid "No large files found during this scan."
|
1849 |
-
msgstr ""
|
1850 |
-
|
1851 |
-
#: views/packages/main/s2.scan3.php:159
|
1852 |
-
msgid ""
|
1853 |
-
"No large files found during this scan. If you're having issues building a "
|
1854 |
-
"package click the back button and try adding a file filter to non-essential "
|
1855 |
-
"files paths like wp-content/uploads. These excluded files can then be "
|
1856 |
-
"manually moved to the new location after you have ran the migration "
|
1857 |
-
"installer."
|
1858 |
-
msgstr ""
|
1859 |
-
|
1860 |
-
#: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
|
1861 |
-
msgid ""
|
1862 |
-
"*Checking a directory will exclude all items recursively from that path "
|
1863 |
-
"down. Please use caution when filtering directories."
|
1864 |
-
msgstr ""
|
1865 |
-
|
1866 |
-
#: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
|
1867 |
-
#: views/packages/main/s2.scan3.php:305
|
1868 |
-
msgid "Add Filters & Rescan"
|
1869 |
-
msgstr ""
|
1870 |
-
|
1871 |
-
#: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
|
1872 |
-
msgid "Copy Paths to Clipboard"
|
1873 |
-
msgstr ""
|
1874 |
-
|
1875 |
-
#: views/packages/main/s2.scan3.php:193
|
1876 |
-
msgid "Addon Sites"
|
1877 |
-
msgstr ""
|
1878 |
-
|
1879 |
-
#: views/packages/main/s2.scan3.php:199
|
1880 |
-
msgid ""
|
1881 |
-
"An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories "
|
1882 |
-
"within this site. If you confirm these to be separate sites, then it is "
|
1883 |
-
"recommended that you exclude them by checking the corresponding boxes below "
|
1884 |
-
"and clicking the 'Add Filters & Rescan' button. To backup the other sites "
|
1885 |
-
"install the plugin on the sites needing to be backed-up."
|
1886 |
-
msgstr ""
|
1887 |
-
|
1888 |
-
#: views/packages/main/s2.scan3.php:222
|
1889 |
-
msgid "No add on sites found."
|
1890 |
-
msgstr ""
|
1891 |
-
|
1892 |
-
#: views/packages/main/s2.scan3.php:228
|
1893 |
-
msgid "*Checking a directory will exclude all items in that path recursively."
|
1894 |
-
msgstr ""
|
1895 |
-
|
1896 |
-
#: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
|
1897 |
-
msgid "Name Checks"
|
1898 |
-
msgstr ""
|
1899 |
-
|
1900 |
-
#: views/packages/main/s2.scan3.php:249
|
1901 |
-
msgid ""
|
1902 |
-
"Unicode and special characters such as \"*?><:/\\|\", can be problematic on "
|
1903 |
-
"some hosts."
|
1904 |
-
msgstr ""
|
1905 |
-
|
1906 |
-
#: views/packages/main/s2.scan3.php:250
|
1907 |
-
msgid ""
|
1908 |
-
" Only consider using this filter if the package build is failing. Select "
|
1909 |
-
"files that are not important to your site or you can migrate manually."
|
1910 |
-
msgstr ""
|
1911 |
-
|
1912 |
-
#: views/packages/main/s2.scan3.php:251
|
1913 |
-
msgid ""
|
1914 |
-
"If this environment/system and the system where it will be installed are set "
|
1915 |
-
"up to support Unicode and long paths then these filters can be ignored. If "
|
1916 |
-
"you run into issues with creating or installing a package, then is "
|
1917 |
-
"recommended to filter these paths."
|
1918 |
-
msgstr ""
|
1919 |
-
|
1920 |
-
#: views/packages/main/s2.scan3.php:296
|
1921 |
-
msgid "No file/directory name warnings found."
|
1922 |
-
msgstr ""
|
1923 |
-
|
1924 |
-
#: views/packages/main/s2.scan3.php:319
|
1925 |
-
msgid "Read Checks"
|
1926 |
-
msgstr ""
|
1927 |
-
|
1928 |
-
#: views/packages/main/s2.scan3.php:324
|
1929 |
-
msgid ""
|
1930 |
-
"PHP is unable to read the following items and they will NOT be included in "
|
1931 |
-
"the package. Please work with your host to adjust the permissions or "
|
1932 |
-
"resolve the symbolic-link(s) shown in the lists below. If these items are "
|
1933 |
-
"not needed then this notice can be ignored."
|
1934 |
-
msgstr ""
|
1935 |
-
|
1936 |
-
#: views/packages/main/s2.scan3.php:330
|
1937 |
-
msgid "Unreadable Items:"
|
1938 |
-
msgstr ""
|
1939 |
-
|
1940 |
-
#: views/packages/main/s2.scan3.php:337
|
1941 |
-
msgid "No unreadable items found."
|
1942 |
-
msgstr ""
|
1943 |
-
|
1944 |
-
#: views/packages/main/s2.scan3.php:341
|
1945 |
-
msgid "Recursive Links:"
|
1946 |
-
msgstr ""
|
1947 |
-
|
1948 |
-
#: views/packages/main/s2.scan3.php:348
|
1949 |
-
msgid "No recursive sym-links found."
|
1950 |
-
msgstr ""
|
1951 |
-
|
1952 |
-
#: views/packages/main/s2.scan3.php:376
|
1953 |
-
msgid "Database Size:"
|
1954 |
-
msgstr ""
|
1955 |
-
|
1956 |
-
#: views/packages/main/s2.scan3.php:377
|
1957 |
-
msgid ""
|
1958 |
-
"The database size represents only the included tables. The process for "
|
1959 |
-
"gathering the size uses the query SHOW TABLE STATUS. The overall size of "
|
1960 |
-
"the database file can impact the final size of the package."
|
1961 |
-
msgstr ""
|
1962 |
-
|
1963 |
-
#: views/packages/main/s2.scan3.php:391
|
1964 |
-
msgid "TOTAL SIZE"
|
1965 |
-
msgstr ""
|
1966 |
-
|
1967 |
-
#: views/packages/main/s2.scan3.php:394
|
1968 |
-
msgid "Records"
|
1969 |
-
msgstr ""
|
1970 |
-
|
1971 |
-
#: views/packages/main/s2.scan3.php:397
|
1972 |
-
#, php-format
|
1973 |
-
msgid ""
|
1974 |
-
"Total size and row counts are approximate values. The thresholds that "
|
1975 |
-
"trigger notices are %1$s records total for the entire database. Larger "
|
1976 |
-
"databases take more time to process. On some budget hosts that have cpu/"
|
1977 |
-
"memory/timeout limits this may cause issues."
|
1978 |
-
msgstr ""
|
1979 |
-
|
1980 |
-
#: views/packages/main/s2.scan3.php:402
|
1981 |
-
msgid "TABLE DETAILS:"
|
1982 |
-
msgstr ""
|
1983 |
-
|
1984 |
-
#: views/packages/main/s2.scan3.php:404
|
1985 |
-
#, php-format
|
1986 |
-
msgid ""
|
1987 |
-
"The notices for tables are %1$s records or names with upper-case "
|
1988 |
-
"characters. Individual tables will not trigger a notice message, but can "
|
1989 |
-
"help narrow down issues if they occur later on."
|
1990 |
-
msgstr ""
|
1991 |
-
|
1992 |
-
#: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
|
1993 |
-
msgid "RECOMMENDATIONS:"
|
1994 |
-
msgstr ""
|
1995 |
-
|
1996 |
-
#: views/packages/main/s2.scan3.php:414
|
1997 |
-
msgid "repair and optimization"
|
1998 |
-
msgstr ""
|
1999 |
-
|
2000 |
-
#: views/packages/main/s2.scan3.php:415
|
2001 |
-
#, php-format
|
2002 |
-
msgid "1. Run a %1$s on the table to improve the overall size and performance."
|
2003 |
-
msgstr ""
|
2004 |
-
|
2005 |
-
#: views/packages/main/s2.scan3.php:417
|
2006 |
-
msgid ""
|
2007 |
-
"2. Remove post revisions and stale data from tables. Tables such as logs, "
|
2008 |
-
"statistical or other non-critical data should be cleared."
|
2009 |
-
msgstr ""
|
2010 |
-
|
2011 |
-
#: views/packages/main/s2.scan3.php:419
|
2012 |
-
msgid "Enable mysqldump"
|
2013 |
-
msgstr ""
|
2014 |
-
|
2015 |
-
#: views/packages/main/s2.scan3.php:420
|
2016 |
-
#, php-format
|
2017 |
-
msgid "3. %1$s if this host supports the option."
|
2018 |
-
msgstr ""
|
2019 |
-
|
2020 |
-
#: views/packages/main/s2.scan3.php:422
|
2021 |
-
msgid "lower_case_table_names"
|
2022 |
-
msgstr ""
|
2023 |
-
|
2024 |
-
#: views/packages/main/s2.scan3.php:423
|
2025 |
-
#, php-format
|
2026 |
-
msgid ""
|
2027 |
-
"4. For table name case sensitivity issues either rename the table with lower "
|
2028 |
-
"case characters or be prepared to work with the %1$s system variable setting."
|
2029 |
-
msgstr ""
|
2030 |
-
|
2031 |
-
#: views/packages/main/s2.scan3.php:434
|
2032 |
-
msgid "Total Size"
|
2033 |
-
msgstr ""
|
2034 |
-
|
2035 |
-
#: views/packages/main/s2.scan3.php:439
|
2036 |
-
msgid "Total Size:"
|
2037 |
-
msgstr ""
|
2038 |
-
|
2039 |
-
#: views/packages/main/s2.scan3.php:440
|
2040 |
-
msgid "The total size of the site (files plus database)."
|
2041 |
-
msgstr ""
|
2042 |
-
|
2043 |
-
#: views/packages/main/s2.scan3.php:450
|
2044 |
-
#, php-format
|
2045 |
-
msgid ""
|
2046 |
-
"The build can't continue because the total size of files and the database "
|
2047 |
-
"exceeds the %s limit that can be processed when creating a DupArchive "
|
2048 |
-
"package. "
|
2049 |
-
msgstr ""
|
2050 |
-
|
2051 |
-
#: views/packages/main/s2.scan3.php:451
|
2052 |
-
msgid ""
|
2053 |
-
"<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-"
|
2054 |
-
"recommendations').toggle()\">Click for recommendations.</a>"
|
2055 |
-
msgstr ""
|
2056 |
-
|
2057 |
-
#: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
|
2058 |
-
#: views/settings/packages.php:208
|
2059 |
-
msgid "Archive Engine"
|
2060 |
-
msgstr ""
|
2061 |
-
|
2062 |
-
#: views/packages/main/s2.scan3.php:459
|
2063 |
-
#, php-format
|
2064 |
-
msgid ""
|
2065 |
-
" With DupArchive, Duplicator is restricted to processing sites up to %s. To "
|
2066 |
-
"process larger sites, consider these recommendations. "
|
2067 |
-
msgstr ""
|
2068 |
-
|
2069 |
-
#: views/packages/main/s2.scan3.php:468
|
2070 |
-
msgid "Step 1"
|
2071 |
-
msgstr ""
|
2072 |
-
|
2073 |
-
#: views/packages/main/s2.scan3.php:469
|
2074 |
-
#, php-format
|
2075 |
-
msgid "- Add data filters to get the package size under %s: "
|
2076 |
-
msgstr ""
|
2077 |
-
|
2078 |
-
#: views/packages/main/s2.scan3.php:471
|
2079 |
-
msgid ""
|
2080 |
-
"- In the 'Size Checks' section above consider adding filters (if notice is "
|
2081 |
-
"shown)."
|
2082 |
-
msgstr ""
|
2083 |
-
|
2084 |
-
#: views/packages/main/s2.scan3.php:473
|
2085 |
-
#, php-format
|
2086 |
-
msgid "- In %s consider adding file/directory or database table filters."
|
2087 |
-
msgstr ""
|
2088 |
-
|
2089 |
-
#: views/packages/main/s2.scan3.php:477
|
2090 |
-
msgid "covered here."
|
2091 |
-
msgstr ""
|
2092 |
-
|
2093 |
-
#: views/packages/main/s2.scan3.php:478
|
2094 |
-
#, php-format
|
2095 |
-
msgid "- Perform a two part install %s"
|
2096 |
-
msgstr ""
|
2097 |
-
|
2098 |
-
#: views/packages/main/s2.scan3.php:481
|
2099 |
-
msgid "ZipArchive Engine"
|
2100 |
-
msgstr ""
|
2101 |
-
|
2102 |
-
#: views/packages/main/s2.scan3.php:482
|
2103 |
-
#, php-format
|
2104 |
-
msgid ""
|
2105 |
-
"- Switch to the %s which requires a capable hosting provider (VPS "
|
2106 |
-
"recommended)."
|
2107 |
-
msgstr ""
|
2108 |
-
|
2109 |
-
#: views/packages/main/s2.scan3.php:486
|
2110 |
-
#, php-format
|
2111 |
-
msgid "- Consider upgrading to %s for large site support. (unlimited)"
|
2112 |
-
msgstr ""
|
2113 |
-
|
2114 |
-
#: views/packages/main/s2.scan3.php:496
|
2115 |
-
msgid "Migrate large, multi-gig sites with"
|
2116 |
-
msgstr ""
|
2117 |
-
|
2118 |
-
#: views/packages/main/s2.scan3.php:511
|
2119 |
-
msgid "Scan Details"
|
2120 |
-
msgstr ""
|
2121 |
-
|
2122 |
-
#: views/packages/main/s2.scan3.php:518
|
2123 |
-
msgid "Copy Quick Filter Paths"
|
2124 |
-
msgstr ""
|
2125 |
-
|
2126 |
-
#: views/packages/main/s2.scan3.php:537
|
2127 |
-
msgid "Name:"
|
2128 |
-
msgstr ""
|
2129 |
-
|
2130 |
-
#: views/packages/main/s2.scan3.php:538
|
2131 |
-
msgid "Host:"
|
2132 |
-
msgstr ""
|
2133 |
-
|
2134 |
-
#: views/packages/main/s2.scan3.php:540
|
2135 |
-
msgid "Build Mode:"
|
2136 |
-
msgstr ""
|
2137 |
-
|
2138 |
-
#: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
|
2139 |
-
msgid "File Filters"
|
2140 |
-
msgstr ""
|
2141 |
-
|
2142 |
-
#: views/packages/main/s2.scan3.php:557
|
2143 |
-
#: views/tools/diagnostics/inc.settings.php:167
|
2144 |
-
msgid "Disabled"
|
2145 |
-
msgstr ""
|
2146 |
-
|
2147 |
-
#: views/packages/main/s2.scan3.php:571
|
2148 |
-
msgid "No custom directory filters set."
|
2149 |
-
msgstr ""
|
2150 |
-
|
2151 |
-
#: views/packages/main/s2.scan3.php:581
|
2152 |
-
msgid "No file extension filters have been set."
|
2153 |
-
msgstr ""
|
2154 |
-
|
2155 |
-
#: views/packages/main/s2.scan3.php:593
|
2156 |
-
msgid "No custom file filters set."
|
2157 |
-
msgstr ""
|
2158 |
-
|
2159 |
-
#: views/packages/main/s2.scan3.php:597
|
2160 |
-
msgid "Auto Directory Filters"
|
2161 |
-
msgstr ""
|
2162 |
-
|
2163 |
-
#: views/packages/main/s2.scan3.php:603
|
2164 |
-
msgid "Auto File Filters"
|
2165 |
-
msgstr ""
|
2166 |
-
|
2167 |
-
#: views/packages/main/s2.scan3.php:616
|
2168 |
-
msgid "Path filters will be skipped during the archive process when enabled."
|
2169 |
-
msgstr ""
|
2170 |
-
|
2171 |
-
#: views/packages/main/s2.scan3.php:618
|
2172 |
-
msgid "[view json result report]"
|
2173 |
-
msgstr ""
|
2174 |
-
|
2175 |
-
#: views/packages/main/s2.scan3.php:621
|
2176 |
-
msgid "Auto filters are applied to prevent archiving other backup sets."
|
2177 |
-
msgstr ""
|
2178 |
-
|
2179 |
-
#: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
|
2180 |
-
msgid "Click to Copy"
|
2181 |
-
msgstr ""
|
2182 |
-
|
2183 |
-
#: views/packages/main/s2.scan3.php:646
|
2184 |
-
msgid ""
|
2185 |
-
"Copy the paths above and apply them as needed on Step 1 > Archive > "
|
2186 |
-
"Files section."
|
2187 |
-
msgstr ""
|
2188 |
-
|
2189 |
-
#: views/packages/main/s2.scan3.php:663
|
2190 |
-
msgid "Directory applied filter set."
|
2191 |
-
msgstr ""
|
2192 |
-
|
2193 |
-
#: views/packages/main/s2.scan3.php:690
|
2194 |
-
msgid "No directories have been selected!"
|
2195 |
-
msgstr ""
|
2196 |
-
|
2197 |
-
#: views/packages/main/s2.scan3.php:694
|
2198 |
-
msgid "No files have been selected!"
|
2199 |
-
msgstr ""
|
2200 |
-
|
2201 |
-
#: views/packages/main/s2.scan3.php:732
|
2202 |
-
msgid "Copied to Clipboard!"
|
2203 |
-
msgstr ""
|
2204 |
-
|
2205 |
-
#: views/packages/main/s2.scan3.php:734
|
2206 |
-
msgid "Manual copy of selected text required on this browser."
|
2207 |
-
msgstr ""
|
2208 |
-
|
2209 |
-
#: views/packages/main/s2.scan3.php:741
|
2210 |
-
msgid "Initializing Please Wait..."
|
2211 |
-
msgstr ""
|
2212 |
-
|
2213 |
-
#: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
|
2214 |
-
msgid ""
|
2215 |
-
"Error applying filters. Please go back to Step 1 to add filter manually!"
|
2216 |
-
msgstr ""
|
2217 |
-
|
2218 |
-
#: views/packages/main/s2.scan3.php:867
|
2219 |
-
msgid "Unable to report on any tables"
|
2220 |
-
msgstr ""
|
2221 |
-
|
2222 |
-
#: views/packages/main/s2.scan3.php:893
|
2223 |
-
msgid "Unable to report on database stats"
|
2224 |
-
msgstr ""
|
2225 |
-
|
2226 |
-
#: views/packages/main/s3.build.php:16
|
2227 |
-
msgid "Help review the plugin"
|
2228 |
-
msgstr ""
|
2229 |
-
|
2230 |
-
#: views/packages/main/s3.build.php:19
|
2231 |
-
msgid "Want more power? Try"
|
2232 |
-
msgstr ""
|
2233 |
-
|
2234 |
-
#: views/packages/main/s3.build.php:84
|
2235 |
-
msgid "Step 3: Build Package"
|
2236 |
-
msgstr ""
|
2237 |
-
|
2238 |
-
#: views/packages/main/s3.build.php:114
|
2239 |
-
msgid "Building Package"
|
2240 |
-
msgstr ""
|
2241 |
-
|
2242 |
-
#: views/packages/main/s3.build.php:117
|
2243 |
-
msgid "Keep this window open and do not close during the build process."
|
2244 |
-
msgstr ""
|
2245 |
-
|
2246 |
-
#: views/packages/main/s3.build.php:118
|
2247 |
-
msgid "This may take several minutes to complete."
|
2248 |
-
msgstr ""
|
2249 |
-
|
2250 |
-
#: views/packages/main/s3.build.php:122
|
2251 |
-
msgid "Build Status"
|
2252 |
-
msgstr ""
|
2253 |
-
|
2254 |
-
#: views/packages/main/s3.build.php:129
|
2255 |
-
msgid "Package Completed"
|
2256 |
-
msgstr ""
|
2257 |
-
|
2258 |
-
#: views/packages/main/s3.build.php:134
|
2259 |
-
msgid "Process Time"
|
2260 |
-
msgstr ""
|
2261 |
-
|
2262 |
-
#: views/packages/main/s3.build.php:140
|
2263 |
-
msgid "Download Files"
|
2264 |
-
msgstr ""
|
2265 |
-
|
2266 |
-
#: views/packages/main/s3.build.php:142
|
2267 |
-
msgid "Click to download installer file"
|
2268 |
-
msgstr ""
|
2269 |
-
|
2270 |
-
#: views/packages/main/s3.build.php:145
|
2271 |
-
msgid "Click to download archive file"
|
2272 |
-
msgstr ""
|
2273 |
-
|
2274 |
-
#: views/packages/main/s3.build.php:151
|
2275 |
-
msgid "Click to download both files"
|
2276 |
-
msgstr ""
|
2277 |
-
|
2278 |
-
#: views/packages/main/s3.build.php:152
|
2279 |
-
msgid "One-Click Download"
|
2280 |
-
msgstr ""
|
2281 |
-
|
2282 |
-
#: views/packages/main/s3.build.php:155
|
2283 |
-
msgid "One Click:"
|
2284 |
-
msgstr ""
|
2285 |
-
|
2286 |
-
#: views/packages/main/s3.build.php:156
|
2287 |
-
msgid ""
|
2288 |
-
"Clicking this link will open both the installer and archive download prompts "
|
2289 |
-
"at the same time. On some browsers you may have to disable pop-up warnings "
|
2290 |
-
"on this domain for this to work correctly."
|
2291 |
-
msgstr ""
|
2292 |
-
|
2293 |
-
#: views/packages/main/s3.build.php:164
|
2294 |
-
msgid "How do I install this Package?"
|
2295 |
-
msgstr ""
|
2296 |
-
|
2297 |
-
#: views/packages/main/s3.build.php:176
|
2298 |
-
msgid "Host Build Interrupt"
|
2299 |
-
msgstr ""
|
2300 |
-
|
2301 |
-
#: views/packages/main/s3.build.php:177
|
2302 |
-
msgid "This server cannot complete the build due to host setup constraints."
|
2303 |
-
msgstr ""
|
2304 |
-
|
2305 |
-
#: views/packages/main/s3.build.php:178
|
2306 |
-
msgid ""
|
2307 |
-
"To get past this hosts limitation consider the options below by clicking "
|
2308 |
-
"each section."
|
2309 |
-
msgstr ""
|
2310 |
-
|
2311 |
-
#: views/packages/main/s3.build.php:184
|
2312 |
-
msgid "Option 1: Try DupArchive"
|
2313 |
-
msgstr ""
|
2314 |
-
|
2315 |
-
#: views/packages/main/s3.build.php:188
|
2316 |
-
msgid "OPTION 1:"
|
2317 |
-
msgstr ""
|
2318 |
-
|
2319 |
-
#: views/packages/main/s3.build.php:190
|
2320 |
-
msgid ""
|
2321 |
-
"Enable the DupArchive format which is specific to Duplicator and designed to "
|
2322 |
-
"perform better on constrained budget hosts."
|
2323 |
-
msgstr ""
|
2324 |
-
|
2325 |
-
#: views/packages/main/s3.build.php:194
|
2326 |
-
msgid ""
|
2327 |
-
"Note: DupArchive on Duplicator only supports sites up to 500MB. If your "
|
2328 |
-
"site is over 500MB then use a file filter on step 1 to get the size below "
|
2329 |
-
"500MB or try the other options mentioned below. Alternatively, you may want "
|
2330 |
-
"to consider"
|
2331 |
-
msgstr ""
|
2332 |
-
|
2333 |
-
#: views/packages/main/s3.build.php:200
|
2334 |
-
msgid " which is capable of migrating sites much larger than 500MB."
|
2335 |
-
msgstr ""
|
2336 |
-
|
2337 |
-
#: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
|
2338 |
-
msgid "Please follow these steps:"
|
2339 |
-
msgstr ""
|
2340 |
-
|
2341 |
-
#: views/packages/main/s3.build.php:206
|
2342 |
-
msgid ""
|
2343 |
-
"On the scanner step check to make sure your package is under 500MB. If not "
|
2344 |
-
"see additional options below."
|
2345 |
-
msgstr ""
|
2346 |
-
|
2347 |
-
#: views/packages/main/s3.build.php:208
|
2348 |
-
msgid ""
|
2349 |
-
"Go to Duplicator > Settings > Packages Tab > Archive Engine >"
|
2350 |
-
msgstr ""
|
2351 |
-
|
2352 |
-
#: views/packages/main/s3.build.php:209
|
2353 |
-
msgid "Enable DupArchive"
|
2354 |
-
msgstr ""
|
2355 |
-
|
2356 |
-
#: views/packages/main/s3.build.php:211
|
2357 |
-
msgid "Build a new package using the new engine format."
|
2358 |
-
msgstr ""
|
2359 |
-
|
2360 |
-
#: views/packages/main/s3.build.php:215
|
2361 |
-
msgid ""
|
2362 |
-
"Note: The DupArchive engine will generate an archive.daf file. This file is "
|
2363 |
-
"very similar to a .zip except that it can only be extracted by the installer."
|
2364 |
-
"php file or the"
|
2365 |
-
msgstr ""
|
2366 |
-
|
2367 |
-
#: views/packages/main/s3.build.php:217
|
2368 |
-
msgid "commandline extraction tool"
|
2369 |
-
msgstr ""
|
2370 |
-
|
2371 |
-
#: views/packages/main/s3.build.php:225
|
2372 |
-
msgid "Option 2: File Filters"
|
2373 |
-
msgstr ""
|
2374 |
-
|
2375 |
-
#: views/packages/main/s3.build.php:229
|
2376 |
-
msgid "OPTION 2:"
|
2377 |
-
msgstr ""
|
2378 |
-
|
2379 |
-
#: views/packages/main/s3.build.php:231
|
2380 |
-
msgid ""
|
2381 |
-
"The first pass for reading files on some budget hosts maybe slow and have "
|
2382 |
-
"conflicts with strict timeout settings setup by the hosting provider. In "
|
2383 |
-
"these cases, it is recommended to retry the build by adding file filters to "
|
2384 |
-
"larger files/directories."
|
2385 |
-
msgstr ""
|
2386 |
-
|
2387 |
-
#: views/packages/main/s3.build.php:236
|
2388 |
-
msgid ""
|
2389 |
-
"For example, you could filter out the \"/wp-content/uploads/\" folder to "
|
2390 |
-
"create the package then move the files from that directory over manually. "
|
2391 |
-
"If this work-flow is not desired or does not work please check-out the other "
|
2392 |
-
"options below."
|
2393 |
-
msgstr ""
|
2394 |
-
|
2395 |
-
#: views/packages/main/s3.build.php:241
|
2396 |
-
msgid "Retry Build With Filters"
|
2397 |
-
msgstr ""
|
2398 |
-
|
2399 |
-
#: views/packages/main/s3.build.php:247
|
2400 |
-
msgid "Build Folder:"
|
2401 |
-
msgstr ""
|
2402 |
-
|
2403 |
-
#: views/packages/main/s3.build.php:248
|
2404 |
-
msgid ""
|
2405 |
-
"On some servers the build will continue to run in the background. To "
|
2406 |
-
"validate if a build is still running; open the 'tmp' folder above and see if "
|
2407 |
-
"the archive file is growing in size or check the main packages screen to see "
|
2408 |
-
"if the package completed. If it is not then your server has strict timeout "
|
2409 |
-
"constraints."
|
2410 |
-
msgstr ""
|
2411 |
-
|
2412 |
-
#: views/packages/main/s3.build.php:260
|
2413 |
-
msgid "Option 3: Two-Part Install"
|
2414 |
-
msgstr ""
|
2415 |
-
|
2416 |
-
#: views/packages/main/s3.build.php:264
|
2417 |
-
msgid "OPTION 3:"
|
2418 |
-
msgstr ""
|
2419 |
-
|
2420 |
-
#: views/packages/main/s3.build.php:266
|
2421 |
-
msgid ""
|
2422 |
-
"A two-part install minimizes server load and can avoid I/O and CPU issues "
|
2423 |
-
"encountered on some budget hosts. With this procedure you simply build a "
|
2424 |
-
"'database-only' archive, manually move the website files, and then run the "
|
2425 |
-
"installer to complete the process."
|
2426 |
-
msgstr ""
|
2427 |
-
|
2428 |
-
#: views/packages/main/s3.build.php:270
|
2429 |
-
msgid " Overview"
|
2430 |
-
msgstr ""
|
2431 |
-
|
2432 |
-
#: views/packages/main/s3.build.php:273
|
2433 |
-
msgid "Click the button below to go back to Step 1."
|
2434 |
-
msgstr ""
|
2435 |
-
|
2436 |
-
#: views/packages/main/s3.build.php:274
|
2437 |
-
msgid ""
|
2438 |
-
"On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
|
2439 |
-
msgstr ""
|
2440 |
-
|
2441 |
-
#: views/packages/main/s3.build.php:276
|
2442 |
-
msgid "Complete the package build and follow the "
|
2443 |
-
msgstr ""
|
2444 |
-
|
2445 |
-
#: views/packages/main/s3.build.php:286
|
2446 |
-
msgid "Yes. I have read the above overview and would like to continue!"
|
2447 |
-
msgstr ""
|
2448 |
-
|
2449 |
-
#: views/packages/main/s3.build.php:288
|
2450 |
-
msgid "Start Two-Part Install Process"
|
2451 |
-
msgstr ""
|
2452 |
-
|
2453 |
-
#: views/packages/main/s3.build.php:297
|
2454 |
-
msgid "Option 4: Configure Server"
|
2455 |
-
msgstr ""
|
2456 |
-
|
2457 |
-
#: views/packages/main/s3.build.php:301
|
2458 |
-
msgid "OPTION 4:"
|
2459 |
-
msgstr ""
|
2460 |
-
|
2461 |
-
#: views/packages/main/s3.build.php:302
|
2462 |
-
msgid ""
|
2463 |
-
"This option is available on some hosts that allow for users to adjust server "
|
2464 |
-
"configurations. With this option you will be directed to an FAQ page that "
|
2465 |
-
"will show various recommendations you can take to improve/unlock constraints "
|
2466 |
-
"set up on this server."
|
2467 |
-
msgstr ""
|
2468 |
-
|
2469 |
-
#: views/packages/main/s3.build.php:308
|
2470 |
-
msgid "Diagnose Server Setup"
|
2471 |
-
msgstr ""
|
2472 |
-
|
2473 |
-
#: views/packages/main/s3.build.php:312
|
2474 |
-
msgid "RUNTIME DETAILS"
|
2475 |
-
msgstr ""
|
2476 |
-
|
2477 |
-
#: views/packages/main/s3.build.php:315
|
2478 |
-
msgid "Allowed Runtime:"
|
2479 |
-
msgstr ""
|
2480 |
-
|
2481 |
-
#: views/packages/main/s3.build.php:319
|
2482 |
-
msgid "PHP Max Execution"
|
2483 |
-
msgstr ""
|
2484 |
-
|
2485 |
-
#: views/packages/main/s3.build.php:329
|
2486 |
-
msgid ""
|
2487 |
-
"This value is represented in seconds. A value of 0 means no timeout limit is "
|
2488 |
-
"set for PHP."
|
2489 |
-
msgstr ""
|
2490 |
-
|
2491 |
-
#: views/packages/main/s3.build.php:333 views/settings/packages.php:167
|
2492 |
-
msgid "Mode"
|
2493 |
-
msgstr ""
|
2494 |
-
|
2495 |
-
#: views/packages/main/s3.build.php:339
|
2496 |
-
msgid "PHP Max Execution Mode"
|
2497 |
-
msgstr ""
|
2498 |
-
|
2499 |
-
#: views/packages/main/s3.build.php:341
|
2500 |
-
msgid ""
|
2501 |
-
"If the value is [dynamic] then its possible for PHP to run longer than the "
|
2502 |
-
"default. If the value is [fixed] then PHP will not be allowed to run longer "
|
2503 |
-
"than the default. <br/><br/> If this value is larger than the [Allowed "
|
2504 |
-
"Runtime] above then the web server has been enabled with a timeout cap and "
|
2505 |
-
"is overriding the PHP max time setting."
|
2506 |
-
msgstr ""
|
2507 |
-
|
2508 |
-
#: views/packages/main/s3.build.php:362
|
2509 |
-
msgid "Read Package Log File"
|
2510 |
-
msgstr ""
|
2511 |
-
|
2512 |
-
#: views/packages/screen.php:64
|
2513 |
-
msgid ""
|
2514 |
-
"<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' "
|
2515 |
-
"section is the main interface for managing all the packages that have been "
|
2516 |
-
"created. A Package consists of two core files, the 'archive.zip' and the "
|
2517 |
-
"'installer.php' file. The archive file is a zip file containing all your "
|
2518 |
-
"WordPress files and a copy of your WordPress database. The installer file "
|
2519 |
-
"is a php file that when browsed to via a web browser presents a wizard that "
|
2520 |
-
"redeploys/installs the website by extracting the archive file and installing "
|
2521 |
-
"the database. To create a package, click the 'Create New' button and "
|
2522 |
-
"follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</"
|
2523 |
-
"b><br/>To download the package files click on the Installer and Archive "
|
2524 |
-
"buttons after creating a package. The archive file will have a copy of the "
|
2525 |
-
"installer inside of it named installer-backup.php in case the original "
|
2526 |
-
"installer file is lost. To see the details of a package click on the <i "
|
2527 |
-
"class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-"
|
2528 |
-
"archive'></i> Archive Types</b><br/>An archive file can be saved as either "
|
2529 |
-
"a .zip file or .daf file. A zip file is a common archive format used to "
|
2530 |
-
"compress and group files. The daf file short for 'Duplicator Archive "
|
2531 |
-
"Format' is a custom format used specifically for working with larger "
|
2532 |
-
"packages and scale-ability issues on many shared hosting platforms. Both "
|
2533 |
-
"formats work very similar. The main difference is that the daf file can "
|
2534 |
-
"only be extracted using the installer.php file or the <a href='https://"
|
2535 |
-
"snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' "
|
2536 |
-
"target='_blank'>DAF extraction tool</a>. The zip file can be used by the "
|
2537 |
-
"installer.php or other zip tools like winrar/7zip/winzip or other client-"
|
2538 |
-
"side tools. <br/><br/>"
|
2539 |
-
msgstr ""
|
2540 |
-
|
2541 |
-
#: views/packages/screen.php:85
|
2542 |
-
msgid ""
|
2543 |
-
"<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional "
|
2544 |
-
"filtered directory paths, files, file extensions and database tables. To "
|
2545 |
-
"filter specific system files, click the 'Enable File Filters' checkbox and "
|
2546 |
-
"add the full path of the file or directory, followed by a semicolon. For a "
|
2547 |
-
"file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/"
|
2548 |
-
">To exclude a database table, check the box labeled 'Enable Table Filters' "
|
2549 |
-
"and check the table name to exclude. To include only a copy of your database "
|
2550 |
-
"in the archive file check the box labeled 'Archive Only the Database'. The "
|
2551 |
-
"installer.php file can optionally be pre-filled with data at install time "
|
2552 |
-
"but is not required. <br/><br/>"
|
2553 |
-
msgstr ""
|
2554 |
-
|
2555 |
-
#: views/packages/screen.php:97
|
2556 |
-
msgid ""
|
2557 |
-
"<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and "
|
2558 |
-
"database to let you know if there are any concerns or issues that may be "
|
2559 |
-
"present. All items in green mean the checks looked good. All items in red "
|
2560 |
-
"indicate a warning. Warnings will not prevent the build from running, "
|
2561 |
-
"however if you do run into issues with the build then investigating the "
|
2562 |
-
"warnings should be considered. Click on each section for more details about "
|
2563 |
-
"each scan check. <br/><br/>"
|
2564 |
-
msgstr ""
|
2565 |
-
|
2566 |
-
#: views/packages/screen.php:105
|
2567 |
-
msgid ""
|
2568 |
-
"<b>Packages » 3 Build</b> <br/>The final step in the build process where the "
|
2569 |
-
"installer script and archive of the website can be downloaded. To start "
|
2570 |
-
"the install process follow these steps: <ol><li>Download the installer.php "
|
2571 |
-
"and archive.zip files to your local computer.</li><li>For localhost installs "
|
2572 |
-
"be sure you have PHP, Apache & MySQL installed on your local computer with "
|
2573 |
-
"software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package."
|
2574 |
-
"zip and installer.php into any empty directory under your webroot then "
|
2575 |
-
"browse to the installer.php via your web browser to launch the install "
|
2576 |
-
"wizard.</li><li>For remote installs use FTP or cPanel to upload both the "
|
2577 |
-
"archive.zip and installer.php to your hosting provider. Place the files in a "
|
2578 |
-
"new empty directory under your host's webroot accessible from a valid URL "
|
2579 |
-
"such as http://your-domain/your-wp-directory/installer.php to launch the "
|
2580 |
-
"install wizard. On some hosts the root directory will be a something like "
|
2581 |
-
"public_html -or- www. If your're not sure contact your hosting provider. </"
|
2582 |
-
"li></ol>For complete instructions see:<br/>\n"
|
2583 |
-
"\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?"
|
2584 |
-
"utm_source=duplicator_free&utm_medium=wordpress_plugin&"
|
2585 |
-
"utm_content=package_built_install_help&"
|
2586 |
-
"utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
|
2587 |
-
"\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
|
2588 |
-
msgstr ""
|
2589 |
-
|
2590 |
-
#: views/packages/screen.php:122
|
2591 |
-
msgid ""
|
2592 |
-
"<b>Packages » Details</b> <br/>The details view will give you a full break-"
|
2593 |
-
"down of the package including any errors that may have occured during the "
|
2594 |
-
"install. <br/><br/>"
|
2595 |
-
msgstr ""
|
2596 |
-
|
2597 |
-
#: views/settings/about-info.php:49
|
2598 |
-
msgid ""
|
2599 |
-
"Duplicator can streamline your workflow and quickly clone/migrate a "
|
2600 |
-
"WordPress site. The plugin helps admins, designers and developers speed up "
|
2601 |
-
"the migration process of moving a WordPress site. Please help us continue "
|
2602 |
-
"development by giving the plugin a 5 star."
|
2603 |
-
msgstr ""
|
2604 |
-
|
2605 |
-
#: views/settings/about-info.php:58
|
2606 |
-
msgid "Rate Duplicator"
|
2607 |
-
msgstr ""
|
2608 |
-
|
2609 |
-
#: views/settings/about-info.php:69
|
2610 |
-
msgid "Support Duplicator"
|
2611 |
-
msgstr ""
|
2612 |
-
|
2613 |
-
#: views/settings/about-info.php:71
|
2614 |
-
msgid "with a 5 star review!"
|
2615 |
-
msgstr ""
|
2616 |
-
|
2617 |
-
#: views/settings/about-info.php:85
|
2618 |
-
msgid "Spread the Word"
|
2619 |
-
msgstr ""
|
2620 |
-
|
2621 |
-
#: views/settings/about-info.php:92
|
2622 |
-
msgid "Facebook"
|
2623 |
-
msgstr ""
|
2624 |
-
|
2625 |
-
#: views/settings/about-info.php:95
|
2626 |
-
msgid "Twitter"
|
2627 |
-
msgstr ""
|
2628 |
-
|
2629 |
-
#: views/settings/about-info.php:98
|
2630 |
-
msgid "LinkedIn"
|
2631 |
-
msgstr ""
|
2632 |
-
|
2633 |
-
#: views/settings/about-info.php:101
|
2634 |
-
msgid "Google+"
|
2635 |
-
msgstr ""
|
2636 |
-
|
2637 |
-
#: views/settings/about-info.php:120
|
2638 |
-
msgid "Stay in the Loop"
|
2639 |
-
msgstr ""
|
2640 |
-
|
2641 |
-
#: views/settings/about-info.php:130
|
2642 |
-
msgid ""
|
2643 |
-
"Subscribe to the Duplicator newsletter and stay on top of great ideas, "
|
2644 |
-
"tutorials, and better ways to improve your workflows"
|
2645 |
-
msgstr ""
|
2646 |
-
|
2647 |
-
#: views/settings/controller.php:24
|
2648 |
-
msgid "Schedules"
|
2649 |
-
msgstr ""
|
2650 |
-
|
2651 |
-
#: views/settings/controller.php:26
|
2652 |
-
msgid "License"
|
2653 |
-
msgstr ""
|
2654 |
-
|
2655 |
-
#: views/settings/controller.php:27
|
2656 |
-
msgid "About"
|
2657 |
-
msgstr ""
|
2658 |
-
|
2659 |
-
#: views/settings/general.php:8
|
2660 |
-
msgid "General Settings Saved"
|
2661 |
-
msgstr ""
|
2662 |
-
|
2663 |
-
#: views/settings/general.php:88
|
2664 |
-
msgid "Plugin"
|
2665 |
-
msgstr ""
|
2666 |
-
|
2667 |
-
#: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
|
2668 |
-
#: views/tools/diagnostics/inc.settings.php:110
|
2669 |
-
#: views/tools/diagnostics/inc.settings.php:183
|
2670 |
-
msgid "Version"
|
2671 |
-
msgstr ""
|
2672 |
-
|
2673 |
-
#: views/settings/general.php:99
|
2674 |
-
msgid "Uninstall"
|
2675 |
-
msgstr ""
|
2676 |
-
|
2677 |
-
#: views/settings/general.php:102
|
2678 |
-
msgid "Delete Plugin Settings"
|
2679 |
-
msgstr ""
|
2680 |
-
|
2681 |
-
#: views/settings/general.php:105
|
2682 |
-
msgid "Delete Entire Storage Directory"
|
2683 |
-
msgstr ""
|
2684 |
-
|
2685 |
-
#: views/settings/general.php:112
|
2686 |
-
msgid "Full Path"
|
2687 |
-
msgstr ""
|
2688 |
-
|
2689 |
-
#: views/settings/general.php:115
|
2690 |
-
msgid "Disable .htaccess File In Storage Directory"
|
2691 |
-
msgstr ""
|
2692 |
-
|
2693 |
-
#: views/settings/general.php:117
|
2694 |
-
msgid "Disable if issues occur when downloading installer/archive files."
|
2695 |
-
msgstr ""
|
2696 |
-
|
2697 |
-
#: views/settings/general.php:122
|
2698 |
-
msgid "Custom Roles"
|
2699 |
-
msgstr ""
|
2700 |
-
|
2701 |
-
#: views/settings/general.php:125
|
2702 |
-
msgid "Enable User Role Editor Plugin Integration"
|
2703 |
-
msgstr ""
|
2704 |
-
|
2705 |
-
#: views/settings/general.php:130
|
2706 |
-
msgid "The User Role Editor Plugin"
|
2707 |
-
msgstr ""
|
2708 |
-
|
2709 |
-
#: views/settings/general.php:131 views/settings/gopro.php:46
|
2710 |
-
msgid "Free"
|
2711 |
-
msgstr ""
|
2712 |
-
|
2713 |
-
#: views/settings/general.php:132
|
2714 |
-
msgid "or"
|
2715 |
-
msgstr ""
|
2716 |
-
|
2717 |
-
#: views/settings/general.php:133 views/settings/gopro.php:47
|
2718 |
-
msgid "Professional"
|
2719 |
-
msgstr ""
|
2720 |
-
|
2721 |
-
#: views/settings/general.php:134
|
2722 |
-
msgid "must be installed to use"
|
2723 |
-
msgstr ""
|
2724 |
-
|
2725 |
-
#: views/settings/general.php:135
|
2726 |
-
msgid "this feature."
|
2727 |
-
msgstr ""
|
2728 |
-
|
2729 |
-
#: views/settings/general.php:144
|
2730 |
-
msgid "Debug"
|
2731 |
-
msgstr ""
|
2732 |
-
|
2733 |
-
#: views/settings/general.php:148
|
2734 |
-
msgid "Debugging"
|
2735 |
-
msgstr ""
|
2736 |
-
|
2737 |
-
#: views/settings/general.php:151
|
2738 |
-
msgid "Enable debug options throughout user interface"
|
2739 |
-
msgstr ""
|
2740 |
-
|
2741 |
-
#: views/settings/general.php:155
|
2742 |
-
msgid "Trace Log"
|
2743 |
-
msgstr ""
|
2744 |
-
|
2745 |
-
#: views/settings/general.php:161
|
2746 |
-
msgid ""
|
2747 |
-
"Turns on detailed operation logging. Logging will occur in both PHP error "
|
2748 |
-
"and local trace logs."
|
2749 |
-
msgstr ""
|
2750 |
-
|
2751 |
-
#: views/settings/general.php:163
|
2752 |
-
msgid ""
|
2753 |
-
"WARNING: Only turn on this setting when asked to by support as tracing will "
|
2754 |
-
"impact performance."
|
2755 |
-
msgstr ""
|
2756 |
-
|
2757 |
-
#: views/settings/general.php:167
|
2758 |
-
msgid "Download Trace Log"
|
2759 |
-
msgstr ""
|
2760 |
-
|
2761 |
-
#: views/settings/general.php:175
|
2762 |
-
msgid "Advanced"
|
2763 |
-
msgstr ""
|
2764 |
-
|
2765 |
-
#: views/settings/general.php:182
|
2766 |
-
msgid "Reset Packages"
|
2767 |
-
msgstr ""
|
2768 |
-
|
2769 |
-
#: views/settings/general.php:185
|
2770 |
-
msgid ""
|
2771 |
-
"This process will reset all packages by deleting those without a completed "
|
2772 |
-
"status, reset the active package id and perform a cleanup of the build tmp "
|
2773 |
-
"file."
|
2774 |
-
msgstr ""
|
2775 |
-
|
2776 |
-
#: views/settings/general.php:188
|
2777 |
-
msgid "Reset Settings"
|
2778 |
-
msgstr ""
|
2779 |
-
|
2780 |
-
#: views/settings/general.php:189
|
2781 |
-
msgid ""
|
2782 |
-
"This action should only be used if the packages screen is having issues or a "
|
2783 |
-
"build is stuck."
|
2784 |
-
msgstr ""
|
2785 |
-
|
2786 |
-
#: views/settings/general.php:194
|
2787 |
-
msgid "Archive scan"
|
2788 |
-
msgstr ""
|
2789 |
-
|
2790 |
-
#: views/settings/general.php:197
|
2791 |
-
msgid "Skip"
|
2792 |
-
msgstr ""
|
2793 |
-
|
2794 |
-
#: views/settings/general.php:199
|
2795 |
-
msgid ""
|
2796 |
-
"If enabled all files check on scan will be skipped before package creation. "
|
2797 |
-
"In some cases, this option can be beneficial if the scan process is having "
|
2798 |
-
"issues running or returning errors."
|
2799 |
-
msgstr ""
|
2800 |
-
|
2801 |
-
#: views/settings/general.php:205
|
2802 |
-
msgid "Other Plugins/Themes JS"
|
2803 |
-
msgstr ""
|
2804 |
-
|
2805 |
-
#: views/settings/general.php:208 views/settings/general.php:224
|
2806 |
-
msgid "Unhook them on Duplicator pages"
|
2807 |
-
msgstr ""
|
2808 |
-
|
2809 |
-
#: views/settings/general.php:211
|
2810 |
-
msgid ""
|
2811 |
-
"Check this option if other plugins/themes JavaScript files are conflicting "
|
2812 |
-
"with Duplicator."
|
2813 |
-
msgstr ""
|
2814 |
-
|
2815 |
-
#: views/settings/general.php:215 views/settings/general.php:231
|
2816 |
-
msgid ""
|
2817 |
-
"Do not modify this setting unless you know the expected result or have "
|
2818 |
-
"talked to support."
|
2819 |
-
msgstr ""
|
2820 |
-
|
2821 |
-
#: views/settings/general.php:221
|
2822 |
-
msgid "Other Plugins/Themes CSS"
|
2823 |
-
msgstr ""
|
2824 |
-
|
2825 |
-
#: views/settings/general.php:227
|
2826 |
-
msgid ""
|
2827 |
-
"Check this option if other plugins/themes CSS files are conflicting with "
|
2828 |
-
"Duplicator."
|
2829 |
-
msgstr ""
|
2830 |
-
|
2831 |
-
#: views/settings/general.php:240
|
2832 |
-
msgid "Save General Settings"
|
2833 |
-
msgstr ""
|
2834 |
-
|
2835 |
-
#: views/settings/general.php:249
|
2836 |
-
msgid "Reset Packages ?"
|
2837 |
-
msgstr ""
|
2838 |
-
|
2839 |
-
#: views/settings/general.php:250
|
2840 |
-
msgid ""
|
2841 |
-
"This will clear and reset all of the current temporary packages. Would you "
|
2842 |
-
"like to continue?"
|
2843 |
-
msgstr ""
|
2844 |
-
|
2845 |
-
#: views/settings/general.php:251
|
2846 |
-
msgid "Resetting settings, Please Wait..."
|
2847 |
-
msgstr ""
|
2848 |
-
|
2849 |
-
#: views/settings/general.php:254
|
2850 |
-
msgid "Yes"
|
2851 |
-
msgstr ""
|
2852 |
-
|
2853 |
-
#: views/settings/general.php:255
|
2854 |
-
msgid "No"
|
2855 |
-
msgstr ""
|
2856 |
-
|
2857 |
-
#: views/settings/general.php:259
|
2858 |
-
msgid "AJAX ERROR!"
|
2859 |
-
msgstr ""
|
2860 |
-
|
2861 |
-
#: views/settings/general.php:259
|
2862 |
-
msgid "Ajax request error"
|
2863 |
-
msgstr ""
|
2864 |
-
|
2865 |
-
#: views/settings/general.php:264 views/settings/general.php:317
|
2866 |
-
msgid "RESPONSE ERROR!"
|
2867 |
-
msgstr ""
|
2868 |
-
|
2869 |
-
#: views/settings/general.php:307
|
2870 |
-
msgid "Packages successfully reset"
|
2871 |
-
msgstr ""
|
2872 |
-
|
2873 |
-
#: views/settings/gopro.php:39
|
2874 |
-
msgid "The simplicity of Duplicator"
|
2875 |
-
msgstr ""
|
2876 |
-
|
2877 |
-
#: views/settings/gopro.php:40
|
2878 |
-
msgid "with power for everyone."
|
2879 |
-
msgstr ""
|
2880 |
-
|
2881 |
-
#: views/settings/gopro.php:45
|
2882 |
-
msgid "Feature"
|
2883 |
-
msgstr ""
|
2884 |
-
|
2885 |
-
#: views/settings/gopro.php:50
|
2886 |
-
msgid "Backup Files & Database"
|
2887 |
-
msgstr ""
|
2888 |
-
|
2889 |
-
#: views/settings/gopro.php:60
|
2890 |
-
msgid "Database Table Filters"
|
2891 |
-
msgstr ""
|
2892 |
-
|
2893 |
-
#: views/settings/gopro.php:65
|
2894 |
-
msgid "Migration Wizard"
|
2895 |
-
msgstr ""
|
2896 |
-
|
2897 |
-
#: views/settings/gopro.php:70
|
2898 |
-
msgid "Scheduled Backups"
|
2899 |
-
msgstr ""
|
2900 |
-
|
2901 |
-
#: views/settings/gopro.php:77
|
2902 |
-
msgid "Amazon S3 Storage"
|
2903 |
-
msgstr ""
|
2904 |
-
|
2905 |
-
#: views/settings/gopro.php:85
|
2906 |
-
msgid "Dropbox Storage "
|
2907 |
-
msgstr ""
|
2908 |
-
|
2909 |
-
#: views/settings/gopro.php:93
|
2910 |
-
msgid "Google Drive Storage"
|
2911 |
-
msgstr ""
|
2912 |
-
|
2913 |
-
#: views/settings/gopro.php:101
|
2914 |
-
msgid "Microsoft One Drive Storage"
|
2915 |
-
msgstr ""
|
2916 |
-
|
2917 |
-
#: views/settings/gopro.php:109
|
2918 |
-
msgid "Remote FTP/SFTP Storage"
|
2919 |
-
msgstr ""
|
2920 |
-
|
2921 |
-
#: views/settings/gopro.php:115
|
2922 |
-
msgid "Overwrite Live Site"
|
2923 |
-
msgstr ""
|
2924 |
-
|
2925 |
-
#: views/settings/gopro.php:117
|
2926 |
-
msgid "Overwrite Existing Site"
|
2927 |
-
msgstr ""
|
2928 |
-
|
2929 |
-
#: views/settings/gopro.php:118
|
2930 |
-
msgid "Overwrite a live site. Makes installing super-fast!"
|
2931 |
-
msgstr ""
|
2932 |
-
|
2933 |
-
#: views/settings/gopro.php:124 views/settings/gopro.php:126
|
2934 |
-
msgid "Large Site Support"
|
2935 |
-
msgstr ""
|
2936 |
-
|
2937 |
-
#: views/settings/gopro.php:127
|
2938 |
-
msgid ""
|
2939 |
-
"Advanced archive engine processes multi-gig sites - even on stubborn budget "
|
2940 |
-
"hosts!"
|
2941 |
-
msgstr ""
|
2942 |
-
|
2943 |
-
#: views/settings/gopro.php:133
|
2944 |
-
msgid "Multiple Archive Engines"
|
2945 |
-
msgstr ""
|
2946 |
-
|
2947 |
-
#: views/settings/gopro.php:138
|
2948 |
-
msgid "Server Throttling"
|
2949 |
-
msgstr ""
|
2950 |
-
|
2951 |
-
#: views/settings/gopro.php:143
|
2952 |
-
msgid "Background Processing"
|
2953 |
-
msgstr ""
|
2954 |
-
|
2955 |
-
#: views/settings/gopro.php:148
|
2956 |
-
msgid "Installer Passwords"
|
2957 |
-
msgstr ""
|
2958 |
-
|
2959 |
-
#: views/settings/gopro.php:153
|
2960 |
-
msgid " Regenerate Salts"
|
2961 |
-
msgstr ""
|
2962 |
-
|
2963 |
-
#: views/settings/gopro.php:155
|
2964 |
-
msgid "Regenerate Salts"
|
2965 |
-
msgstr ""
|
2966 |
-
|
2967 |
-
#: views/settings/gopro.php:156
|
2968 |
-
msgid ""
|
2969 |
-
"Installer contains option to regenerate salts in the wp-config.php file. "
|
2970 |
-
"This feature is only available with Freelancer, Business or Gold licenses."
|
2971 |
-
msgstr ""
|
2972 |
-
|
2973 |
-
#: views/settings/gopro.php:162 views/settings/gopro.php:164
|
2974 |
-
msgid "WP-Config Control Plus"
|
2975 |
-
msgstr ""
|
2976 |
-
|
2977 |
-
#: views/settings/gopro.php:165
|
2978 |
-
msgid "Control many wp-config.php settings right from the installer!"
|
2979 |
-
msgstr ""
|
2980 |
-
|
2981 |
-
#: views/settings/gopro.php:173
|
2982 |
-
msgid "cPanel Database API"
|
2983 |
-
msgstr ""
|
2984 |
-
|
2985 |
-
#: views/settings/gopro.php:177
|
2986 |
-
msgid ""
|
2987 |
-
"Create the database and database user directly in the installer. No need to "
|
2988 |
-
"browse to your host's cPanel application."
|
2989 |
-
msgstr ""
|
2990 |
-
|
2991 |
-
#: views/settings/gopro.php:183
|
2992 |
-
msgid "Multisite Network Migration"
|
2993 |
-
msgstr ""
|
2994 |
-
|
2995 |
-
#: views/settings/gopro.php:188
|
2996 |
-
msgid "Multisite Subsite > Standalone"
|
2997 |
-
msgstr ""
|
2998 |
-
|
2999 |
-
#: views/settings/gopro.php:190
|
3000 |
-
msgid "Multisite"
|
3001 |
-
msgstr ""
|
3002 |
-
|
3003 |
-
#: views/settings/gopro.php:191
|
3004 |
-
msgid ""
|
3005 |
-
"Install an individual subsite from a Multisite as a standalone site. This "
|
3006 |
-
"feature is only available with Business or Gold licenses."
|
3007 |
-
msgstr ""
|
3008 |
-
|
3009 |
-
#: views/settings/gopro.php:198
|
3010 |
-
msgid "Custom Search & Replace"
|
3011 |
-
msgstr ""
|
3012 |
-
|
3013 |
-
#: views/settings/gopro.php:204
|
3014 |
-
msgid "Email Alerts"
|
3015 |
-
msgstr ""
|
3016 |
-
|
3017 |
-
#: views/settings/gopro.php:210
|
3018 |
-
msgid "Manual Transfers"
|
3019 |
-
msgstr ""
|
3020 |
-
|
3021 |
-
#: views/settings/gopro.php:216
|
3022 |
-
msgid "Active Customer Support"
|
3023 |
-
msgstr ""
|
3024 |
-
|
3025 |
-
#: views/settings/gopro.php:219
|
3026 |
-
msgid ""
|
3027 |
-
"Pro users get top priority for any requests to our support desk. In most "
|
3028 |
-
"cases responses will be answered in under 24 hours."
|
3029 |
-
msgstr ""
|
3030 |
-
|
3031 |
-
#: views/settings/gopro.php:225
|
3032 |
-
msgid "Plus Many Other Features..."
|
3033 |
-
msgstr ""
|
3034 |
-
|
3035 |
-
#: views/settings/gopro.php:234
|
3036 |
-
msgid "Check It Out!"
|
3037 |
-
msgstr ""
|
3038 |
-
|
3039 |
-
#: views/settings/license.php:4
|
3040 |
-
msgid "Activation"
|
3041 |
-
msgstr ""
|
3042 |
-
|
3043 |
-
#: views/settings/license.php:9
|
3044 |
-
#, php-format
|
3045 |
-
msgid "%1$sManage Licenses%2$s"
|
3046 |
-
msgstr ""
|
3047 |
-
|
3048 |
-
#: views/settings/license.php:14
|
3049 |
-
msgid "Duplicator Free"
|
3050 |
-
msgstr ""
|
3051 |
-
|
3052 |
-
#: views/settings/license.php:16
|
3053 |
-
msgid "Basic Features"
|
3054 |
-
msgstr ""
|
3055 |
-
|
3056 |
-
#: views/settings/license.php:17
|
3057 |
-
msgid "Pro Features"
|
3058 |
-
msgstr ""
|
3059 |
-
|
3060 |
-
#: views/settings/license.php:22
|
3061 |
-
msgid "License Key"
|
3062 |
-
msgstr ""
|
3063 |
-
|
3064 |
-
#: views/settings/license.php:26
|
3065 |
-
msgid "The free version of Duplicator does not require a license key. "
|
3066 |
-
msgstr ""
|
3067 |
-
|
3068 |
-
#: views/settings/license.php:28
|
3069 |
-
msgid ""
|
3070 |
-
"Professional Users: Please note that if you have already purchased the "
|
3071 |
-
"Professional version it is a separate plugin that you download and install. "
|
3072 |
-
"You can download the Professional version from the email sent after your "
|
3073 |
-
"purchase or click on the 'Manage Licenses' link above to download the plugin "
|
3074 |
-
"from your snapcreek.com dashboard. "
|
3075 |
-
msgstr ""
|
3076 |
-
|
3077 |
-
#: views/settings/license.php:31
|
3078 |
-
msgid "If you would like to purchase the professional version you can "
|
3079 |
-
msgstr ""
|
3080 |
-
|
3081 |
-
#: views/settings/license.php:32
|
3082 |
-
msgid "get a copy here"
|
3083 |
-
msgstr ""
|
3084 |
-
|
3085 |
-
#: views/settings/packages.php:8
|
3086 |
-
msgid "Package Settings Saved"
|
3087 |
-
msgstr ""
|
3088 |
-
|
3089 |
-
#: views/settings/packages.php:74
|
3090 |
-
msgid "SQL Script"
|
3091 |
-
msgstr ""
|
3092 |
-
|
3093 |
-
#: views/settings/packages.php:78
|
3094 |
-
msgid "Mysqldump"
|
3095 |
-
msgstr ""
|
3096 |
-
|
3097 |
-
#: views/settings/packages.php:88
|
3098 |
-
msgid "PHP Code"
|
3099 |
-
msgstr ""
|
3100 |
-
|
3101 |
-
#: views/settings/packages.php:98
|
3102 |
-
msgid ""
|
3103 |
-
"This server does not support the PHP shell_exec function which is required "
|
3104 |
-
"for mysqldump to run. "
|
3105 |
-
msgstr ""
|
3106 |
-
|
3107 |
-
#: views/settings/packages.php:99
|
3108 |
-
msgid "Please contact the host or server administrator to enable this feature."
|
3109 |
-
msgstr ""
|
3110 |
-
|
3111 |
-
#: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
|
3112 |
-
msgid "Host Recommendation:"
|
3113 |
-
msgstr ""
|
3114 |
-
|
3115 |
-
#: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
|
3116 |
-
msgid ""
|
3117 |
-
"Duplicator recommends going with the high performance pro plan or better "
|
3118 |
-
"from our recommended list"
|
3119 |
-
msgstr ""
|
3120 |
-
|
3121 |
-
#: views/settings/packages.php:109
|
3122 |
-
msgid "Please visit our recommended"
|
3123 |
-
msgstr ""
|
3124 |
-
|
3125 |
-
#: views/settings/packages.php:110 views/settings/packages.php:134
|
3126 |
-
#: views/tools/diagnostics/logging.php:186
|
3127 |
-
msgid "host list"
|
3128 |
-
msgstr ""
|
3129 |
-
|
3130 |
-
#: views/settings/packages.php:111
|
3131 |
-
msgid "for reliable access to mysqldump"
|
3132 |
-
msgstr ""
|
3133 |
-
|
3134 |
-
#: views/settings/packages.php:122
|
3135 |
-
msgid "Successfully Found:"
|
3136 |
-
msgstr ""
|
3137 |
-
|
3138 |
-
#: views/settings/packages.php:129
|
3139 |
-
msgid ""
|
3140 |
-
"Mysqldump was not found at its default location or the location provided. "
|
3141 |
-
"Please enter a custom path to a valid location where mysqldump can run. If "
|
3142 |
-
"the problem persist contact your host or server administrator. "
|
3143 |
-
msgstr ""
|
3144 |
-
|
3145 |
-
#: views/settings/packages.php:133
|
3146 |
-
msgid "See the"
|
3147 |
-
msgstr ""
|
3148 |
-
|
3149 |
-
#: views/settings/packages.php:135
|
3150 |
-
msgid "for reliable access to mysqldump."
|
3151 |
-
msgstr ""
|
3152 |
-
|
3153 |
-
#: views/settings/packages.php:141
|
3154 |
-
msgid "Custom Path"
|
3155 |
-
msgstr ""
|
3156 |
-
|
3157 |
-
#: views/settings/packages.php:143
|
3158 |
-
msgid "mysqldump path:"
|
3159 |
-
msgstr ""
|
3160 |
-
|
3161 |
-
#: views/settings/packages.php:144
|
3162 |
-
msgid ""
|
3163 |
-
"Add a custom path if the path to mysqldump is not properly detected. For "
|
3164 |
-
"all paths use a forward slash as the path seperator. On Linux systems use "
|
3165 |
-
"mysqldump for Windows systems use mysqldump.exe. If the path tried does not "
|
3166 |
-
"work please contact your hosting provider for details on the correct path."
|
3167 |
-
msgstr ""
|
3168 |
-
|
3169 |
-
#: views/settings/packages.php:148
|
3170 |
-
msgid "/usr/bin/mypath/mysqldump"
|
3171 |
-
msgstr ""
|
3172 |
-
|
3173 |
-
#: views/settings/packages.php:152
|
3174 |
-
msgid ""
|
3175 |
-
"<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided "
|
3176 |
-
"is not recognized as a valid mysqldump file:<br/>"
|
3177 |
-
msgstr ""
|
3178 |
-
|
3179 |
-
#: views/settings/packages.php:170
|
3180 |
-
msgid "Single-Threaded"
|
3181 |
-
msgstr ""
|
3182 |
-
|
3183 |
-
#: views/settings/packages.php:173
|
3184 |
-
msgid "Multi-Threaded"
|
3185 |
-
msgstr ""
|
3186 |
-
|
3187 |
-
#: views/settings/packages.php:177
|
3188 |
-
msgid "PHP Code Mode:"
|
3189 |
-
msgstr ""
|
3190 |
-
|
3191 |
-
#: views/settings/packages.php:179
|
3192 |
-
msgid ""
|
3193 |
-
"Single-Threaded mode attempts to create the entire database script in one "
|
3194 |
-
"request. Multi-Threaded mode allows the database script to be chunked over "
|
3195 |
-
"multiple requests. Multi-Threaded mode is typically slower but much more "
|
3196 |
-
"reliable especially for larger databases."
|
3197 |
-
msgstr ""
|
3198 |
-
|
3199 |
-
#: views/settings/packages.php:181
|
3200 |
-
msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
|
3201 |
-
msgstr ""
|
3202 |
-
|
3203 |
-
#: views/settings/packages.php:184
|
3204 |
-
msgid "Query Limit Size"
|
3205 |
-
msgstr ""
|
3206 |
-
|
3207 |
-
#: views/settings/packages.php:194
|
3208 |
-
msgid "PHP Query Limit Size"
|
3209 |
-
msgstr ""
|
3210 |
-
|
3211 |
-
#: views/settings/packages.php:195
|
3212 |
-
msgid ""
|
3213 |
-
"A higher limit size will speed up the database build time, however it will "
|
3214 |
-
"use more memory. If your host has memory caps start off low."
|
3215 |
-
msgstr ""
|
3216 |
-
|
3217 |
-
#: views/settings/packages.php:213
|
3218 |
-
msgid "ZipArchive"
|
3219 |
-
msgstr ""
|
3220 |
-
|
3221 |
-
#: views/settings/packages.php:219
|
3222 |
-
msgid "DupArchive"
|
3223 |
-
msgstr ""
|
3224 |
-
|
3225 |
-
#: views/settings/packages.php:228
|
3226 |
-
msgid "Creates a archive format (archive.zip)."
|
3227 |
-
msgstr ""
|
3228 |
-
|
3229 |
-
#: views/settings/packages.php:229
|
3230 |
-
msgid ""
|
3231 |
-
"This option uses the internal PHP ZipArchive classes to create a Zip file."
|
3232 |
-
msgstr ""
|
3233 |
-
|
3234 |
-
#: views/settings/packages.php:238
|
3235 |
-
msgid "Creates a custom archive format (archive.daf)."
|
3236 |
-
msgstr ""
|
3237 |
-
|
3238 |
-
#: views/settings/packages.php:239
|
3239 |
-
msgid ""
|
3240 |
-
"This option is recommended for large sites or sites on constrained servers."
|
3241 |
-
msgstr ""
|
3242 |
-
|
3243 |
-
#: views/settings/packages.php:246
|
3244 |
-
msgid "Archive Flush"
|
3245 |
-
msgstr ""
|
3246 |
-
|
3247 |
-
#: views/settings/packages.php:249
|
3248 |
-
msgid "Attempt Network Keep Alive"
|
3249 |
-
msgstr ""
|
3250 |
-
|
3251 |
-
#: views/settings/packages.php:250
|
3252 |
-
msgid "enable only for large archives"
|
3253 |
-
msgstr ""
|
3254 |
-
|
3255 |
-
#: views/settings/packages.php:253
|
3256 |
-
msgid ""
|
3257 |
-
"This will attempt to keep a network connection established for large "
|
3258 |
-
"archives."
|
3259 |
-
msgstr ""
|
3260 |
-
|
3261 |
-
#: views/settings/packages.php:254
|
3262 |
-
msgid " Valid only when Archive Engine for ZipArchive is enabled."
|
3263 |
-
msgstr ""
|
3264 |
-
|
3265 |
-
#: views/settings/packages.php:261
|
3266 |
-
msgid "Visual"
|
3267 |
-
msgstr ""
|
3268 |
-
|
3269 |
-
#: views/settings/packages.php:265
|
3270 |
-
msgid "Created Format"
|
3271 |
-
msgstr ""
|
3272 |
-
|
3273 |
-
#: views/settings/packages.php:269
|
3274 |
-
msgid "By Year"
|
3275 |
-
msgstr ""
|
3276 |
-
|
3277 |
-
#: views/settings/packages.php:276
|
3278 |
-
msgid "By Month"
|
3279 |
-
msgstr ""
|
3280 |
-
|
3281 |
-
#: views/settings/packages.php:283
|
3282 |
-
msgid "By Day"
|
3283 |
-
msgstr ""
|
3284 |
-
|
3285 |
-
#: views/settings/packages.php:291
|
3286 |
-
msgid ""
|
3287 |
-
"The UTC date format shown in the 'Created' column on the Packages screen."
|
3288 |
-
msgstr ""
|
3289 |
-
|
3290 |
-
#: views/settings/packages.php:292
|
3291 |
-
msgid ""
|
3292 |
-
"To use WordPress timezone formats consider an upgrade to Duplicator Pro."
|
3293 |
-
msgstr ""
|
3294 |
-
|
3295 |
-
#: views/settings/packages.php:301
|
3296 |
-
msgid "Save Package Settings"
|
3297 |
-
msgstr ""
|
3298 |
-
|
3299 |
-
#: views/settings/schedule.php:14 views/tools/templates.php:15
|
3300 |
-
msgid "This option is available in Duplicator Pro."
|
3301 |
-
msgstr ""
|
3302 |
-
|
3303 |
-
#: views/settings/schedule.php:15
|
3304 |
-
msgid ""
|
3305 |
-
"Create robust schedules that automatically create packages while you sleep."
|
3306 |
-
msgstr ""
|
3307 |
-
|
3308 |
-
#: views/settings/schedule.php:17
|
3309 |
-
msgid "Simply choose your storage location and when you want it to run."
|
3310 |
-
msgstr ""
|
3311 |
-
|
3312 |
-
#: views/settings/storage.php:15
|
3313 |
-
msgid "Store your packages in multiple locations with Duplicator Pro"
|
3314 |
-
msgstr ""
|
3315 |
-
|
3316 |
-
#: views/settings/storage.php:20
|
3317 |
-
msgid " Dropbox"
|
3318 |
-
msgstr ""
|
3319 |
-
|
3320 |
-
#: views/settings/storage.php:28
|
3321 |
-
msgid ""
|
3322 |
-
"Set up a one-time storage location and automatically <br/> push the package "
|
3323 |
-
"to your destination."
|
3324 |
-
msgstr ""
|
3325 |
-
|
3326 |
-
#: views/tools/controller.php:22
|
3327 |
-
msgid "Diagnostics"
|
3328 |
-
msgstr ""
|
3329 |
-
|
3330 |
-
#: views/tools/controller.php:23
|
3331 |
-
msgid "Templates"
|
3332 |
-
msgstr ""
|
3333 |
-
|
3334 |
-
#: views/tools/diagnostics/inc.data.php:11
|
3335 |
-
msgid "Stored Data"
|
3336 |
-
msgstr ""
|
3337 |
-
|
3338 |
-
#: views/tools/diagnostics/inc.data.php:16
|
3339 |
-
msgid "Data Cleanup"
|
3340 |
-
msgstr ""
|
3341 |
-
|
3342 |
-
#: views/tools/diagnostics/inc.data.php:21
|
3343 |
-
msgid "Remove Installation Files"
|
3344 |
-
msgstr ""
|
3345 |
-
|
3346 |
-
#: views/tools/diagnostics/inc.data.php:25
|
3347 |
-
msgid "Removes all reserved installer files."
|
3348 |
-
msgstr ""
|
3349 |
-
|
3350 |
-
#: views/tools/diagnostics/inc.data.php:30
|
3351 |
-
msgid ""
|
3352 |
-
"Clicking on the 'Remove Installation Files' button will attempt to remove "
|
3353 |
-
"the installer files used by Duplicator. These files should not be left on "
|
3354 |
-
"production systems for security reasons. Below are the files that should be "
|
3355 |
-
"removed."
|
3356 |
-
msgstr ""
|
3357 |
-
|
3358 |
-
#: views/tools/diagnostics/inc.data.php:45
|
3359 |
-
msgid "Clear Build Cache"
|
3360 |
-
msgstr ""
|
3361 |
-
|
3362 |
-
#: views/tools/diagnostics/inc.data.php:48
|
3363 |
-
msgid "Removes all build data from:"
|
3364 |
-
msgstr ""
|
3365 |
-
|
3366 |
-
#: views/tools/diagnostics/inc.data.php:53
|
3367 |
-
msgid "Options Values"
|
3368 |
-
msgstr ""
|
3369 |
-
|
3370 |
-
#: views/tools/diagnostics/inc.data.php:87
|
3371 |
-
msgid "Delete Option?"
|
3372 |
-
msgstr ""
|
3373 |
-
|
3374 |
-
#: views/tools/diagnostics/inc.data.php:88
|
3375 |
-
msgid "Delete the option value just selected?"
|
3376 |
-
msgstr ""
|
3377 |
-
|
3378 |
-
#: views/tools/diagnostics/inc.data.php:89
|
3379 |
-
msgid "Removing Option, Please Wait..."
|
3380 |
-
msgstr ""
|
3381 |
-
|
3382 |
-
#: views/tools/diagnostics/inc.data.php:94
|
3383 |
-
msgid "Clear Build Cache?"
|
3384 |
-
msgstr ""
|
3385 |
-
|
3386 |
-
#: views/tools/diagnostics/inc.data.php:95
|
3387 |
-
msgid ""
|
3388 |
-
"This process will remove all build cache files. Be sure no packages are "
|
3389 |
-
"currently building or else they will be cancelled."
|
3390 |
-
msgstr ""
|
3391 |
-
|
3392 |
-
#: views/tools/diagnostics/inc.data.php:107
|
3393 |
-
msgid "Delete the option value"
|
3394 |
-
msgstr ""
|
3395 |
-
|
3396 |
-
#: views/tools/diagnostics/inc.phpinfo.php:17
|
3397 |
-
msgid "PHP Information"
|
3398 |
-
msgstr ""
|
3399 |
-
|
3400 |
-
#: views/tools/diagnostics/inc.settings.php:5
|
3401 |
-
#: views/tools/diagnostics/inc.settings.php:6
|
3402 |
-
msgid "unknow"
|
3403 |
-
msgstr ""
|
3404 |
-
|
3405 |
-
#: views/tools/diagnostics/inc.settings.php:23
|
3406 |
-
msgid "Server Settings"
|
3407 |
-
msgstr ""
|
3408 |
-
|
3409 |
-
#: views/tools/diagnostics/inc.settings.php:32
|
3410 |
-
msgid "Duplicator Version"
|
3411 |
-
msgstr ""
|
3412 |
-
|
3413 |
-
#: views/tools/diagnostics/inc.settings.php:39
|
3414 |
-
msgid "Operating System"
|
3415 |
-
msgstr ""
|
3416 |
-
|
3417 |
-
#: views/tools/diagnostics/inc.settings.php:43
|
3418 |
-
msgid "Timezone"
|
3419 |
-
msgstr ""
|
3420 |
-
|
3421 |
-
#: views/tools/diagnostics/inc.settings.php:47
|
3422 |
-
msgid "Server Time"
|
3423 |
-
msgstr ""
|
3424 |
-
|
3425 |
-
#: views/tools/diagnostics/inc.settings.php:59
|
3426 |
-
msgid "ABSPATH"
|
3427 |
-
msgstr ""
|
3428 |
-
|
3429 |
-
#: views/tools/diagnostics/inc.settings.php:63
|
3430 |
-
msgid "Plugins Path"
|
3431 |
-
msgstr ""
|
3432 |
-
|
3433 |
-
#: views/tools/diagnostics/inc.settings.php:67
|
3434 |
-
msgid "Loaded PHP INI"
|
3435 |
-
msgstr ""
|
3436 |
-
|
3437 |
-
#: views/tools/diagnostics/inc.settings.php:71
|
3438 |
-
msgid "Server IP"
|
3439 |
-
msgstr ""
|
3440 |
-
|
3441 |
-
#: views/tools/diagnostics/inc.settings.php:78
|
3442 |
-
msgid "Can't detect"
|
3443 |
-
msgstr ""
|
3444 |
-
|
3445 |
-
#: views/tools/diagnostics/inc.settings.php:84
|
3446 |
-
msgid "Client IP"
|
3447 |
-
msgstr ""
|
3448 |
-
|
3449 |
-
#: views/tools/diagnostics/inc.settings.php:95
|
3450 |
-
msgid "Language"
|
3451 |
-
msgstr ""
|
3452 |
-
|
3453 |
-
#: views/tools/diagnostics/inc.settings.php:99
|
3454 |
-
#: views/tools/diagnostics/inc.settings.php:191
|
3455 |
-
msgid "Charset"
|
3456 |
-
msgstr ""
|
3457 |
-
|
3458 |
-
#: views/tools/diagnostics/inc.settings.php:103
|
3459 |
-
msgid "Memory Limit "
|
3460 |
-
msgstr ""
|
3461 |
-
|
3462 |
-
#: views/tools/diagnostics/inc.settings.php:104
|
3463 |
-
msgid "Max"
|
3464 |
-
msgstr ""
|
3465 |
-
|
3466 |
-
#: views/tools/diagnostics/inc.settings.php:122
|
3467 |
-
msgid "Process"
|
3468 |
-
msgstr ""
|
3469 |
-
|
3470 |
-
#: views/tools/diagnostics/inc.settings.php:126
|
3471 |
-
msgid "Safe Mode"
|
3472 |
-
msgstr ""
|
3473 |
-
|
3474 |
-
#: views/tools/diagnostics/inc.settings.php:130
|
3475 |
-
msgid "On"
|
3476 |
-
msgstr ""
|
3477 |
-
|
3478 |
-
#: views/tools/diagnostics/inc.settings.php:130
|
3479 |
-
msgid "Off"
|
3480 |
-
msgstr ""
|
3481 |
-
|
3482 |
-
#: views/tools/diagnostics/inc.settings.php:135
|
3483 |
-
msgid "Memory Limit"
|
3484 |
-
msgstr ""
|
3485 |
-
|
3486 |
-
#: views/tools/diagnostics/inc.settings.php:139
|
3487 |
-
msgid "Memory In Use"
|
3488 |
-
msgstr ""
|
3489 |
-
|
3490 |
-
#: views/tools/diagnostics/inc.settings.php:143
|
3491 |
-
#: views/tools/diagnostics/inc.settings.php:152
|
3492 |
-
msgid "Max Execution Time"
|
3493 |
-
msgstr ""
|
3494 |
-
|
3495 |
-
#: views/tools/diagnostics/inc.settings.php:153
|
3496 |
-
msgid ""
|
3497 |
-
"If the value shows dynamic then this means its possible for PHP to run "
|
3498 |
-
"longer than the default. If the value is fixed then PHP will not be allowed "
|
3499 |
-
"to run longer than the default."
|
3500 |
-
msgstr ""
|
3501 |
-
|
3502 |
-
#: views/tools/diagnostics/inc.settings.php:158
|
3503 |
-
msgid "Shell Exec"
|
3504 |
-
msgstr ""
|
3505 |
-
|
3506 |
-
#: views/tools/diagnostics/inc.settings.php:159
|
3507 |
-
#: views/tools/diagnostics/inc.settings.php:163
|
3508 |
-
msgid "Is Supported"
|
3509 |
-
msgstr ""
|
3510 |
-
|
3511 |
-
#: views/tools/diagnostics/inc.settings.php:159
|
3512 |
-
#: views/tools/diagnostics/inc.settings.php:163
|
3513 |
-
msgid "Not Supported"
|
3514 |
-
msgstr ""
|
3515 |
-
|
3516 |
-
#: views/tools/diagnostics/inc.settings.php:162
|
3517 |
-
msgid "Shell Exec Zip"
|
3518 |
-
msgstr ""
|
3519 |
-
|
3520 |
-
#: views/tools/diagnostics/inc.settings.php:166
|
3521 |
-
msgid "Suhosin Extension"
|
3522 |
-
msgstr ""
|
3523 |
-
|
3524 |
-
#: views/tools/diagnostics/inc.settings.php:170
|
3525 |
-
msgid "Architecture "
|
3526 |
-
msgstr ""
|
3527 |
-
|
3528 |
-
#: views/tools/diagnostics/inc.settings.php:176
|
3529 |
-
msgid "Error Log File "
|
3530 |
-
msgstr ""
|
3531 |
-
|
3532 |
-
#: views/tools/diagnostics/inc.settings.php:187
|
3533 |
-
msgid "Comments"
|
3534 |
-
msgstr ""
|
3535 |
-
|
3536 |
-
#: views/tools/diagnostics/inc.settings.php:195
|
3537 |
-
msgid "Wait Timeout"
|
3538 |
-
msgstr ""
|
3539 |
-
|
3540 |
-
#: views/tools/diagnostics/inc.settings.php:199
|
3541 |
-
msgid "Max Allowed Packets"
|
3542 |
-
msgstr ""
|
3543 |
-
|
3544 |
-
#: views/tools/diagnostics/inc.settings.php:203
|
3545 |
-
msgid "msyqldump Path"
|
3546 |
-
msgstr ""
|
3547 |
-
|
3548 |
-
#: views/tools/diagnostics/inc.settings.php:207
|
3549 |
-
msgid "Server Disk"
|
3550 |
-
msgstr ""
|
3551 |
-
|
3552 |
-
#: views/tools/diagnostics/inc.settings.php:210
|
3553 |
-
msgid "Free space"
|
3554 |
-
msgstr ""
|
3555 |
-
|
3556 |
-
#: views/tools/diagnostics/inc.settings.php:213
|
3557 |
-
msgid "Note: This value is the physical servers hard-drive allocation."
|
3558 |
-
msgstr ""
|
3559 |
-
|
3560 |
-
#: views/tools/diagnostics/inc.settings.php:214
|
3561 |
-
msgid ""
|
3562 |
-
"On shared hosts check your control panel for the 'TRUE' disk space quota "
|
3563 |
-
"value."
|
3564 |
-
msgstr ""
|
3565 |
-
|
3566 |
-
#: views/tools/diagnostics/inc.validator.php:16
|
3567 |
-
msgid "Run Validator"
|
3568 |
-
msgstr ""
|
3569 |
-
|
3570 |
-
#: views/tools/diagnostics/inc.validator.php:17
|
3571 |
-
msgid ""
|
3572 |
-
"This will run the scan validation check. This may take several minutes. Do "
|
3573 |
-
"you want to Continue?"
|
3574 |
-
msgstr ""
|
3575 |
-
|
3576 |
-
#: views/tools/diagnostics/inc.validator.php:28
|
3577 |
-
msgid "Scan Validator"
|
3578 |
-
msgstr ""
|
3579 |
-
|
3580 |
-
#: views/tools/diagnostics/inc.validator.php:33
|
3581 |
-
msgid ""
|
3582 |
-
"This utility will help to find unreadable files and sys-links in your "
|
3583 |
-
"environment that can lead to issues during the scan process. "
|
3584 |
-
msgstr ""
|
3585 |
-
|
3586 |
-
#: views/tools/diagnostics/inc.validator.php:34
|
3587 |
-
msgid ""
|
3588 |
-
"The utility will also shows how many files and directories you have in your "
|
3589 |
-
"system. This process may take several minutes to run. "
|
3590 |
-
msgstr ""
|
3591 |
-
|
3592 |
-
#: views/tools/diagnostics/inc.validator.php:35
|
3593 |
-
msgid ""
|
3594 |
-
"If there is a recursive loop on your system then the process has a built in "
|
3595 |
-
"check to stop after a large set of files and directories have been scanned. "
|
3596 |
-
msgstr ""
|
3597 |
-
|
3598 |
-
#: views/tools/diagnostics/inc.validator.php:36
|
3599 |
-
msgid ""
|
3600 |
-
"A message will show indicated that that a scan depth has been reached. If "
|
3601 |
-
"you have issues with the package scanner (step 2) during the build process "
|
3602 |
-
"then try to add The paths below to your file filters to allow the scanner to "
|
3603 |
-
"finish."
|
3604 |
-
msgstr ""
|
3605 |
-
|
3606 |
-
#: views/tools/diagnostics/inc.validator.php:43
|
3607 |
-
#: views/tools/diagnostics/inc.validator.php:153
|
3608 |
-
msgid "Run Scan Integrity Validation"
|
3609 |
-
msgstr ""
|
3610 |
-
|
3611 |
-
#: views/tools/diagnostics/inc.validator.php:77
|
3612 |
-
msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
|
3613 |
-
msgstr ""
|
3614 |
-
|
3615 |
-
#: views/tools/diagnostics/inc.validator.php:122
|
3616 |
-
msgid "Scanning Environment... This may take a few minutes."
|
3617 |
-
msgstr ""
|
3618 |
-
|
3619 |
-
#: views/tools/diagnostics/information.php:25
|
3620 |
-
msgid "File Found: Unable to remove"
|
3621 |
-
msgstr ""
|
3622 |
-
|
3623 |
-
#: views/tools/diagnostics/information.php:26
|
3624 |
-
msgid "Removed"
|
3625 |
-
msgstr ""
|
3626 |
-
|
3627 |
-
#: views/tools/diagnostics/information.php:44
|
3628 |
-
msgid "Installer file cleanup ran!"
|
3629 |
-
msgstr ""
|
3630 |
-
|
3631 |
-
#: views/tools/diagnostics/information.php:48
|
3632 |
-
msgid "Build cache removed."
|
3633 |
-
msgstr ""
|
3634 |
-
|
3635 |
-
#: views/tools/diagnostics/information.php:125
|
3636 |
-
msgid "No Duplicator installer files found on this WordPress Site."
|
3637 |
-
msgstr ""
|
3638 |
-
|
3639 |
-
#: views/tools/diagnostics/information.php:132
|
3640 |
-
msgid "Security Notes"
|
3641 |
-
msgstr ""
|
3642 |
-
|
3643 |
-
#: views/tools/diagnostics/information.php:133
|
3644 |
-
msgid ""
|
3645 |
-
"If the installer files do not successfully get removed with this action, "
|
3646 |
-
"then they WILL need to be removed manually through your hosts control panel "
|
3647 |
-
"or FTP. Please remove all installer files to avoid any security issues on "
|
3648 |
-
"this site. For more details please visit the FAQ link <a href=\"https://"
|
3649 |
-
"snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target="
|
3650 |
-
"\"_blank\">Which files need to be removed after an install?</a>"
|
3651 |
-
msgstr ""
|
3652 |
-
|
3653 |
-
#: views/tools/diagnostics/information.php:140
|
3654 |
-
msgid "Some of the installer files did not get removed, "
|
3655 |
-
msgstr ""
|
3656 |
-
|
3657 |
-
#: views/tools/diagnostics/information.php:142
|
3658 |
-
msgid "please retry the installer cleanup process"
|
3659 |
-
msgstr ""
|
3660 |
-
|
3661 |
-
#: views/tools/diagnostics/information.php:144
|
3662 |
-
msgid " If this process continues please see the previous FAQ link."
|
3663 |
-
msgstr ""
|
3664 |
-
|
3665 |
-
#: views/tools/diagnostics/information.php:148
|
3666 |
-
msgid "Help Support Duplicator"
|
3667 |
-
msgstr ""
|
3668 |
-
|
3669 |
-
#: views/tools/diagnostics/information.php:149
|
3670 |
-
msgid ""
|
3671 |
-
"The Duplicator team has worked many years to make moving a WordPress site a "
|
3672 |
-
"much easier process. Show your support with a <a href=\"https://wordpress."
|
3673 |
-
"org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star "
|
3674 |
-
"review</a>! We would be thrilled if you could!"
|
3675 |
-
msgstr ""
|
3676 |
-
|
3677 |
-
#: views/tools/diagnostics/information.php:159
|
3678 |
-
msgid "Please test the entire site to validate the migration process!"
|
3679 |
-
msgstr ""
|
3680 |
-
|
3681 |
-
#: views/tools/diagnostics/information.php:165
|
3682 |
-
msgid ""
|
3683 |
-
"NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable "
|
3684 |
-
"all your plugins."
|
3685 |
-
msgstr ""
|
3686 |
-
|
3687 |
-
#: views/tools/diagnostics/information.php:170
|
3688 |
-
msgid ""
|
3689 |
-
"NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-"
|
3690 |
-
"enable all your plugins."
|
3691 |
-
msgstr ""
|
3692 |
-
|
3693 |
-
#: views/tools/diagnostics/information.php:212
|
3694 |
-
msgid "Plugin settings reset."
|
3695 |
-
msgstr ""
|
3696 |
-
|
3697 |
-
#: views/tools/diagnostics/information.php:213
|
3698 |
-
msgid "View state settings reset."
|
3699 |
-
msgstr ""
|
3700 |
-
|
3701 |
-
#: views/tools/diagnostics/information.php:214
|
3702 |
-
msgid "Active package settings reset."
|
3703 |
-
msgstr ""
|
3704 |
-
|
3705 |
-
#: views/tools/diagnostics/logging.php:166
|
3706 |
-
msgid "Log file not found or unreadable"
|
3707 |
-
msgstr ""
|
3708 |
-
|
3709 |
-
#: views/tools/diagnostics/logging.php:167
|
3710 |
-
msgid ""
|
3711 |
-
"Try to create a package, since no log files were found in the snapshots "
|
3712 |
-
"directory with the extension *.log"
|
3713 |
-
msgstr ""
|
3714 |
-
|
3715 |
-
#: views/tools/diagnostics/logging.php:168
|
3716 |
-
msgid "Reasons for log file not showing"
|
3717 |
-
msgstr ""
|
3718 |
-
|
3719 |
-
#: views/tools/diagnostics/logging.php:169
|
3720 |
-
msgid "The web server does not support returning .log file extentions"
|
3721 |
-
msgstr ""
|
3722 |
-
|
3723 |
-
#: views/tools/diagnostics/logging.php:170
|
3724 |
-
msgid ""
|
3725 |
-
"The snapshots directory does not have the correct permissions to write "
|
3726 |
-
"files. Try setting the permissions to 755"
|
3727 |
-
msgstr ""
|
3728 |
-
|
3729 |
-
#: views/tools/diagnostics/logging.php:171
|
3730 |
-
msgid ""
|
3731 |
-
"The process that PHP runs under does not have enough permissions to create "
|
3732 |
-
"files. Please contact your hosting provider for more details"
|
3733 |
-
msgstr ""
|
3734 |
-
|
3735 |
-
#: views/tools/diagnostics/logging.php:185
|
3736 |
-
msgid "Consider our recommended"
|
3737 |
-
msgstr ""
|
3738 |
-
|
3739 |
-
#: views/tools/diagnostics/logging.php:187
|
3740 |
-
msgid "if you’re unhappy with your current provider"
|
3741 |
-
msgstr ""
|
3742 |
-
|
3743 |
-
#: views/tools/diagnostics/logging.php:191
|
3744 |
-
#: views/tools/diagnostics/logging.php:196
|
3745 |
-
msgid "Options"
|
3746 |
-
msgstr ""
|
3747 |
-
|
3748 |
-
#: views/tools/diagnostics/logging.php:198
|
3749 |
-
msgid "Refresh"
|
3750 |
-
msgstr ""
|
3751 |
-
|
3752 |
-
#: views/tools/diagnostics/logging.php:201
|
3753 |
-
msgid "Auto Refresh"
|
3754 |
-
msgstr ""
|
3755 |
-
|
3756 |
-
#: views/tools/diagnostics/logging.php:207
|
3757 |
-
msgid "Package Logs"
|
3758 |
-
msgstr ""
|
3759 |
-
|
3760 |
-
#: views/tools/diagnostics/logging.php:208
|
3761 |
-
msgid "Top 20"
|
3762 |
-
msgstr ""
|
3763 |
-
|
3764 |
-
#: views/tools/diagnostics/main.php:43
|
3765 |
-
msgid "Information"
|
3766 |
-
msgstr ""
|
3767 |
-
|
3768 |
-
#: views/tools/diagnostics/main.php:44
|
3769 |
-
msgid "Logs"
|
3770 |
-
msgstr ""
|
3771 |
-
|
3772 |
-
#: views/tools/diagnostics/support.php:32
|
3773 |
-
msgid ""
|
3774 |
-
"Migrating WordPress is a complex process and the logic to make all the magic "
|
3775 |
-
"happen smoothly may not work quickly with every site. With over 30,000 "
|
3776 |
-
"plugins and a very complex server eco-system some migrations may run into "
|
3777 |
-
"issues. This is why the Duplicator includes a detailed knowledgebase that "
|
3778 |
-
"can help with many common issues. Resources to additional support, approved "
|
3779 |
-
"hosting, and alternatives to fit your needs can be found below."
|
3780 |
-
msgstr ""
|
3781 |
-
|
3782 |
-
#: views/tools/diagnostics/support.php:44
|
3783 |
-
msgid "Knowledgebase"
|
3784 |
-
msgstr ""
|
3785 |
-
|
3786 |
-
#: views/tools/diagnostics/support.php:47
|
3787 |
-
msgid "Complete Online Documentation"
|
3788 |
-
msgstr ""
|
3789 |
-
|
3790 |
-
#: views/tools/diagnostics/support.php:49
|
3791 |
-
msgid "Choose A Section"
|
3792 |
-
msgstr ""
|
3793 |
-
|
3794 |
-
#: views/tools/diagnostics/support.php:50
|
3795 |
-
msgid "Quick Start"
|
3796 |
-
msgstr ""
|
3797 |
-
|
3798 |
-
#: views/tools/diagnostics/support.php:52
|
3799 |
-
msgid "User Guide"
|
3800 |
-
msgstr ""
|
3801 |
-
|
3802 |
-
#: views/tools/diagnostics/support.php:54
|
3803 |
-
msgid "FAQs"
|
3804 |
-
msgstr ""
|
3805 |
-
|
3806 |
-
#: views/tools/diagnostics/support.php:56
|
3807 |
-
msgid "Change Log"
|
3808 |
-
msgstr ""
|
3809 |
-
|
3810 |
-
#: views/tools/diagnostics/support.php:66
|
3811 |
-
msgid "Online Support"
|
3812 |
-
msgstr ""
|
3813 |
-
|
3814 |
-
#: views/tools/diagnostics/support.php:69
|
3815 |
-
msgid "Get Help From IT Professionals"
|
3816 |
-
msgstr ""
|
3817 |
-
|
3818 |
-
#: views/tools/diagnostics/support.php:73
|
3819 |
-
msgid "Get Support!"
|
3820 |
-
msgstr ""
|
3821 |
-
|
3822 |
-
#: views/tools/diagnostics/support.php:87
|
3823 |
-
msgid "Approved Hosting"
|
3824 |
-
msgstr ""
|
3825 |
-
|
3826 |
-
#: views/tools/diagnostics/support.php:90
|
3827 |
-
msgid "Servers That Work With Duplicator"
|
3828 |
-
msgstr ""
|
3829 |
-
|
3830 |
-
#: views/tools/diagnostics/support.php:93
|
3831 |
-
msgid "Trusted Providers!"
|
3832 |
-
msgstr ""
|
3833 |
-
|
3834 |
-
#: views/tools/diagnostics/support.php:104
|
3835 |
-
msgid "Alternatives"
|
3836 |
-
msgstr ""
|
3837 |
-
|
3838 |
-
#: views/tools/diagnostics/support.php:107
|
3839 |
-
msgid "Other Commercial Resources"
|
3840 |
-
msgstr ""
|
3841 |
-
|
3842 |
-
#: views/tools/diagnostics/support.php:110
|
3843 |
-
msgid "Pro Solutions!"
|
3844 |
-
msgstr ""
|
3845 |
-
|
3846 |
-
#: views/tools/templates.php:16
|
3847 |
-
msgid ""
|
3848 |
-
"Templates allow you to customize what you want to include in your site and "
|
3849 |
-
"store it as a re-usable profile."
|
3850 |
-
msgstr ""
|
3851 |
-
|
3852 |
-
#: views/tools/templates.php:18
|
3853 |
-
msgid ""
|
3854 |
-
"Save time and create a template that can be applied to a schedule or a "
|
3855 |
-
"custom package setup."
|
3856 |
-
msgstr ""
|
1 |
+
# Copyright (C) 2019 Snap Creek
|
2 |
+
# This file is distributed under the same license as the Duplicator plugin.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Duplicator 1.3.7\n"
|
6 |
+
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
|
7 |
+
"Language-Team: \n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"POT-Creation-Date: 2019-09-02 12:30+0530\n"
|
12 |
+
"PO-Revision-Date: 2019-09-02 12:45+0530\n"
|
13 |
+
"X-Generator: Poedit 2.2.3\n"
|
14 |
+
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;"
|
15 |
+
"esc_attr__\n"
|
16 |
+
"X-Poedit-Basepath: ..\n"
|
17 |
+
"Last-Translator: \n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
+
"Language: en_US\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
#: classes/class.logging.php:141
|
23 |
+
msgid "No Log"
|
24 |
+
msgstr ""
|
25 |
+
|
26 |
+
#: classes/class.server.php:207
|
27 |
+
msgid "(directory)"
|
28 |
+
msgstr ""
|
29 |
+
|
30 |
+
#: classes/package/class.pack.database.php:663
|
31 |
+
msgid "Please contact your DataBase administrator to fix the error."
|
32 |
+
msgstr ""
|
33 |
+
|
34 |
+
#: classes/package/class.pack.installer.php:90
|
35 |
+
msgid "Error reading DupArchive mini expander"
|
36 |
+
msgstr ""
|
37 |
+
|
38 |
+
#: classes/package/class.pack.installer.php:103
|
39 |
+
msgid "Error writing installer contents"
|
40 |
+
msgstr ""
|
41 |
+
|
42 |
+
#: classes/package/class.pack.php:309
|
43 |
+
msgid "Package name can't be empty"
|
44 |
+
msgstr ""
|
45 |
+
|
46 |
+
#: classes/package/class.pack.php:315
|
47 |
+
#, php-format
|
48 |
+
msgid "Directories: <b>%1$s</b> isn't a valid path"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: classes/package/class.pack.php:321
|
52 |
+
#, php-format
|
53 |
+
msgid "File extension: <b>%1$s</b> isn't a valid extension"
|
54 |
+
msgstr ""
|
55 |
+
|
56 |
+
#: classes/package/class.pack.php:327
|
57 |
+
#, php-format
|
58 |
+
msgid "Files: <b>%1$s</b> isn't a valid file name"
|
59 |
+
msgstr ""
|
60 |
+
|
61 |
+
#: classes/package/class.pack.php:335
|
62 |
+
#, php-format
|
63 |
+
msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
|
64 |
+
msgstr ""
|
65 |
+
|
66 |
+
#: classes/package/class.pack.php:346
|
67 |
+
#, php-format
|
68 |
+
msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: classes/package/class.pack.php:845
|
72 |
+
#, php-format
|
73 |
+
msgid ""
|
74 |
+
"Can't find Scanfile %s. Please ensure there no non-English characters in the "
|
75 |
+
"package or schedule name."
|
76 |
+
msgstr ""
|
77 |
+
|
78 |
+
#: classes/package/class.pack.php:868
|
79 |
+
#, php-format
|
80 |
+
msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: classes/package/class.pack.php:869
|
84 |
+
#, php-format
|
85 |
+
msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: classes/package/class.pack.php:913
|
89 |
+
#, php-format
|
90 |
+
msgid "ERROR: Cannot open created archive. Error code = %1$s"
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: classes/package/class.pack.php:918
|
94 |
+
msgid "ERROR: Archive is not valid zip archive."
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: classes/package/class.pack.php:922
|
98 |
+
msgid "ERROR: Archive doesn't pass consistency check."
|
99 |
+
msgstr ""
|
100 |
+
|
101 |
+
#: classes/package/class.pack.php:927
|
102 |
+
msgid "ERROR: Archive checksum is bad."
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: classes/package/class.pack.php:938
|
106 |
+
msgid "ARCHIVE CONSISTENCY TEST: Pass"
|
107 |
+
msgstr ""
|
108 |
+
|
109 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:44
|
110 |
+
msgid ""
|
111 |
+
"Package build appears stuck so marking package as failed. Is the Max Worker "
|
112 |
+
"Time set too high?."
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:45
|
116 |
+
msgid "Build Failure"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:83
|
120 |
+
msgid "Click on \"Resolve This\" button to fix the JSON settings."
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:95
|
124 |
+
#, php-format
|
125 |
+
msgid ""
|
126 |
+
"ERROR: Can't find Scanfile %s. Please ensure there no non-English characters "
|
127 |
+
"in the package or schedule name."
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:214
|
131 |
+
msgid "Problem adding items to archive."
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:216
|
135 |
+
msgid "Problems adding items to archive."
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:314
|
139 |
+
msgid "Critical failure present in validation"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: classes/ui/class.ui.dialog.php:95
|
143 |
+
msgid "Processing please wait..."
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: classes/ui/class.ui.dialog.php:98
|
147 |
+
msgid "OK"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: classes/ui/class.ui.dialog.php:99 deactivation.php:135
|
151 |
+
msgid "Cancel"
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: classes/ui/class.ui.notice.php:47
|
155 |
+
msgid "Safe Mode:"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: classes/ui/class.ui.notice.php:48
|
159 |
+
msgid ""
|
160 |
+
"During the install safe mode was enabled deactivating all plugins.<br/> "
|
161 |
+
"Please be sure to "
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: classes/ui/class.ui.notice.php:49
|
165 |
+
msgid "re-activate the plugins"
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: classes/ui/class.ui.notice.php:56
|
169 |
+
#: views/tools/diagnostics/information.php:158
|
170 |
+
msgid "This site has been successfully migrated!"
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: classes/ui/class.ui.notice.php:57
|
174 |
+
msgid "Final step(s):"
|
175 |
+
msgstr ""
|
176 |
+
|
177 |
+
#: classes/ui/class.ui.notice.php:58
|
178 |
+
msgid ""
|
179 |
+
"This message will be removed after all installer files are removed. "
|
180 |
+
"Installer files must be removed to maintain a secure site. Click the link "
|
181 |
+
"above or button below to remove all installer files and complete the "
|
182 |
+
"migration."
|
183 |
+
msgstr ""
|
184 |
+
|
185 |
+
#: classes/ui/class.ui.notice.php:62
|
186 |
+
msgid "Remove Installation Files Now!"
|
187 |
+
msgstr ""
|
188 |
+
|
189 |
+
#: classes/ui/class.ui.notice.php:63
|
190 |
+
msgid "Optionally, Review Duplicator at WordPress.org..."
|
191 |
+
msgstr ""
|
192 |
+
|
193 |
+
#: classes/ui/class.ui.notice.php:69
|
194 |
+
msgid "Migration Almost Complete!"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: classes/ui/class.ui.notice.php:70
|
198 |
+
msgid ""
|
199 |
+
"Reserved Duplicator installation files have been detected in the root "
|
200 |
+
"directory. Please delete these installation files to avoid security issues. "
|
201 |
+
"<br/> Go to:Duplicator > Tools > Information >Stored Data and click the "
|
202 |
+
"\"Remove Installation Files\" button"
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: classes/ui/class.ui.notice.php:76
|
206 |
+
msgid "Take me there now!"
|
207 |
+
msgstr ""
|
208 |
+
|
209 |
+
#: classes/ui/class.ui.notice.php:91
|
210 |
+
msgid "Redirecting Please Wait..."
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: classes/ui/class.ui.notice.php:94
|
214 |
+
msgid "Invalid token permissions to perform this request."
|
215 |
+
msgstr ""
|
216 |
+
|
217 |
+
#: classes/ui/class.ui.notice.php:117
|
218 |
+
#, php-format
|
219 |
+
msgid "Activate %s"
|
220 |
+
msgstr ""
|
221 |
+
|
222 |
+
#: classes/ui/class.ui.screen.base.php:44
|
223 |
+
msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
|
224 |
+
msgstr ""
|
225 |
+
|
226 |
+
#: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
|
227 |
+
#: views/tools/diagnostics/main.php:45
|
228 |
+
msgid "Support"
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: classes/ui/class.ui.screen.base.php:65
|
232 |
+
msgid "Resources"
|
233 |
+
msgstr ""
|
234 |
+
|
235 |
+
#: classes/ui/class.ui.screen.base.php:66
|
236 |
+
msgid "Knowledge Base"
|
237 |
+
msgstr ""
|
238 |
+
|
239 |
+
#: classes/ui/class.ui.screen.base.php:67
|
240 |
+
msgid "Full User Guide"
|
241 |
+
msgstr ""
|
242 |
+
|
243 |
+
#: classes/ui/class.ui.screen.base.php:68
|
244 |
+
msgid "Technical FAQs"
|
245 |
+
msgstr ""
|
246 |
+
|
247 |
+
#: classes/ui/class.ui.screen.base.php:69
|
248 |
+
msgid "Package Settings"
|
249 |
+
msgstr ""
|
250 |
+
|
251 |
+
#: classes/utilities/class.u.php:64
|
252 |
+
msgid "32-bit"
|
253 |
+
msgstr ""
|
254 |
+
|
255 |
+
#: classes/utilities/class.u.php:67
|
256 |
+
msgid "64-bit"
|
257 |
+
msgstr ""
|
258 |
+
|
259 |
+
#: classes/utilities/class.u.php:70
|
260 |
+
msgid "Unknown"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: classes/utilities/class.u.php:496
|
264 |
+
msgid "You do not have sufficient permissions to access this page."
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: ctrls/ctrl.package.php:175
|
268 |
+
msgid "Error building DupArchive package"
|
269 |
+
msgstr ""
|
270 |
+
|
271 |
+
#: ctrls/ctrl.package.php:303
|
272 |
+
msgid ""
|
273 |
+
"An unathorized security request was made to this page. Please try again!"
|
274 |
+
msgstr ""
|
275 |
+
|
276 |
+
#: ctrls/ctrl.package.php:325
|
277 |
+
msgid "Active package object error"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
|
281 |
+
msgid "Couldn't find a local copy of the file requested."
|
282 |
+
msgstr ""
|
283 |
+
|
284 |
+
#: deactivation.php:48
|
285 |
+
msgid "Need help? We are ready to answer your questions."
|
286 |
+
msgstr ""
|
287 |
+
|
288 |
+
#: deactivation.php:48
|
289 |
+
msgid "Contact Support"
|
290 |
+
msgstr ""
|
291 |
+
|
292 |
+
#: deactivation.php:53
|
293 |
+
msgid "It's not working on my server."
|
294 |
+
msgstr ""
|
295 |
+
|
296 |
+
#: deactivation.php:55
|
297 |
+
msgid "Kindly share what didn't work so we can fix it in future updates..."
|
298 |
+
msgstr ""
|
299 |
+
|
300 |
+
#: deactivation.php:60
|
301 |
+
msgid "It's too confusing to understand."
|
302 |
+
msgstr ""
|
303 |
+
|
304 |
+
#: deactivation.php:62
|
305 |
+
msgid "Please tell us what is not clear so that we can improve it."
|
306 |
+
msgstr ""
|
307 |
+
|
308 |
+
#: deactivation.php:67
|
309 |
+
msgid "I found a different plugin that I like better."
|
310 |
+
msgstr ""
|
311 |
+
|
312 |
+
#: deactivation.php:69
|
313 |
+
msgid "What's the plugin name?"
|
314 |
+
msgstr ""
|
315 |
+
|
316 |
+
#: deactivation.php:73
|
317 |
+
msgid "It does not do what I need."
|
318 |
+
msgstr ""
|
319 |
+
|
320 |
+
#: deactivation.php:75
|
321 |
+
msgid "What does it need to do?"
|
322 |
+
msgstr ""
|
323 |
+
|
324 |
+
#: deactivation.php:79
|
325 |
+
msgid "It's a temporary deactivation, I use the plugin all the time."
|
326 |
+
msgstr ""
|
327 |
+
|
328 |
+
#: deactivation.php:85
|
329 |
+
#, php-format
|
330 |
+
msgid "I'm switching over to the %s"
|
331 |
+
msgstr ""
|
332 |
+
|
333 |
+
#: deactivation.php:85
|
334 |
+
msgid "Pro version"
|
335 |
+
msgstr ""
|
336 |
+
|
337 |
+
#: deactivation.php:128
|
338 |
+
msgid "Quick Feedback"
|
339 |
+
msgstr ""
|
340 |
+
|
341 |
+
#: deactivation.php:129
|
342 |
+
msgid "If you have a moment, please let us know why you are deactivating"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: deactivation.php:136 deactivation.php:344
|
346 |
+
msgid "Skip & Deactivate"
|
347 |
+
msgstr ""
|
348 |
+
|
349 |
+
#: deactivation.php:137
|
350 |
+
msgid "Send & Deactivate"
|
351 |
+
msgstr ""
|
352 |
+
|
353 |
+
#: deactivation.php:140
|
354 |
+
msgid "Your response is sent anonymously."
|
355 |
+
msgstr ""
|
356 |
+
|
357 |
+
#: deactivation.php:235 deactivation.php:236
|
358 |
+
msgid "Processing"
|
359 |
+
msgstr ""
|
360 |
+
|
361 |
+
#: deactivation.php:283
|
362 |
+
msgid "Please tell us the reason so we can improve it."
|
363 |
+
msgstr ""
|
364 |
+
|
365 |
+
#: duplicator.php:398 views/packages/details/controller.php:48
|
366 |
+
#: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
|
367 |
+
#: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
|
368 |
+
#: views/settings/controller.php:23
|
369 |
+
msgid "Packages"
|
370 |
+
msgstr ""
|
371 |
+
|
372 |
+
#: duplicator.php:404 views/tools/controller.php:19
|
373 |
+
msgid "Tools"
|
374 |
+
msgstr ""
|
375 |
+
|
376 |
+
#: duplicator.php:409 views/packages/main/packages.php:85
|
377 |
+
#: views/settings/controller.php:19 views/settings/general.php:179
|
378 |
+
msgid "Settings"
|
379 |
+
msgstr ""
|
380 |
+
|
381 |
+
#: duplicator.php:413
|
382 |
+
msgid "Go Pro!"
|
383 |
+
msgstr ""
|
384 |
+
|
385 |
+
#: duplicator.php:481 views/settings/license.php:8
|
386 |
+
msgid "Manage"
|
387 |
+
msgstr ""
|
388 |
+
|
389 |
+
#: duplicator.php:498 views/packages/main/packages.php:82
|
390 |
+
msgid "Get Help"
|
391 |
+
msgstr ""
|
392 |
+
|
393 |
+
#: duplicator.php:498
|
394 |
+
msgid "Go Pro"
|
395 |
+
msgstr ""
|
396 |
+
|
397 |
+
#: views/packages/details/controller.php:13
|
398 |
+
msgid "package log"
|
399 |
+
msgstr ""
|
400 |
+
|
401 |
+
#: views/packages/details/controller.php:14
|
402 |
+
msgid "FAQ"
|
403 |
+
msgstr ""
|
404 |
+
|
405 |
+
#: views/packages/details/controller.php:15
|
406 |
+
msgid "resources page"
|
407 |
+
msgstr ""
|
408 |
+
|
409 |
+
#: views/packages/details/controller.php:34
|
410 |
+
msgid "This package contains an error. Please review the "
|
411 |
+
msgstr ""
|
412 |
+
|
413 |
+
#: views/packages/details/controller.php:34
|
414 |
+
msgid " for details."
|
415 |
+
msgstr ""
|
416 |
+
|
417 |
+
#: views/packages/details/controller.php:35
|
418 |
+
msgid "For help visit the "
|
419 |
+
msgstr ""
|
420 |
+
|
421 |
+
#: views/packages/details/controller.php:35
|
422 |
+
msgid " and "
|
423 |
+
msgstr ""
|
424 |
+
|
425 |
+
#: views/packages/details/controller.php:42
|
426 |
+
msgid "Details"
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
+
#: views/packages/details/controller.php:45
|
430 |
+
msgid "Transfer"
|
431 |
+
msgstr ""
|
432 |
+
|
433 |
+
#: views/packages/details/detail.php:63
|
434 |
+
msgid "Invalid Package ID request. Please try again!"
|
435 |
+
msgstr ""
|
436 |
+
|
437 |
+
#: views/packages/details/detail.php:75 views/settings/controller.php:22
|
438 |
+
#: views/tools/diagnostics/inc.settings.php:29
|
439 |
+
msgid "General"
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: views/packages/details/detail.php:81 views/packages/details/detail.php:184
|
443 |
+
#: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
|
444 |
+
#: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
|
445 |
+
#: views/packages/main/s3.build.php:133
|
446 |
+
msgid "Name"
|
447 |
+
msgstr ""
|
448 |
+
|
449 |
+
#: views/packages/details/detail.php:85
|
450 |
+
msgid "ID"
|
451 |
+
msgstr ""
|
452 |
+
|
453 |
+
#: views/packages/details/detail.php:86
|
454 |
+
msgid "Hash"
|
455 |
+
msgstr ""
|
456 |
+
|
457 |
+
#: views/packages/details/detail.php:87
|
458 |
+
msgid "Full Name"
|
459 |
+
msgstr ""
|
460 |
+
|
461 |
+
#: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
|
462 |
+
#: views/packages/main/s2.scan3.php:530
|
463 |
+
msgid "Notes"
|
464 |
+
msgstr ""
|
465 |
+
|
466 |
+
#: views/packages/details/detail.php:93
|
467 |
+
msgid "- no notes -"
|
468 |
+
msgstr ""
|
469 |
+
|
470 |
+
#: views/packages/details/detail.php:96
|
471 |
+
msgid "Versions"
|
472 |
+
msgstr ""
|
473 |
+
|
474 |
+
#: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
|
475 |
+
msgid "WordPress"
|
476 |
+
msgstr ""
|
477 |
+
|
478 |
+
#: views/packages/details/detail.php:100 views/packages/details/detail.php:101
|
479 |
+
#: views/packages/details/detail.php:103 views/packages/details/detail.php:104
|
480 |
+
#: views/packages/details/detail.php:118
|
481 |
+
msgid "- unknown -"
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: views/packages/details/detail.php:101
|
485 |
+
msgid "PHP"
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: views/packages/details/detail.php:102
|
489 |
+
msgid "Mysql"
|
490 |
+
msgstr ""
|
491 |
+
|
492 |
+
#: views/packages/details/detail.php:109
|
493 |
+
msgid "Runtime"
|
494 |
+
msgstr ""
|
495 |
+
|
496 |
+
#: views/packages/details/detail.php:110
|
497 |
+
msgid "error running"
|
498 |
+
msgstr ""
|
499 |
+
|
500 |
+
#: views/packages/details/detail.php:113
|
501 |
+
msgid "Status"
|
502 |
+
msgstr ""
|
503 |
+
|
504 |
+
#: views/packages/details/detail.php:114
|
505 |
+
msgid "completed"
|
506 |
+
msgstr ""
|
507 |
+
|
508 |
+
#: views/packages/details/detail.php:114
|
509 |
+
msgid "in-complete"
|
510 |
+
msgstr ""
|
511 |
+
|
512 |
+
#: views/packages/details/detail.php:117 views/packages/details/detail.php:366
|
513 |
+
#: views/packages/main/s1.setup2.php:472
|
514 |
+
#: views/tools/diagnostics/inc.settings.php:118
|
515 |
+
msgid "User"
|
516 |
+
msgstr ""
|
517 |
+
|
518 |
+
#: views/packages/details/detail.php:121 views/packages/details/detail.php:269
|
519 |
+
#: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
|
520 |
+
#: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
|
521 |
+
msgid "Files"
|
522 |
+
msgstr ""
|
523 |
+
|
524 |
+
#: views/packages/details/detail.php:129
|
525 |
+
msgid "Log"
|
526 |
+
msgstr ""
|
527 |
+
|
528 |
+
#: views/packages/details/detail.php:130
|
529 |
+
msgid "Share"
|
530 |
+
msgstr ""
|
531 |
+
|
532 |
+
#: views/packages/details/detail.php:138 views/packages/details/detail.php:226
|
533 |
+
#: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
|
534 |
+
#: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
|
535 |
+
#: views/settings/packages.php:204
|
536 |
+
msgid "Archive"
|
537 |
+
msgstr ""
|
538 |
+
|
539 |
+
#: views/packages/details/detail.php:142 views/packages/details/detail.php:325
|
540 |
+
#: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
|
541 |
+
#: views/packages/main/s3.build.php:143
|
542 |
+
msgid "Installer"
|
543 |
+
msgstr ""
|
544 |
+
|
545 |
+
#: views/packages/details/detail.php:146 views/packages/details/detail.php:362
|
546 |
+
#: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
|
547 |
+
#: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
|
548 |
+
#: views/settings/packages.php:70
|
549 |
+
msgid "Database"
|
550 |
+
msgstr ""
|
551 |
+
|
552 |
+
#: views/packages/details/detail.php:160
|
553 |
+
msgid "Download Links"
|
554 |
+
msgstr ""
|
555 |
+
|
556 |
+
#: views/packages/details/detail.php:163
|
557 |
+
msgid "The following links contain sensitive data. Please share with caution!"
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#: views/packages/details/detail.php:169
|
561 |
+
msgid ""
|
562 |
+
"The database SQL script is a quick link to your database backup script. An "
|
563 |
+
"exact copy is also stored in the package."
|
564 |
+
msgstr ""
|
565 |
+
|
566 |
+
#: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
|
567 |
+
#: views/settings/controller.php:25 views/settings/general.php:110
|
568 |
+
msgid "Storage"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: views/packages/details/detail.php:185 views/packages/details/detail.php:286
|
572 |
+
#: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
|
573 |
+
msgid "Type"
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
|
577 |
+
msgid "Location"
|
578 |
+
msgstr ""
|
579 |
+
|
580 |
+
#: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
|
581 |
+
msgid "Default"
|
582 |
+
msgstr ""
|
583 |
+
|
584 |
+
#: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
|
585 |
+
msgid "Local"
|
586 |
+
msgstr ""
|
587 |
+
|
588 |
+
#: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
|
589 |
+
#, php-format
|
590 |
+
msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
|
594 |
+
#: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
|
595 |
+
#: views/packages/main/s3.build.php:21
|
596 |
+
msgid "Duplicator Pro"
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
|
600 |
+
msgid "Additional Storage:"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
|
604 |
+
msgid ""
|
605 |
+
"Duplicator Pro allows you to create a package and then store it at a custom "
|
606 |
+
"location on this server or to a cloud based location such as Google Drive, "
|
607 |
+
"Amazon, Dropbox or FTP."
|
608 |
+
msgstr ""
|
609 |
+
|
610 |
+
#: views/packages/details/detail.php:234 views/packages/details/detail.php:290
|
611 |
+
#: views/packages/main/s1.setup2.php:260
|
612 |
+
msgid "Build Mode"
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: views/packages/details/detail.php:241
|
616 |
+
msgid "Database Mode"
|
617 |
+
msgstr ""
|
618 |
+
|
619 |
+
#: views/packages/details/detail.php:242
|
620 |
+
msgid "Archive Database Only Enabled"
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: views/packages/details/detail.php:246 views/packages/details/detail.php:303
|
624 |
+
msgid "Filters"
|
625 |
+
msgstr ""
|
626 |
+
|
627 |
+
#: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
|
628 |
+
#: views/packages/main/s2.scan3.php:629
|
629 |
+
msgid "Directories"
|
630 |
+
msgstr ""
|
631 |
+
|
632 |
+
#: views/packages/details/detail.php:254 views/packages/details/detail.php:264
|
633 |
+
#: views/packages/details/detail.php:273 views/packages/details/detail.php:312
|
634 |
+
msgid "- no filters -"
|
635 |
+
msgstr ""
|
636 |
+
|
637 |
+
#: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
|
638 |
+
msgid "Extensions"
|
639 |
+
msgstr ""
|
640 |
+
|
641 |
+
#: views/packages/details/detail.php:283 views/packages/details/detail.php:395
|
642 |
+
msgid "DATABASE"
|
643 |
+
msgstr ""
|
644 |
+
|
645 |
+
#: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
|
646 |
+
msgid "MySQL Compatibility Mode Enabled"
|
647 |
+
msgstr ""
|
648 |
+
|
649 |
+
#: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
|
650 |
+
#: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
|
651 |
+
#: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
|
652 |
+
msgid "details"
|
653 |
+
msgstr ""
|
654 |
+
|
655 |
+
#: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
|
656 |
+
msgid "Tables"
|
657 |
+
msgstr ""
|
658 |
+
|
659 |
+
#: views/packages/details/detail.php:332
|
660 |
+
msgid " Security"
|
661 |
+
msgstr ""
|
662 |
+
|
663 |
+
#: views/packages/details/detail.php:336
|
664 |
+
msgid "Password Protection"
|
665 |
+
msgstr ""
|
666 |
+
|
667 |
+
#: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
|
668 |
+
msgid "Show/Hide Password"
|
669 |
+
msgstr ""
|
670 |
+
|
671 |
+
#: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
|
672 |
+
msgid " MySQL Server"
|
673 |
+
msgstr ""
|
674 |
+
|
675 |
+
#: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
|
676 |
+
msgid "Host"
|
677 |
+
msgstr ""
|
678 |
+
|
679 |
+
#: views/packages/details/detail.php:359 views/packages/details/detail.php:363
|
680 |
+
#: views/packages/details/detail.php:367
|
681 |
+
msgid "- not set -"
|
682 |
+
msgstr ""
|
683 |
+
|
684 |
+
#: views/packages/details/detail.php:375
|
685 |
+
msgid "View Package Object"
|
686 |
+
msgstr ""
|
687 |
+
|
688 |
+
#: views/packages/details/detail.php:392
|
689 |
+
msgid "Package File Links"
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: views/packages/details/detail.php:396
|
693 |
+
msgid "PACKAGE"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: views/packages/details/detail.php:397
|
697 |
+
msgid "INSTALLER"
|
698 |
+
msgstr ""
|
699 |
+
|
700 |
+
#: views/packages/details/detail.php:398
|
701 |
+
msgid "LOG"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: views/packages/details/transfer.php:15
|
705 |
+
msgid "Transfer your packages to multiple locations with Duplicator Pro"
|
706 |
+
msgstr ""
|
707 |
+
|
708 |
+
#: views/packages/details/transfer.php:20 views/settings/storage.php:19
|
709 |
+
msgid "Amazon S3"
|
710 |
+
msgstr ""
|
711 |
+
|
712 |
+
#: views/packages/details/transfer.php:21
|
713 |
+
msgid "Dropbox"
|
714 |
+
msgstr ""
|
715 |
+
|
716 |
+
#: views/packages/details/transfer.php:22 views/settings/storage.php:21
|
717 |
+
msgid "Google Drive"
|
718 |
+
msgstr ""
|
719 |
+
|
720 |
+
#: views/packages/details/transfer.php:23 views/settings/storage.php:22
|
721 |
+
msgid "One Drive"
|
722 |
+
msgstr ""
|
723 |
+
|
724 |
+
#: views/packages/details/transfer.php:24 views/settings/storage.php:23
|
725 |
+
msgid "FTP & SFTP"
|
726 |
+
msgstr ""
|
727 |
+
|
728 |
+
#: views/packages/details/transfer.php:25 views/settings/storage.php:24
|
729 |
+
msgid "Custom Directory"
|
730 |
+
msgstr ""
|
731 |
+
|
732 |
+
#: views/packages/details/transfer.php:29
|
733 |
+
msgid ""
|
734 |
+
"Set up a one-time storage location and automatically push the package to "
|
735 |
+
"your destination."
|
736 |
+
msgstr ""
|
737 |
+
|
738 |
+
#: views/packages/details/transfer.php:35 views/settings/schedule.php:22
|
739 |
+
#: views/settings/storage.php:34 views/tools/templates.php:23
|
740 |
+
msgid "Learn More"
|
741 |
+
msgstr ""
|
742 |
+
|
743 |
+
#: views/packages/main/controller.php:9
|
744 |
+
msgid "An invalid request was made to this page."
|
745 |
+
msgstr ""
|
746 |
+
|
747 |
+
#: views/packages/main/controller.php:10
|
748 |
+
msgid "Please retry by going to the"
|
749 |
+
msgstr ""
|
750 |
+
|
751 |
+
#: views/packages/main/controller.php:11
|
752 |
+
msgid "Packages Screen"
|
753 |
+
msgstr ""
|
754 |
+
|
755 |
+
#: views/packages/main/controller.php:59
|
756 |
+
msgid "Packages » All"
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: views/packages/main/controller.php:63 views/packages/main/controller.php:67
|
760 |
+
#: views/packages/main/controller.php:71
|
761 |
+
msgid "Packages » New"
|
762 |
+
msgstr ""
|
763 |
+
|
764 |
+
#: views/packages/main/packages.php:77
|
765 |
+
msgid "Bulk Actions"
|
766 |
+
msgstr ""
|
767 |
+
|
768 |
+
#: views/packages/main/packages.php:78
|
769 |
+
msgid "Delete selected package(s)"
|
770 |
+
msgstr ""
|
771 |
+
|
772 |
+
#: views/packages/main/packages.php:78
|
773 |
+
msgid "Delete"
|
774 |
+
msgstr ""
|
775 |
+
|
776 |
+
#: views/packages/main/packages.php:80
|
777 |
+
msgid "Apply"
|
778 |
+
msgstr ""
|
779 |
+
|
780 |
+
#: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
|
781 |
+
#: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
|
782 |
+
msgid "Create New"
|
783 |
+
msgstr ""
|
784 |
+
|
785 |
+
#: views/packages/main/packages.php:114 views/packages/main/packages.php:148
|
786 |
+
msgid "No Packages Found."
|
787 |
+
msgstr ""
|
788 |
+
|
789 |
+
#: views/packages/main/packages.php:115 views/packages/main/packages.php:149
|
790 |
+
msgid "Click the 'Create New' button to build a package."
|
791 |
+
msgstr ""
|
792 |
+
|
793 |
+
#: views/packages/main/packages.php:117 views/packages/main/packages.php:151
|
794 |
+
msgid "New to Duplicator?"
|
795 |
+
msgstr ""
|
796 |
+
|
797 |
+
#: views/packages/main/packages.php:119 views/packages/main/packages.php:153
|
798 |
+
msgid "Check out the 'Quick Start' guide!"
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: views/packages/main/packages.php:135
|
802 |
+
msgid "Select all packages"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: views/packages/main/packages.php:136
|
806 |
+
msgid "Created"
|
807 |
+
msgstr ""
|
808 |
+
|
809 |
+
#: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
|
810 |
+
#: views/packages/main/s2.scan3.php:392
|
811 |
+
msgid "Size"
|
812 |
+
msgstr ""
|
813 |
+
|
814 |
+
#: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
|
815 |
+
msgid "Package"
|
816 |
+
msgstr ""
|
817 |
+
|
818 |
+
#: views/packages/main/packages.php:189
|
819 |
+
msgid "Archive created as zip file"
|
820 |
+
msgstr ""
|
821 |
+
|
822 |
+
#: views/packages/main/packages.php:190
|
823 |
+
msgid "Archive created as daf file"
|
824 |
+
msgstr ""
|
825 |
+
|
826 |
+
#: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
|
827 |
+
#: views/packages/main/s2.scan3.php:35
|
828 |
+
msgid "Database Only"
|
829 |
+
msgstr ""
|
830 |
+
|
831 |
+
#: views/packages/main/packages.php:199
|
832 |
+
msgid "Package Build Running"
|
833 |
+
msgstr ""
|
834 |
+
|
835 |
+
#: views/packages/main/packages.php:200
|
836 |
+
msgid ""
|
837 |
+
"To stop or reset this package build goto Settings > Advanced > Reset Packages"
|
838 |
+
msgstr ""
|
839 |
+
|
840 |
+
#: views/packages/main/packages.php:210 views/packages/main/packages.php:228
|
841 |
+
msgid "Package Details"
|
842 |
+
msgstr ""
|
843 |
+
|
844 |
+
#: views/packages/main/packages.php:226
|
845 |
+
msgid "Error Processing"
|
846 |
+
msgstr ""
|
847 |
+
|
848 |
+
#: views/packages/main/packages.php:246
|
849 |
+
msgid "Current Server Time"
|
850 |
+
msgstr ""
|
851 |
+
|
852 |
+
#: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
|
853 |
+
msgid "Time"
|
854 |
+
msgstr ""
|
855 |
+
|
856 |
+
#: views/packages/main/packages.php:258
|
857 |
+
msgid "Items"
|
858 |
+
msgstr ""
|
859 |
+
|
860 |
+
#: views/packages/main/packages.php:268
|
861 |
+
msgid "Bulk Action Required"
|
862 |
+
msgstr ""
|
863 |
+
|
864 |
+
#: views/packages/main/packages.php:270
|
865 |
+
msgid ""
|
866 |
+
"No selections made! Please select an action from the \"Bulk Actions\" drop "
|
867 |
+
"down menu."
|
868 |
+
msgstr ""
|
869 |
+
|
870 |
+
#: views/packages/main/packages.php:274
|
871 |
+
msgid "Selection Required"
|
872 |
+
msgstr ""
|
873 |
+
|
874 |
+
#: views/packages/main/packages.php:276
|
875 |
+
msgid "No selections made! Please select at least one package to delete."
|
876 |
+
msgstr ""
|
877 |
+
|
878 |
+
#: views/packages/main/packages.php:280
|
879 |
+
msgid "Delete Packages?"
|
880 |
+
msgstr ""
|
881 |
+
|
882 |
+
#: views/packages/main/packages.php:281
|
883 |
+
msgid "Are you sure you want to delete the selected package(s)?"
|
884 |
+
msgstr ""
|
885 |
+
|
886 |
+
#: views/packages/main/packages.php:282
|
887 |
+
msgid "Removing Packages, Please Wait..."
|
888 |
+
msgstr ""
|
889 |
+
|
890 |
+
#: views/packages/main/packages.php:289
|
891 |
+
msgid "Duplicator Help"
|
892 |
+
msgstr ""
|
893 |
+
|
894 |
+
#: views/packages/main/packages.php:294
|
895 |
+
msgid "Alert!"
|
896 |
+
msgstr ""
|
897 |
+
|
898 |
+
#: views/packages/main/packages.php:295
|
899 |
+
msgid "A package is being processed. Retry later."
|
900 |
+
msgstr ""
|
901 |
+
|
902 |
+
#: views/packages/main/packages.php:302
|
903 |
+
msgid "Common Questions:"
|
904 |
+
msgstr ""
|
905 |
+
|
906 |
+
#: views/packages/main/packages.php:303
|
907 |
+
msgid "How do I create a package"
|
908 |
+
msgstr ""
|
909 |
+
|
910 |
+
#: views/packages/main/packages.php:304
|
911 |
+
msgid "How do I install a package?"
|
912 |
+
msgstr ""
|
913 |
+
|
914 |
+
#: views/packages/main/packages.php:305
|
915 |
+
msgid "Frequently Asked Questions!"
|
916 |
+
msgstr ""
|
917 |
+
|
918 |
+
#: views/packages/main/packages.php:308
|
919 |
+
msgid "Other Resources:"
|
920 |
+
msgstr ""
|
921 |
+
|
922 |
+
#: views/packages/main/packages.php:309
|
923 |
+
msgid "Need help with the plugin?"
|
924 |
+
msgstr ""
|
925 |
+
|
926 |
+
#: views/packages/main/packages.php:310
|
927 |
+
msgid "Have an idea for the plugin?"
|
928 |
+
msgstr ""
|
929 |
+
|
930 |
+
#: views/packages/main/packages.php:312
|
931 |
+
msgid "Help review the plugin!"
|
932 |
+
msgstr ""
|
933 |
+
|
934 |
+
#: views/packages/main/s1.setup1.php:12
|
935 |
+
msgid "Package settings have been reset."
|
936 |
+
msgstr ""
|
937 |
+
|
938 |
+
#: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
|
939 |
+
#: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
|
940 |
+
#: views/packages/main/s3.build.php:79
|
941 |
+
msgid "Setup"
|
942 |
+
msgstr ""
|
943 |
+
|
944 |
+
#: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
|
945 |
+
#: views/packages/main/s3.build.php:80
|
946 |
+
msgid "Scan"
|
947 |
+
msgstr ""
|
948 |
+
|
949 |
+
#: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
|
950 |
+
#: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
|
951 |
+
msgid "Build"
|
952 |
+
msgstr ""
|
953 |
+
|
954 |
+
#: views/packages/main/s1.setup1.php:67
|
955 |
+
msgid "Step 1: Package Setup"
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: views/packages/main/s1.setup1.php:90
|
959 |
+
msgid "Requirements:"
|
960 |
+
msgstr ""
|
961 |
+
|
962 |
+
#: views/packages/main/s1.setup1.php:99
|
963 |
+
msgid ""
|
964 |
+
"System requirements must pass for the Duplicator to work properly. Click "
|
965 |
+
"each link for details."
|
966 |
+
msgstr ""
|
967 |
+
|
968 |
+
#: views/packages/main/s1.setup1.php:105
|
969 |
+
msgid "PHP Support"
|
970 |
+
msgstr ""
|
971 |
+
|
972 |
+
#: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
|
973 |
+
msgid "PHP Version"
|
974 |
+
msgstr ""
|
975 |
+
|
976 |
+
#: views/packages/main/s1.setup1.php:113
|
977 |
+
msgid "PHP versions 5.2.9+ or higher is required."
|
978 |
+
msgstr ""
|
979 |
+
|
980 |
+
#: views/packages/main/s1.setup1.php:117
|
981 |
+
msgid "Zip Archive Enabled"
|
982 |
+
msgstr ""
|
983 |
+
|
984 |
+
#: views/packages/main/s1.setup1.php:121
|
985 |
+
msgid "ZipArchive extension is required or"
|
986 |
+
msgstr ""
|
987 |
+
|
988 |
+
#: views/packages/main/s1.setup1.php:122
|
989 |
+
msgid "Switch to DupArchive"
|
990 |
+
msgstr ""
|
991 |
+
|
992 |
+
#: views/packages/main/s1.setup1.php:123
|
993 |
+
msgid "to by-pass this requirement."
|
994 |
+
msgstr ""
|
995 |
+
|
996 |
+
#: views/packages/main/s1.setup1.php:129
|
997 |
+
msgid "Safe Mode Off"
|
998 |
+
msgstr ""
|
999 |
+
|
1000 |
+
#: views/packages/main/s1.setup1.php:131
|
1001 |
+
msgid ""
|
1002 |
+
"Safe Mode should be set to Off in you php.ini file and is deprecated as of "
|
1003 |
+
"PHP 5.3.0."
|
1004 |
+
msgstr ""
|
1005 |
+
|
1006 |
+
#: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
|
1007 |
+
#: views/packages/main/s1.setup1.php:144
|
1008 |
+
msgid "Function"
|
1009 |
+
msgstr ""
|
1010 |
+
|
1011 |
+
#: views/packages/main/s1.setup1.php:150
|
1012 |
+
msgid ""
|
1013 |
+
"For any issues in this section please contact your hosting provider or "
|
1014 |
+
"server administrator. For additional information see our online "
|
1015 |
+
"documentation."
|
1016 |
+
msgstr ""
|
1017 |
+
|
1018 |
+
#: views/packages/main/s1.setup1.php:158
|
1019 |
+
msgid "Required Paths"
|
1020 |
+
msgstr ""
|
1021 |
+
|
1022 |
+
#: views/packages/main/s1.setup1.php:178
|
1023 |
+
msgid ""
|
1024 |
+
"If the root WordPress path is not writable by PHP on some systems this can "
|
1025 |
+
"cause issues."
|
1026 |
+
msgstr ""
|
1027 |
+
|
1028 |
+
#: views/packages/main/s1.setup1.php:181
|
1029 |
+
msgid ""
|
1030 |
+
"If Duplicator does not have enough permissions then you will need to "
|
1031 |
+
"manually create the paths above. "
|
1032 |
+
msgstr ""
|
1033 |
+
|
1034 |
+
#: views/packages/main/s1.setup1.php:190
|
1035 |
+
msgid "Server Support"
|
1036 |
+
msgstr ""
|
1037 |
+
|
1038 |
+
#: views/packages/main/s1.setup1.php:196
|
1039 |
+
msgid "MySQL Version"
|
1040 |
+
msgstr ""
|
1041 |
+
|
1042 |
+
#: views/packages/main/s1.setup1.php:200
|
1043 |
+
msgid "MySQLi Support"
|
1044 |
+
msgstr ""
|
1045 |
+
|
1046 |
+
#: views/packages/main/s1.setup1.php:206
|
1047 |
+
msgid ""
|
1048 |
+
"MySQL version 5.0+ or better is required and the PHP MySQLi extension (note "
|
1049 |
+
"the trailing 'i') is also required. Contact your server administrator and "
|
1050 |
+
"request that mysqli extension and MySQL Server 5.0+ be installed."
|
1051 |
+
msgstr ""
|
1052 |
+
|
1053 |
+
#: views/packages/main/s1.setup1.php:207
|
1054 |
+
#: views/tools/diagnostics/inc.data.php:26
|
1055 |
+
msgid "more info"
|
1056 |
+
msgstr ""
|
1057 |
+
|
1058 |
+
#: views/packages/main/s1.setup1.php:216
|
1059 |
+
msgid "Reserved Files"
|
1060 |
+
msgstr ""
|
1061 |
+
|
1062 |
+
#: views/packages/main/s1.setup1.php:221
|
1063 |
+
msgid ""
|
1064 |
+
"None of the reserved files where found from a previous install. This means "
|
1065 |
+
"you are clear to create a new package."
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: views/packages/main/s1.setup1.php:229
|
1069 |
+
msgid "WordPress Root Path:"
|
1070 |
+
msgstr ""
|
1071 |
+
|
1072 |
+
#: views/packages/main/s1.setup1.php:231
|
1073 |
+
msgid "Remove Files Now"
|
1074 |
+
msgstr ""
|
1075 |
+
|
1076 |
+
#: views/packages/main/s1.setup2.php:76
|
1077 |
+
msgid "Add Notes"
|
1078 |
+
msgstr ""
|
1079 |
+
|
1080 |
+
#: views/packages/main/s1.setup2.php:79
|
1081 |
+
msgid "Toggle a default name"
|
1082 |
+
msgstr ""
|
1083 |
+
|
1084 |
+
#: views/packages/main/s1.setup2.php:146
|
1085 |
+
msgid "File filter enabled"
|
1086 |
+
msgstr ""
|
1087 |
+
|
1088 |
+
#: views/packages/main/s1.setup2.php:147
|
1089 |
+
msgid "Database filter enabled"
|
1090 |
+
msgstr ""
|
1091 |
+
|
1092 |
+
#: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
|
1093 |
+
msgid "Archive Only the Database"
|
1094 |
+
msgstr ""
|
1095 |
+
|
1096 |
+
#: views/packages/main/s1.setup2.php:177
|
1097 |
+
msgid "Enable File Filters"
|
1098 |
+
msgstr ""
|
1099 |
+
|
1100 |
+
#: views/packages/main/s1.setup2.php:179
|
1101 |
+
msgid "File Filters:"
|
1102 |
+
msgstr ""
|
1103 |
+
|
1104 |
+
#: views/packages/main/s1.setup2.php:180
|
1105 |
+
msgid ""
|
1106 |
+
"File filters allow you to ignore directories and file extensions. When "
|
1107 |
+
"creating a package only include the data you want and need. This helps to "
|
1108 |
+
"improve the overall archive build time and keep your backups simple and "
|
1109 |
+
"clean."
|
1110 |
+
msgstr ""
|
1111 |
+
|
1112 |
+
#: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
|
1113 |
+
#: views/packages/main/s1.setup2.php:207
|
1114 |
+
msgid "Separate all filters by semicolon"
|
1115 |
+
msgstr ""
|
1116 |
+
|
1117 |
+
#: views/packages/main/s1.setup2.php:187
|
1118 |
+
msgid "Directories:"
|
1119 |
+
msgstr ""
|
1120 |
+
|
1121 |
+
#: views/packages/main/s1.setup2.php:188
|
1122 |
+
msgid "Number of directories filtered"
|
1123 |
+
msgstr ""
|
1124 |
+
|
1125 |
+
#: views/packages/main/s1.setup2.php:192
|
1126 |
+
msgid "root path"
|
1127 |
+
msgstr ""
|
1128 |
+
|
1129 |
+
#: views/packages/main/s1.setup2.php:193
|
1130 |
+
msgid "wp-uploads"
|
1131 |
+
msgstr ""
|
1132 |
+
|
1133 |
+
#: views/packages/main/s1.setup2.php:194
|
1134 |
+
msgid "cache"
|
1135 |
+
msgstr ""
|
1136 |
+
|
1137 |
+
#: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
|
1138 |
+
#: views/packages/main/s1.setup2.php:215
|
1139 |
+
msgid "(clear)"
|
1140 |
+
msgstr ""
|
1141 |
+
|
1142 |
+
#: views/packages/main/s1.setup2.php:199
|
1143 |
+
msgid "File extensions"
|
1144 |
+
msgstr ""
|
1145 |
+
|
1146 |
+
#: views/packages/main/s1.setup2.php:201
|
1147 |
+
msgid "media"
|
1148 |
+
msgstr ""
|
1149 |
+
|
1150 |
+
#: views/packages/main/s1.setup2.php:202
|
1151 |
+
msgid "archive"
|
1152 |
+
msgstr ""
|
1153 |
+
|
1154 |
+
#: views/packages/main/s1.setup2.php:209
|
1155 |
+
msgid "Files:"
|
1156 |
+
msgstr ""
|
1157 |
+
|
1158 |
+
#: views/packages/main/s1.setup2.php:210
|
1159 |
+
msgid "Number of files filtered"
|
1160 |
+
msgstr ""
|
1161 |
+
|
1162 |
+
#: views/packages/main/s1.setup2.php:214
|
1163 |
+
msgid "(file path)"
|
1164 |
+
msgstr ""
|
1165 |
+
|
1166 |
+
#: views/packages/main/s1.setup2.php:220
|
1167 |
+
msgid ""
|
1168 |
+
"The directory, file and extensions paths above will be excluded from the "
|
1169 |
+
"archive file if enabled is checked."
|
1170 |
+
msgstr ""
|
1171 |
+
|
1172 |
+
#: views/packages/main/s1.setup2.php:221
|
1173 |
+
msgid ""
|
1174 |
+
"Use the full path for directories and files with semicolons to separate all "
|
1175 |
+
"paths."
|
1176 |
+
msgstr ""
|
1177 |
+
|
1178 |
+
#: views/packages/main/s1.setup2.php:231
|
1179 |
+
msgid ""
|
1180 |
+
"This option has automatically been checked because you have opted for a <i "
|
1181 |
+
"class='fa fa-random'></i> Two-Part Install Process. Please complete the "
|
1182 |
+
"package build and continue with the "
|
1183 |
+
msgstr ""
|
1184 |
+
|
1185 |
+
#: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
|
1186 |
+
msgid "Quick Start Two-Part Install Instructions"
|
1187 |
+
msgstr ""
|
1188 |
+
|
1189 |
+
#: views/packages/main/s1.setup2.php:238
|
1190 |
+
msgid ""
|
1191 |
+
"<b>Overview:</b><br/> This advanced option excludes all files from the "
|
1192 |
+
"archive. Only the database and a copy of the installer.php will be included "
|
1193 |
+
"in the archive.zip file. The option can be used for backing up and moving "
|
1194 |
+
"only the database."
|
1195 |
+
msgstr ""
|
1196 |
+
|
1197 |
+
#: views/packages/main/s1.setup2.php:243
|
1198 |
+
msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
|
1199 |
+
msgstr ""
|
1200 |
+
|
1201 |
+
#: views/packages/main/s1.setup2.php:245
|
1202 |
+
msgid ""
|
1203 |
+
"Please use caution when installing only the database over an existing site "
|
1204 |
+
"and be sure the correct files correspond with the database. For example, if "
|
1205 |
+
"WordPress 4.6 is on this site and you copy the database to a host that has "
|
1206 |
+
"WordPress 4.8 files then the source code of the files will not be in sync "
|
1207 |
+
"with the database causing possible errors. If you’re immediately moving the "
|
1208 |
+
"source files with the database then you can ignore this notice. Please use "
|
1209 |
+
"this advanced feature with caution!"
|
1210 |
+
msgstr ""
|
1211 |
+
|
1212 |
+
#: views/packages/main/s1.setup2.php:267
|
1213 |
+
msgid "Enable Table Filters"
|
1214 |
+
msgstr ""
|
1215 |
+
|
1216 |
+
#: views/packages/main/s1.setup2.php:269
|
1217 |
+
msgid "Enable Table Filters:"
|
1218 |
+
msgstr ""
|
1219 |
+
|
1220 |
+
#: views/packages/main/s1.setup2.php:270
|
1221 |
+
msgid ""
|
1222 |
+
"Checked tables will not be added to the database script. Excluding certain "
|
1223 |
+
"tables can possibly cause your site or plugins to not work correctly after "
|
1224 |
+
"install!"
|
1225 |
+
msgstr ""
|
1226 |
+
|
1227 |
+
#: views/packages/main/s1.setup2.php:276
|
1228 |
+
msgid "Include All"
|
1229 |
+
msgstr ""
|
1230 |
+
|
1231 |
+
#: views/packages/main/s1.setup2.php:277
|
1232 |
+
msgid "Exclude All"
|
1233 |
+
msgstr ""
|
1234 |
+
|
1235 |
+
#: views/packages/main/s1.setup2.php:321
|
1236 |
+
msgid "Checked tables will be <u>excluded</u> from the database script. "
|
1237 |
+
msgstr ""
|
1238 |
+
|
1239 |
+
#: views/packages/main/s1.setup2.php:322
|
1240 |
+
msgid ""
|
1241 |
+
"Excluding certain tables can cause your site or plugins to not work "
|
1242 |
+
"correctly after install!<br/>"
|
1243 |
+
msgstr ""
|
1244 |
+
|
1245 |
+
#: views/packages/main/s1.setup2.php:323
|
1246 |
+
msgid ""
|
1247 |
+
"<i class='core-table-info'> Use caution when excluding tables! It is highly "
|
1248 |
+
"recommended to not exclude WordPress core tables*, unless you know the "
|
1249 |
+
"impact.</i>"
|
1250 |
+
msgstr ""
|
1251 |
+
|
1252 |
+
#: views/packages/main/s1.setup2.php:328
|
1253 |
+
msgid "Compatibility Mode"
|
1254 |
+
msgstr ""
|
1255 |
+
|
1256 |
+
#: views/packages/main/s1.setup2.php:330
|
1257 |
+
msgid "Compatibility Mode:"
|
1258 |
+
msgstr ""
|
1259 |
+
|
1260 |
+
#: views/packages/main/s1.setup2.php:331
|
1261 |
+
msgid ""
|
1262 |
+
"This is an advanced database backwards compatibility feature that should "
|
1263 |
+
"ONLY be used if having problems installing packages. If the database server "
|
1264 |
+
"version is lower than the version where the package was built then these "
|
1265 |
+
"options may help generate a script that is more compliant with the older "
|
1266 |
+
"database server. It is recommended to try each option separately starting "
|
1267 |
+
"with mysql40."
|
1268 |
+
msgstr ""
|
1269 |
+
|
1270 |
+
#: views/packages/main/s1.setup2.php:352
|
1271 |
+
msgid "mysql40"
|
1272 |
+
msgstr ""
|
1273 |
+
|
1274 |
+
#: views/packages/main/s1.setup2.php:356
|
1275 |
+
msgid "no_table_options"
|
1276 |
+
msgstr ""
|
1277 |
+
|
1278 |
+
#: views/packages/main/s1.setup2.php:360
|
1279 |
+
msgid "no_key_options"
|
1280 |
+
msgstr ""
|
1281 |
+
|
1282 |
+
#: views/packages/main/s1.setup2.php:364
|
1283 |
+
msgid "no_field_options"
|
1284 |
+
msgstr ""
|
1285 |
+
|
1286 |
+
#: views/packages/main/s1.setup2.php:369
|
1287 |
+
msgid "This option is only available with mysqldump mode."
|
1288 |
+
msgstr ""
|
1289 |
+
|
1290 |
+
#: views/packages/main/s1.setup2.php:382
|
1291 |
+
msgid "Installer password protection is on"
|
1292 |
+
msgstr ""
|
1293 |
+
|
1294 |
+
#: views/packages/main/s1.setup2.php:383
|
1295 |
+
msgid "Installer password protection is off"
|
1296 |
+
msgstr ""
|
1297 |
+
|
1298 |
+
#: views/packages/main/s1.setup2.php:390
|
1299 |
+
msgid "All values in this section are"
|
1300 |
+
msgstr ""
|
1301 |
+
|
1302 |
+
#: views/packages/main/s1.setup2.php:390
|
1303 |
+
msgid "optional"
|
1304 |
+
msgstr ""
|
1305 |
+
|
1306 |
+
#: views/packages/main/s1.setup2.php:392
|
1307 |
+
msgid "Setup/Prefills"
|
1308 |
+
msgstr ""
|
1309 |
+
|
1310 |
+
#: views/packages/main/s1.setup2.php:393
|
1311 |
+
msgid ""
|
1312 |
+
"All values in this section are OPTIONAL! If you know ahead of time the "
|
1313 |
+
"database input fields the installer will use, then you can optionally enter "
|
1314 |
+
"them here and they will be prefilled at install time. Otherwise you can "
|
1315 |
+
"just enter them in at install time and ignore all these options in the "
|
1316 |
+
"Installer section."
|
1317 |
+
msgstr ""
|
1318 |
+
|
1319 |
+
#: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
|
1320 |
+
msgid "Branding"
|
1321 |
+
msgstr ""
|
1322 |
+
|
1323 |
+
#: views/packages/main/s1.setup2.php:407
|
1324 |
+
msgid "Available with Duplicator Pro - Freelancer!"
|
1325 |
+
msgstr ""
|
1326 |
+
|
1327 |
+
#: views/packages/main/s1.setup2.php:410
|
1328 |
+
msgid ""
|
1329 |
+
"Branding is a way to customize the installer look and feel. With branding "
|
1330 |
+
"you can create multiple brands of installers."
|
1331 |
+
msgstr ""
|
1332 |
+
|
1333 |
+
#: views/packages/main/s1.setup2.php:415
|
1334 |
+
msgid "Security"
|
1335 |
+
msgstr ""
|
1336 |
+
|
1337 |
+
#: views/packages/main/s1.setup2.php:422
|
1338 |
+
msgid "Enable Password Protection"
|
1339 |
+
msgstr ""
|
1340 |
+
|
1341 |
+
#: views/packages/main/s1.setup2.php:424
|
1342 |
+
msgid "Security:"
|
1343 |
+
msgstr ""
|
1344 |
+
|
1345 |
+
#: views/packages/main/s1.setup2.php:425
|
1346 |
+
msgid ""
|
1347 |
+
"Enabling this option will allow for basic password protection on the "
|
1348 |
+
"installer. Before running the installer the password below must be entered "
|
1349 |
+
"before proceeding with an install. This password is a general deterrent and "
|
1350 |
+
"should not be substituted for properly keeping your files secure. Be sure "
|
1351 |
+
"to remove all installer files when the install process is completed."
|
1352 |
+
msgstr ""
|
1353 |
+
|
1354 |
+
#: views/packages/main/s1.setup2.php:440
|
1355 |
+
msgid "Prefills"
|
1356 |
+
msgstr ""
|
1357 |
+
|
1358 |
+
#: views/packages/main/s1.setup2.php:448
|
1359 |
+
msgid "Basic"
|
1360 |
+
msgstr ""
|
1361 |
+
|
1362 |
+
#: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
|
1363 |
+
msgid "cPanel"
|
1364 |
+
msgstr ""
|
1365 |
+
|
1366 |
+
#: views/packages/main/s1.setup2.php:461
|
1367 |
+
msgid "example: localhost (value is optional)"
|
1368 |
+
msgstr ""
|
1369 |
+
|
1370 |
+
#: views/packages/main/s1.setup2.php:464
|
1371 |
+
msgid "Host Port"
|
1372 |
+
msgstr ""
|
1373 |
+
|
1374 |
+
#: views/packages/main/s1.setup2.php:465
|
1375 |
+
msgid "example: 3306 (value is optional)"
|
1376 |
+
msgstr ""
|
1377 |
+
|
1378 |
+
#: views/packages/main/s1.setup2.php:469
|
1379 |
+
msgid "example: DatabaseName (value is optional)"
|
1380 |
+
msgstr ""
|
1381 |
+
|
1382 |
+
#: views/packages/main/s1.setup2.php:473
|
1383 |
+
msgid "example: DatabaseUserName (value is optional)"
|
1384 |
+
msgstr ""
|
1385 |
+
|
1386 |
+
#: views/packages/main/s1.setup2.php:483
|
1387 |
+
msgid ""
|
1388 |
+
"Create the database and database user at install time without leaving the "
|
1389 |
+
"installer!"
|
1390 |
+
msgstr ""
|
1391 |
+
|
1392 |
+
#: views/packages/main/s1.setup2.php:484
|
1393 |
+
msgid "This feature is only availble in "
|
1394 |
+
msgstr ""
|
1395 |
+
|
1396 |
+
#: views/packages/main/s1.setup2.php:485
|
1397 |
+
msgid "Duplicator Pro!"
|
1398 |
+
msgstr ""
|
1399 |
+
|
1400 |
+
#: views/packages/main/s1.setup2.php:486
|
1401 |
+
msgid "This feature works only with hosts that support cPanel."
|
1402 |
+
msgstr ""
|
1403 |
+
|
1404 |
+
#: views/packages/main/s1.setup2.php:498
|
1405 |
+
msgid "Reset"
|
1406 |
+
msgstr ""
|
1407 |
+
|
1408 |
+
#: views/packages/main/s1.setup2.php:499
|
1409 |
+
msgid "Next"
|
1410 |
+
msgstr ""
|
1411 |
+
|
1412 |
+
#: views/packages/main/s1.setup2.php:508
|
1413 |
+
msgid "Reset Package Settings?"
|
1414 |
+
msgstr ""
|
1415 |
+
|
1416 |
+
#: views/packages/main/s1.setup2.php:509
|
1417 |
+
msgid ""
|
1418 |
+
"This will clear and reset all of the current package settings. Would you "
|
1419 |
+
"like to continue?"
|
1420 |
+
msgstr ""
|
1421 |
+
|
1422 |
+
#: views/packages/main/s2.scan1.php:148
|
1423 |
+
msgid "Input fields not valid"
|
1424 |
+
msgstr ""
|
1425 |
+
|
1426 |
+
#: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
|
1427 |
+
msgid "Please try again!"
|
1428 |
+
msgstr ""
|
1429 |
+
|
1430 |
+
#: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
|
1431 |
+
#: views/packages/main/s3.build.php:353
|
1432 |
+
msgid "Error Message:"
|
1433 |
+
msgstr ""
|
1434 |
+
|
1435 |
+
#: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
|
1436 |
+
msgid "Back"
|
1437 |
+
msgstr ""
|
1438 |
+
|
1439 |
+
#: views/packages/main/s2.scan1.php:180
|
1440 |
+
msgid "Step 2: System Scan"
|
1441 |
+
msgstr ""
|
1442 |
+
|
1443 |
+
#: views/packages/main/s2.scan1.php:197
|
1444 |
+
msgid "Scanning Site"
|
1445 |
+
msgstr ""
|
1446 |
+
|
1447 |
+
#: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
|
1448 |
+
msgid "Please Wait..."
|
1449 |
+
msgstr ""
|
1450 |
+
|
1451 |
+
#: views/packages/main/s2.scan1.php:200
|
1452 |
+
msgid "Keep this window open during the scan process."
|
1453 |
+
msgstr ""
|
1454 |
+
|
1455 |
+
#: views/packages/main/s2.scan1.php:201
|
1456 |
+
msgid "This can take several minutes."
|
1457 |
+
msgstr ""
|
1458 |
+
|
1459 |
+
#: views/packages/main/s2.scan1.php:206
|
1460 |
+
msgid "Scan Error"
|
1461 |
+
msgstr ""
|
1462 |
+
|
1463 |
+
#: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
|
1464 |
+
msgid "Server Status:"
|
1465 |
+
msgstr ""
|
1466 |
+
|
1467 |
+
#: views/packages/main/s2.scan1.php:221
|
1468 |
+
msgid "Scan Complete"
|
1469 |
+
msgstr ""
|
1470 |
+
|
1471 |
+
#: views/packages/main/s2.scan1.php:223
|
1472 |
+
msgid "Process Time:"
|
1473 |
+
msgstr ""
|
1474 |
+
|
1475 |
+
#: views/packages/main/s2.scan1.php:239
|
1476 |
+
msgid "A notice status has been detected, are you sure you want to continue?"
|
1477 |
+
msgstr ""
|
1478 |
+
|
1479 |
+
#: views/packages/main/s2.scan1.php:243
|
1480 |
+
msgid "Yes. Continue with the build process!"
|
1481 |
+
msgstr ""
|
1482 |
+
|
1483 |
+
#: views/packages/main/s2.scan1.php:249
|
1484 |
+
msgid ""
|
1485 |
+
"Scan checks are not required to pass, however they could cause issues on "
|
1486 |
+
"some systems."
|
1487 |
+
msgstr ""
|
1488 |
+
|
1489 |
+
#: views/packages/main/s2.scan1.php:251
|
1490 |
+
msgid ""
|
1491 |
+
"Please review the details for each section by clicking on the detail title."
|
1492 |
+
msgstr ""
|
1493 |
+
|
1494 |
+
#: views/packages/main/s2.scan1.php:258
|
1495 |
+
msgid "Do you want to continue?"
|
1496 |
+
msgstr ""
|
1497 |
+
|
1498 |
+
#: views/packages/main/s2.scan1.php:260
|
1499 |
+
msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
|
1500 |
+
msgstr ""
|
1501 |
+
|
1502 |
+
#: views/packages/main/s2.scan1.php:261
|
1503 |
+
msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
|
1504 |
+
msgstr ""
|
1505 |
+
|
1506 |
+
#: views/packages/main/s2.scan1.php:263
|
1507 |
+
msgid "Yes. Continue without applying any file filters."
|
1508 |
+
msgstr ""
|
1509 |
+
|
1510 |
+
#: views/packages/main/s2.scan1.php:268
|
1511 |
+
msgid "Rescan"
|
1512 |
+
msgstr ""
|
1513 |
+
|
1514 |
+
#: views/packages/main/s2.scan1.php:414
|
1515 |
+
msgid "Unable to perform a full scan, please try the following actions:"
|
1516 |
+
msgstr ""
|
1517 |
+
|
1518 |
+
#: views/packages/main/s2.scan1.php:415
|
1519 |
+
msgid ""
|
1520 |
+
"1. Go back and create a root path directory filter to validate the site is "
|
1521 |
+
"scan-able."
|
1522 |
+
msgstr ""
|
1523 |
+
|
1524 |
+
#: views/packages/main/s2.scan1.php:416
|
1525 |
+
msgid ""
|
1526 |
+
"2. Continue to add/remove filters to isolate which path is causing issues."
|
1527 |
+
msgstr ""
|
1528 |
+
|
1529 |
+
#: views/packages/main/s2.scan1.php:417
|
1530 |
+
msgid "3. This message will go away once the correct filters are applied."
|
1531 |
+
msgstr ""
|
1532 |
+
|
1533 |
+
#: views/packages/main/s2.scan1.php:419
|
1534 |
+
msgid "Common Issues:"
|
1535 |
+
msgstr ""
|
1536 |
+
|
1537 |
+
#: views/packages/main/s2.scan1.php:420
|
1538 |
+
msgid ""
|
1539 |
+
"- On some budget hosts scanning over 30k files can lead to timeout/gateway "
|
1540 |
+
"issues. Consider scanning only your main WordPress site and avoid trying to "
|
1541 |
+
"backup other external directories."
|
1542 |
+
msgstr ""
|
1543 |
+
|
1544 |
+
#: views/packages/main/s2.scan1.php:421
|
1545 |
+
msgid ""
|
1546 |
+
"- Symbolic link recursion can cause timeouts. Ask your server admin if any "
|
1547 |
+
"are present in the scan path. If they are add the full path as a filter and "
|
1548 |
+
"try running the scan again."
|
1549 |
+
msgstr ""
|
1550 |
+
|
1551 |
+
#: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
|
1552 |
+
#: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
|
1553 |
+
msgid "Notice"
|
1554 |
+
msgstr ""
|
1555 |
+
|
1556 |
+
#: views/packages/main/s2.scan1.php:436
|
1557 |
+
msgid "Good"
|
1558 |
+
msgstr ""
|
1559 |
+
|
1560 |
+
#: views/packages/main/s2.scan1.php:437
|
1561 |
+
msgid "Fail"
|
1562 |
+
msgstr ""
|
1563 |
+
|
1564 |
+
#: views/packages/main/s2.scan2.php:7
|
1565 |
+
msgid "Server"
|
1566 |
+
msgstr ""
|
1567 |
+
|
1568 |
+
#: views/packages/main/s2.scan2.php:8
|
1569 |
+
msgid "Show Diagnostics"
|
1570 |
+
msgstr ""
|
1571 |
+
|
1572 |
+
#: views/packages/main/s2.scan2.php:63
|
1573 |
+
#: views/tools/diagnostics/inc.settings.php:51
|
1574 |
+
msgid "Web Server"
|
1575 |
+
msgstr ""
|
1576 |
+
|
1577 |
+
#: views/packages/main/s2.scan2.php:64
|
1578 |
+
msgid "Supported web servers: "
|
1579 |
+
msgstr ""
|
1580 |
+
|
1581 |
+
#: views/packages/main/s2.scan2.php:69
|
1582 |
+
msgid ""
|
1583 |
+
"The minimum PHP version supported by Duplicator is 5.2.9. It is highly "
|
1584 |
+
"recommended to use PHP 5.3+ for improved stability. For international "
|
1585 |
+
"language support please use PHP 7.0+."
|
1586 |
+
msgstr ""
|
1587 |
+
|
1588 |
+
#: views/packages/main/s2.scan2.php:74
|
1589 |
+
msgid "PHP Open Base Dir"
|
1590 |
+
msgstr ""
|
1591 |
+
|
1592 |
+
#: views/packages/main/s2.scan2.php:75
|
1593 |
+
msgid ""
|
1594 |
+
"Issues might occur when [open_basedir] is enabled. Work with your server "
|
1595 |
+
"admin to disable this value in the php.ini file if you’re having issues "
|
1596 |
+
"building a package."
|
1597 |
+
msgstr ""
|
1598 |
+
|
1599 |
+
#: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
|
1600 |
+
msgid "PHP Max Execution Time"
|
1601 |
+
msgstr ""
|
1602 |
+
|
1603 |
+
#: views/packages/main/s2.scan2.php:81
|
1604 |
+
msgid ""
|
1605 |
+
"Timeouts may occur for larger packages when [max_execution_time] time in the "
|
1606 |
+
"php.ini is too low. A value of 0 (recommended) indicates that PHP has no "
|
1607 |
+
"time limits. An attempt is made to override this value if the server allows "
|
1608 |
+
"it."
|
1609 |
+
msgstr ""
|
1610 |
+
|
1611 |
+
#: views/packages/main/s2.scan2.php:84
|
1612 |
+
msgid ""
|
1613 |
+
"Note: Timeouts can also be set at the web server layer, so if the PHP max "
|
1614 |
+
"timeout passes and you still see a build timeout messages, then your web "
|
1615 |
+
"server could be killing the process. If you are on a budget host and "
|
1616 |
+
"limited on processing time, consider using the database or file filters to "
|
1617 |
+
"shrink the size of your overall package. However use caution as excluding "
|
1618 |
+
"the wrong resources can cause your install to not work properly."
|
1619 |
+
msgstr ""
|
1620 |
+
|
1621 |
+
#: views/packages/main/s2.scan2.php:92
|
1622 |
+
msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
|
1623 |
+
msgstr ""
|
1624 |
+
|
1625 |
+
#: views/packages/main/s2.scan2.php:112
|
1626 |
+
msgid "WordPress Version"
|
1627 |
+
msgstr ""
|
1628 |
+
|
1629 |
+
#: views/packages/main/s2.scan2.php:113
|
1630 |
+
#, php-format
|
1631 |
+
msgid ""
|
1632 |
+
"It is recommended to have a version of WordPress that is greater than %1$s. "
|
1633 |
+
"Older version of WordPress can lead to migration issues and are a security "
|
1634 |
+
"risk. If possible please update your WordPress site to the latest version."
|
1635 |
+
msgstr ""
|
1636 |
+
|
1637 |
+
#: views/packages/main/s2.scan2.php:117
|
1638 |
+
msgid "Core Files"
|
1639 |
+
msgstr ""
|
1640 |
+
|
1641 |
+
#: views/packages/main/s2.scan2.php:123
|
1642 |
+
msgid ""
|
1643 |
+
"The core WordPress paths below will <u>not</u> be included in the archive. "
|
1644 |
+
"These paths are required for WordPress to function!"
|
1645 |
+
msgstr ""
|
1646 |
+
|
1647 |
+
#: views/packages/main/s2.scan2.php:134
|
1648 |
+
msgid ""
|
1649 |
+
"The core WordPress file below will <u>not</u> be included in the archive. "
|
1650 |
+
"This file is required for WordPress to function!"
|
1651 |
+
msgstr ""
|
1652 |
+
|
1653 |
+
#: views/packages/main/s2.scan2.php:147
|
1654 |
+
msgid " to the new location for the site to function properly."
|
1655 |
+
msgstr ""
|
1656 |
+
|
1657 |
+
#: views/packages/main/s2.scan2.php:153
|
1658 |
+
msgid ""
|
1659 |
+
"If the scanner is unable to locate the wp-config.php file in the root "
|
1660 |
+
"directory, then you will need to manually copy it to its new location. This "
|
1661 |
+
"check will also look for core WordPress paths that should be included in the "
|
1662 |
+
"archive for WordPress to work correctly."
|
1663 |
+
msgstr ""
|
1664 |
+
|
1665 |
+
#: views/packages/main/s2.scan2.php:172
|
1666 |
+
msgid "Multisite: Unsupported"
|
1667 |
+
msgstr ""
|
1668 |
+
|
1669 |
+
#: views/packages/main/s2.scan2.php:173
|
1670 |
+
msgid ""
|
1671 |
+
"Duplicator does not support WordPress multisite migrations. We recommend "
|
1672 |
+
"using Duplicator Pro which currently supports full multisite migrations and "
|
1673 |
+
"subsite to standalone site migrations."
|
1674 |
+
msgstr ""
|
1675 |
+
|
1676 |
+
#: views/packages/main/s2.scan2.php:177
|
1677 |
+
msgid ""
|
1678 |
+
"While it is not recommended you can still continue with the build of this "
|
1679 |
+
"package. Please note that at install time additional manual custom "
|
1680 |
+
"configurations will need to be made to finalize this multisite migration."
|
1681 |
+
msgstr ""
|
1682 |
+
|
1683 |
+
#: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
|
1684 |
+
msgid "upgrade to pro"
|
1685 |
+
msgstr ""
|
1686 |
+
|
1687 |
+
#: views/packages/main/s2.scan2.php:181
|
1688 |
+
msgid "Multisite: N/A"
|
1689 |
+
msgstr ""
|
1690 |
+
|
1691 |
+
#: views/packages/main/s2.scan2.php:182
|
1692 |
+
msgid ""
|
1693 |
+
"This is not a multisite install so duplication will proceed without issue. "
|
1694 |
+
"Duplicator does not officially support multisite. However, Duplicator Pro "
|
1695 |
+
"supports duplication of a full multisite network and also has the ability to "
|
1696 |
+
"install a multisite subsite as a standalone site."
|
1697 |
+
msgstr ""
|
1698 |
+
|
1699 |
+
#: views/packages/main/s2.scan3.php:6
|
1700 |
+
#: views/tools/diagnostics/inc.settings.php:55
|
1701 |
+
msgid "Root Path"
|
1702 |
+
msgstr ""
|
1703 |
+
|
1704 |
+
#: views/packages/main/s2.scan3.php:23
|
1705 |
+
msgid "Show Scan Details"
|
1706 |
+
msgstr ""
|
1707 |
+
|
1708 |
+
#: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
|
1709 |
+
#: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
|
1710 |
+
#: views/tools/diagnostics/inc.settings.php:167
|
1711 |
+
msgid "Enabled"
|
1712 |
+
msgstr ""
|
1713 |
+
|
1714 |
+
#: views/packages/main/s2.scan3.php:44
|
1715 |
+
msgid "Archive Size"
|
1716 |
+
msgstr ""
|
1717 |
+
|
1718 |
+
#: views/packages/main/s2.scan3.php:45
|
1719 |
+
msgid ""
|
1720 |
+
"This size includes only files BEFORE compression is applied. It does not "
|
1721 |
+
"include the size of the database script or any applied filters. Once "
|
1722 |
+
"complete the package size will be smaller than this number."
|
1723 |
+
msgstr ""
|
1724 |
+
|
1725 |
+
#: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
|
1726 |
+
#: views/packages/main/s2.scan3.php:442
|
1727 |
+
msgid "uncompressed"
|
1728 |
+
msgstr ""
|
1729 |
+
|
1730 |
+
#: views/packages/main/s2.scan3.php:56
|
1731 |
+
msgid "Database only"
|
1732 |
+
msgstr ""
|
1733 |
+
|
1734 |
+
#: views/packages/main/s2.scan3.php:60
|
1735 |
+
msgid ""
|
1736 |
+
"Only the database and a copy of the installer.php will be included in the "
|
1737 |
+
"archive.zip file."
|
1738 |
+
msgstr ""
|
1739 |
+
|
1740 |
+
#: views/packages/main/s2.scan3.php:67
|
1741 |
+
msgid "Skip archive scan enabled"
|
1742 |
+
msgstr ""
|
1743 |
+
|
1744 |
+
#: views/packages/main/s2.scan3.php:71
|
1745 |
+
msgid ""
|
1746 |
+
"All file checks are skipped. This could cause problems during extraction if "
|
1747 |
+
"problematic files are included."
|
1748 |
+
msgstr ""
|
1749 |
+
|
1750 |
+
#: views/packages/main/s2.scan3.php:73
|
1751 |
+
msgid " Disable the advanced option to re-enable file controls."
|
1752 |
+
msgstr ""
|
1753 |
+
|
1754 |
+
#: views/packages/main/s2.scan3.php:84
|
1755 |
+
msgid "Size Checks"
|
1756 |
+
msgstr ""
|
1757 |
+
|
1758 |
+
#: views/packages/main/s2.scan3.php:89
|
1759 |
+
msgid "File Count"
|
1760 |
+
msgstr ""
|
1761 |
+
|
1762 |
+
#: views/packages/main/s2.scan3.php:90
|
1763 |
+
msgid "Directory Count"
|
1764 |
+
msgstr ""
|
1765 |
+
|
1766 |
+
#: views/packages/main/s2.scan3.php:92
|
1767 |
+
msgid ""
|
1768 |
+
"Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
|
1769 |
+
msgstr ""
|
1770 |
+
|
1771 |
+
#: views/packages/main/s2.scan3.php:93
|
1772 |
+
msgid "more details..."
|
1773 |
+
msgstr ""
|
1774 |
+
|
1775 |
+
#: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
|
1776 |
+
#: views/packages/main/s3.build.php:203 views/packages/screen.php:53
|
1777 |
+
msgid "Overview"
|
1778 |
+
msgstr ""
|
1779 |
+
|
1780 |
+
#: views/packages/main/s2.scan3.php:99
|
1781 |
+
#, php-format
|
1782 |
+
msgid ""
|
1783 |
+
"This notice is triggered at [%s] and can be ignored on most hosts. If "
|
1784 |
+
"during the build process you see a \"Host Build Interrupt\" message then "
|
1785 |
+
"this host has strict processing limits. Below are some options you can take "
|
1786 |
+
"to overcome constraints set up on this host."
|
1787 |
+
msgstr ""
|
1788 |
+
|
1789 |
+
#: views/packages/main/s2.scan3.php:103
|
1790 |
+
msgid "Timeout Options"
|
1791 |
+
msgstr ""
|
1792 |
+
|
1793 |
+
#: views/packages/main/s2.scan3.php:105
|
1794 |
+
msgid ""
|
1795 |
+
"Apply the \"Quick Filters\" below or click the back button to apply on "
|
1796 |
+
"previous page."
|
1797 |
+
msgstr ""
|
1798 |
+
|
1799 |
+
#: views/packages/main/s2.scan3.php:106
|
1800 |
+
msgid "See the FAQ link to adjust this hosts timeout limits: "
|
1801 |
+
msgstr ""
|
1802 |
+
|
1803 |
+
#: views/packages/main/s2.scan3.php:106
|
1804 |
+
msgid "What can I try for Timeout Issues?"
|
1805 |
+
msgstr ""
|
1806 |
+
|
1807 |
+
#: views/packages/main/s2.scan3.php:107
|
1808 |
+
msgid "Consider trying multi-threaded support in "
|
1809 |
+
msgstr ""
|
1810 |
+
|
1811 |
+
#: views/packages/main/s2.scan3.php:108
|
1812 |
+
msgid "Duplicator Pro."
|
1813 |
+
msgstr ""
|
1814 |
+
|
1815 |
+
#: views/packages/main/s2.scan3.php:112
|
1816 |
+
#, php-format
|
1817 |
+
msgid ""
|
1818 |
+
"Files over %1$s are listed below. Larger files such as movies or zipped "
|
1819 |
+
"content can cause timeout issues on some budget hosts. If you are having "
|
1820 |
+
"issues creating a package try excluding the directory paths below or go back "
|
1821 |
+
"to Step 1 and add them."
|
1822 |
+
msgstr ""
|
1823 |
+
|
1824 |
+
#: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
|
1825 |
+
#: views/packages/main/s2.scan3.php:257
|
1826 |
+
msgid "Quick Filters"
|
1827 |
+
msgstr ""
|
1828 |
+
|
1829 |
+
#: views/packages/main/s2.scan3.php:122
|
1830 |
+
msgid "Large Files"
|
1831 |
+
msgstr ""
|
1832 |
+
|
1833 |
+
#: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
|
1834 |
+
msgid "Hide All"
|
1835 |
+
msgstr ""
|
1836 |
+
|
1837 |
+
#: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
|
1838 |
+
msgid "Show All"
|
1839 |
+
msgstr ""
|
1840 |
+
|
1841 |
+
#: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
|
1842 |
+
msgid ""
|
1843 |
+
"Core WordPress directories should not be filtered. Use caution when "
|
1844 |
+
"excluding files."
|
1845 |
+
msgstr ""
|
1846 |
+
|
1847 |
+
#: views/packages/main/s2.scan3.php:156
|
1848 |
+
msgid "No large files found during this scan."
|
1849 |
+
msgstr ""
|
1850 |
+
|
1851 |
+
#: views/packages/main/s2.scan3.php:159
|
1852 |
+
msgid ""
|
1853 |
+
"No large files found during this scan. If you're having issues building a "
|
1854 |
+
"package click the back button and try adding a file filter to non-essential "
|
1855 |
+
"files paths like wp-content/uploads. These excluded files can then be "
|
1856 |
+
"manually moved to the new location after you have ran the migration "
|
1857 |
+
"installer."
|
1858 |
+
msgstr ""
|
1859 |
+
|
1860 |
+
#: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
|
1861 |
+
msgid ""
|
1862 |
+
"*Checking a directory will exclude all items recursively from that path "
|
1863 |
+
"down. Please use caution when filtering directories."
|
1864 |
+
msgstr ""
|
1865 |
+
|
1866 |
+
#: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
|
1867 |
+
#: views/packages/main/s2.scan3.php:305
|
1868 |
+
msgid "Add Filters & Rescan"
|
1869 |
+
msgstr ""
|
1870 |
+
|
1871 |
+
#: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
|
1872 |
+
msgid "Copy Paths to Clipboard"
|
1873 |
+
msgstr ""
|
1874 |
+
|
1875 |
+
#: views/packages/main/s2.scan3.php:193
|
1876 |
+
msgid "Addon Sites"
|
1877 |
+
msgstr ""
|
1878 |
+
|
1879 |
+
#: views/packages/main/s2.scan3.php:199
|
1880 |
+
msgid ""
|
1881 |
+
"An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories "
|
1882 |
+
"within this site. If you confirm these to be separate sites, then it is "
|
1883 |
+
"recommended that you exclude them by checking the corresponding boxes below "
|
1884 |
+
"and clicking the 'Add Filters & Rescan' button. To backup the other sites "
|
1885 |
+
"install the plugin on the sites needing to be backed-up."
|
1886 |
+
msgstr ""
|
1887 |
+
|
1888 |
+
#: views/packages/main/s2.scan3.php:222
|
1889 |
+
msgid "No add on sites found."
|
1890 |
+
msgstr ""
|
1891 |
+
|
1892 |
+
#: views/packages/main/s2.scan3.php:228
|
1893 |
+
msgid "*Checking a directory will exclude all items in that path recursively."
|
1894 |
+
msgstr ""
|
1895 |
+
|
1896 |
+
#: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
|
1897 |
+
msgid "Name Checks"
|
1898 |
+
msgstr ""
|
1899 |
+
|
1900 |
+
#: views/packages/main/s2.scan3.php:249
|
1901 |
+
msgid ""
|
1902 |
+
"Unicode and special characters such as \"*?><:/\\|\", can be problematic on "
|
1903 |
+
"some hosts."
|
1904 |
+
msgstr ""
|
1905 |
+
|
1906 |
+
#: views/packages/main/s2.scan3.php:250
|
1907 |
+
msgid ""
|
1908 |
+
" Only consider using this filter if the package build is failing. Select "
|
1909 |
+
"files that are not important to your site or you can migrate manually."
|
1910 |
+
msgstr ""
|
1911 |
+
|
1912 |
+
#: views/packages/main/s2.scan3.php:251
|
1913 |
+
msgid ""
|
1914 |
+
"If this environment/system and the system where it will be installed are set "
|
1915 |
+
"up to support Unicode and long paths then these filters can be ignored. If "
|
1916 |
+
"you run into issues with creating or installing a package, then is "
|
1917 |
+
"recommended to filter these paths."
|
1918 |
+
msgstr ""
|
1919 |
+
|
1920 |
+
#: views/packages/main/s2.scan3.php:296
|
1921 |
+
msgid "No file/directory name warnings found."
|
1922 |
+
msgstr ""
|
1923 |
+
|
1924 |
+
#: views/packages/main/s2.scan3.php:319
|
1925 |
+
msgid "Read Checks"
|
1926 |
+
msgstr ""
|
1927 |
+
|
1928 |
+
#: views/packages/main/s2.scan3.php:324
|
1929 |
+
msgid ""
|
1930 |
+
"PHP is unable to read the following items and they will NOT be included in "
|
1931 |
+
"the package. Please work with your host to adjust the permissions or "
|
1932 |
+
"resolve the symbolic-link(s) shown in the lists below. If these items are "
|
1933 |
+
"not needed then this notice can be ignored."
|
1934 |
+
msgstr ""
|
1935 |
+
|
1936 |
+
#: views/packages/main/s2.scan3.php:330
|
1937 |
+
msgid "Unreadable Items:"
|
1938 |
+
msgstr ""
|
1939 |
+
|
1940 |
+
#: views/packages/main/s2.scan3.php:337
|
1941 |
+
msgid "No unreadable items found."
|
1942 |
+
msgstr ""
|
1943 |
+
|
1944 |
+
#: views/packages/main/s2.scan3.php:341
|
1945 |
+
msgid "Recursive Links:"
|
1946 |
+
msgstr ""
|
1947 |
+
|
1948 |
+
#: views/packages/main/s2.scan3.php:348
|
1949 |
+
msgid "No recursive sym-links found."
|
1950 |
+
msgstr ""
|
1951 |
+
|
1952 |
+
#: views/packages/main/s2.scan3.php:376
|
1953 |
+
msgid "Database Size:"
|
1954 |
+
msgstr ""
|
1955 |
+
|
1956 |
+
#: views/packages/main/s2.scan3.php:377
|
1957 |
+
msgid ""
|
1958 |
+
"The database size represents only the included tables. The process for "
|
1959 |
+
"gathering the size uses the query SHOW TABLE STATUS. The overall size of "
|
1960 |
+
"the database file can impact the final size of the package."
|
1961 |
+
msgstr ""
|
1962 |
+
|
1963 |
+
#: views/packages/main/s2.scan3.php:391
|
1964 |
+
msgid "TOTAL SIZE"
|
1965 |
+
msgstr ""
|
1966 |
+
|
1967 |
+
#: views/packages/main/s2.scan3.php:394
|
1968 |
+
msgid "Records"
|
1969 |
+
msgstr ""
|
1970 |
+
|
1971 |
+
#: views/packages/main/s2.scan3.php:397
|
1972 |
+
#, php-format
|
1973 |
+
msgid ""
|
1974 |
+
"Total size and row counts are approximate values. The thresholds that "
|
1975 |
+
"trigger notices are %1$s records total for the entire database. Larger "
|
1976 |
+
"databases take more time to process. On some budget hosts that have cpu/"
|
1977 |
+
"memory/timeout limits this may cause issues."
|
1978 |
+
msgstr ""
|
1979 |
+
|
1980 |
+
#: views/packages/main/s2.scan3.php:402
|
1981 |
+
msgid "TABLE DETAILS:"
|
1982 |
+
msgstr ""
|
1983 |
+
|
1984 |
+
#: views/packages/main/s2.scan3.php:404
|
1985 |
+
#, php-format
|
1986 |
+
msgid ""
|
1987 |
+
"The notices for tables are %1$s records or names with upper-case "
|
1988 |
+
"characters. Individual tables will not trigger a notice message, but can "
|
1989 |
+
"help narrow down issues if they occur later on."
|
1990 |
+
msgstr ""
|
1991 |
+
|
1992 |
+
#: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
|
1993 |
+
msgid "RECOMMENDATIONS:"
|
1994 |
+
msgstr ""
|
1995 |
+
|
1996 |
+
#: views/packages/main/s2.scan3.php:414
|
1997 |
+
msgid "repair and optimization"
|
1998 |
+
msgstr ""
|
1999 |
+
|
2000 |
+
#: views/packages/main/s2.scan3.php:415
|
2001 |
+
#, php-format
|
2002 |
+
msgid "1. Run a %1$s on the table to improve the overall size and performance."
|
2003 |
+
msgstr ""
|
2004 |
+
|
2005 |
+
#: views/packages/main/s2.scan3.php:417
|
2006 |
+
msgid ""
|
2007 |
+
"2. Remove post revisions and stale data from tables. Tables such as logs, "
|
2008 |
+
"statistical or other non-critical data should be cleared."
|
2009 |
+
msgstr ""
|
2010 |
+
|
2011 |
+
#: views/packages/main/s2.scan3.php:419
|
2012 |
+
msgid "Enable mysqldump"
|
2013 |
+
msgstr ""
|
2014 |
+
|
2015 |
+
#: views/packages/main/s2.scan3.php:420
|
2016 |
+
#, php-format
|
2017 |
+
msgid "3. %1$s if this host supports the option."
|
2018 |
+
msgstr ""
|
2019 |
+
|
2020 |
+
#: views/packages/main/s2.scan3.php:422
|
2021 |
+
msgid "lower_case_table_names"
|
2022 |
+
msgstr ""
|
2023 |
+
|
2024 |
+
#: views/packages/main/s2.scan3.php:423
|
2025 |
+
#, php-format
|
2026 |
+
msgid ""
|
2027 |
+
"4. For table name case sensitivity issues either rename the table with lower "
|
2028 |
+
"case characters or be prepared to work with the %1$s system variable setting."
|
2029 |
+
msgstr ""
|
2030 |
+
|
2031 |
+
#: views/packages/main/s2.scan3.php:434
|
2032 |
+
msgid "Total Size"
|
2033 |
+
msgstr ""
|
2034 |
+
|
2035 |
+
#: views/packages/main/s2.scan3.php:439
|
2036 |
+
msgid "Total Size:"
|
2037 |
+
msgstr ""
|
2038 |
+
|
2039 |
+
#: views/packages/main/s2.scan3.php:440
|
2040 |
+
msgid "The total size of the site (files plus database)."
|
2041 |
+
msgstr ""
|
2042 |
+
|
2043 |
+
#: views/packages/main/s2.scan3.php:450
|
2044 |
+
#, php-format
|
2045 |
+
msgid ""
|
2046 |
+
"The build can't continue because the total size of files and the database "
|
2047 |
+
"exceeds the %s limit that can be processed when creating a DupArchive "
|
2048 |
+
"package. "
|
2049 |
+
msgstr ""
|
2050 |
+
|
2051 |
+
#: views/packages/main/s2.scan3.php:451
|
2052 |
+
msgid ""
|
2053 |
+
"<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-"
|
2054 |
+
"recommendations').toggle()\">Click for recommendations.</a>"
|
2055 |
+
msgstr ""
|
2056 |
+
|
2057 |
+
#: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
|
2058 |
+
#: views/settings/packages.php:208
|
2059 |
+
msgid "Archive Engine"
|
2060 |
+
msgstr ""
|
2061 |
+
|
2062 |
+
#: views/packages/main/s2.scan3.php:459
|
2063 |
+
#, php-format
|
2064 |
+
msgid ""
|
2065 |
+
" With DupArchive, Duplicator is restricted to processing sites up to %s. To "
|
2066 |
+
"process larger sites, consider these recommendations. "
|
2067 |
+
msgstr ""
|
2068 |
+
|
2069 |
+
#: views/packages/main/s2.scan3.php:468
|
2070 |
+
msgid "Step 1"
|
2071 |
+
msgstr ""
|
2072 |
+
|
2073 |
+
#: views/packages/main/s2.scan3.php:469
|
2074 |
+
#, php-format
|
2075 |
+
msgid "- Add data filters to get the package size under %s: "
|
2076 |
+
msgstr ""
|
2077 |
+
|
2078 |
+
#: views/packages/main/s2.scan3.php:471
|
2079 |
+
msgid ""
|
2080 |
+
"- In the 'Size Checks' section above consider adding filters (if notice is "
|
2081 |
+
"shown)."
|
2082 |
+
msgstr ""
|
2083 |
+
|
2084 |
+
#: views/packages/main/s2.scan3.php:473
|
2085 |
+
#, php-format
|
2086 |
+
msgid "- In %s consider adding file/directory or database table filters."
|
2087 |
+
msgstr ""
|
2088 |
+
|
2089 |
+
#: views/packages/main/s2.scan3.php:477
|
2090 |
+
msgid "covered here."
|
2091 |
+
msgstr ""
|
2092 |
+
|
2093 |
+
#: views/packages/main/s2.scan3.php:478
|
2094 |
+
#, php-format
|
2095 |
+
msgid "- Perform a two part install %s"
|
2096 |
+
msgstr ""
|
2097 |
+
|
2098 |
+
#: views/packages/main/s2.scan3.php:481
|
2099 |
+
msgid "ZipArchive Engine"
|
2100 |
+
msgstr ""
|
2101 |
+
|
2102 |
+
#: views/packages/main/s2.scan3.php:482
|
2103 |
+
#, php-format
|
2104 |
+
msgid ""
|
2105 |
+
"- Switch to the %s which requires a capable hosting provider (VPS "
|
2106 |
+
"recommended)."
|
2107 |
+
msgstr ""
|
2108 |
+
|
2109 |
+
#: views/packages/main/s2.scan3.php:486
|
2110 |
+
#, php-format
|
2111 |
+
msgid "- Consider upgrading to %s for large site support. (unlimited)"
|
2112 |
+
msgstr ""
|
2113 |
+
|
2114 |
+
#: views/packages/main/s2.scan3.php:496
|
2115 |
+
msgid "Migrate large, multi-gig sites with"
|
2116 |
+
msgstr ""
|
2117 |
+
|
2118 |
+
#: views/packages/main/s2.scan3.php:511
|
2119 |
+
msgid "Scan Details"
|
2120 |
+
msgstr ""
|
2121 |
+
|
2122 |
+
#: views/packages/main/s2.scan3.php:518
|
2123 |
+
msgid "Copy Quick Filter Paths"
|
2124 |
+
msgstr ""
|
2125 |
+
|
2126 |
+
#: views/packages/main/s2.scan3.php:537
|
2127 |
+
msgid "Name:"
|
2128 |
+
msgstr ""
|
2129 |
+
|
2130 |
+
#: views/packages/main/s2.scan3.php:538
|
2131 |
+
msgid "Host:"
|
2132 |
+
msgstr ""
|
2133 |
+
|
2134 |
+
#: views/packages/main/s2.scan3.php:540
|
2135 |
+
msgid "Build Mode:"
|
2136 |
+
msgstr ""
|
2137 |
+
|
2138 |
+
#: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
|
2139 |
+
msgid "File Filters"
|
2140 |
+
msgstr ""
|
2141 |
+
|
2142 |
+
#: views/packages/main/s2.scan3.php:557
|
2143 |
+
#: views/tools/diagnostics/inc.settings.php:167
|
2144 |
+
msgid "Disabled"
|
2145 |
+
msgstr ""
|
2146 |
+
|
2147 |
+
#: views/packages/main/s2.scan3.php:571
|
2148 |
+
msgid "No custom directory filters set."
|
2149 |
+
msgstr ""
|
2150 |
+
|
2151 |
+
#: views/packages/main/s2.scan3.php:581
|
2152 |
+
msgid "No file extension filters have been set."
|
2153 |
+
msgstr ""
|
2154 |
+
|
2155 |
+
#: views/packages/main/s2.scan3.php:593
|
2156 |
+
msgid "No custom file filters set."
|
2157 |
+
msgstr ""
|
2158 |
+
|
2159 |
+
#: views/packages/main/s2.scan3.php:597
|
2160 |
+
msgid "Auto Directory Filters"
|
2161 |
+
msgstr ""
|
2162 |
+
|
2163 |
+
#: views/packages/main/s2.scan3.php:603
|
2164 |
+
msgid "Auto File Filters"
|
2165 |
+
msgstr ""
|
2166 |
+
|
2167 |
+
#: views/packages/main/s2.scan3.php:616
|
2168 |
+
msgid "Path filters will be skipped during the archive process when enabled."
|
2169 |
+
msgstr ""
|
2170 |
+
|
2171 |
+
#: views/packages/main/s2.scan3.php:618
|
2172 |
+
msgid "[view json result report]"
|
2173 |
+
msgstr ""
|
2174 |
+
|
2175 |
+
#: views/packages/main/s2.scan3.php:621
|
2176 |
+
msgid "Auto filters are applied to prevent archiving other backup sets."
|
2177 |
+
msgstr ""
|
2178 |
+
|
2179 |
+
#: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
|
2180 |
+
msgid "Click to Copy"
|
2181 |
+
msgstr ""
|
2182 |
+
|
2183 |
+
#: views/packages/main/s2.scan3.php:646
|
2184 |
+
msgid ""
|
2185 |
+
"Copy the paths above and apply them as needed on Step 1 > Archive > "
|
2186 |
+
"Files section."
|
2187 |
+
msgstr ""
|
2188 |
+
|
2189 |
+
#: views/packages/main/s2.scan3.php:663
|
2190 |
+
msgid "Directory applied filter set."
|
2191 |
+
msgstr ""
|
2192 |
+
|
2193 |
+
#: views/packages/main/s2.scan3.php:690
|
2194 |
+
msgid "No directories have been selected!"
|
2195 |
+
msgstr ""
|
2196 |
+
|
2197 |
+
#: views/packages/main/s2.scan3.php:694
|
2198 |
+
msgid "No files have been selected!"
|
2199 |
+
msgstr ""
|
2200 |
+
|
2201 |
+
#: views/packages/main/s2.scan3.php:732
|
2202 |
+
msgid "Copied to Clipboard!"
|
2203 |
+
msgstr ""
|
2204 |
+
|
2205 |
+
#: views/packages/main/s2.scan3.php:734
|
2206 |
+
msgid "Manual copy of selected text required on this browser."
|
2207 |
+
msgstr ""
|
2208 |
+
|
2209 |
+
#: views/packages/main/s2.scan3.php:741
|
2210 |
+
msgid "Initializing Please Wait..."
|
2211 |
+
msgstr ""
|
2212 |
+
|
2213 |
+
#: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
|
2214 |
+
msgid ""
|
2215 |
+
"Error applying filters. Please go back to Step 1 to add filter manually!"
|
2216 |
+
msgstr ""
|
2217 |
+
|
2218 |
+
#: views/packages/main/s2.scan3.php:867
|
2219 |
+
msgid "Unable to report on any tables"
|
2220 |
+
msgstr ""
|
2221 |
+
|
2222 |
+
#: views/packages/main/s2.scan3.php:893
|
2223 |
+
msgid "Unable to report on database stats"
|
2224 |
+
msgstr ""
|
2225 |
+
|
2226 |
+
#: views/packages/main/s3.build.php:16
|
2227 |
+
msgid "Help review the plugin"
|
2228 |
+
msgstr ""
|
2229 |
+
|
2230 |
+
#: views/packages/main/s3.build.php:19
|
2231 |
+
msgid "Want more power? Try"
|
2232 |
+
msgstr ""
|
2233 |
+
|
2234 |
+
#: views/packages/main/s3.build.php:84
|
2235 |
+
msgid "Step 3: Build Package"
|
2236 |
+
msgstr ""
|
2237 |
+
|
2238 |
+
#: views/packages/main/s3.build.php:114
|
2239 |
+
msgid "Building Package"
|
2240 |
+
msgstr ""
|
2241 |
+
|
2242 |
+
#: views/packages/main/s3.build.php:117
|
2243 |
+
msgid "Keep this window open and do not close during the build process."
|
2244 |
+
msgstr ""
|
2245 |
+
|
2246 |
+
#: views/packages/main/s3.build.php:118
|
2247 |
+
msgid "This may take several minutes to complete."
|
2248 |
+
msgstr ""
|
2249 |
+
|
2250 |
+
#: views/packages/main/s3.build.php:122
|
2251 |
+
msgid "Build Status"
|
2252 |
+
msgstr ""
|
2253 |
+
|
2254 |
+
#: views/packages/main/s3.build.php:129
|
2255 |
+
msgid "Package Completed"
|
2256 |
+
msgstr ""
|
2257 |
+
|
2258 |
+
#: views/packages/main/s3.build.php:134
|
2259 |
+
msgid "Process Time"
|
2260 |
+
msgstr ""
|
2261 |
+
|
2262 |
+
#: views/packages/main/s3.build.php:140
|
2263 |
+
msgid "Download Files"
|
2264 |
+
msgstr ""
|
2265 |
+
|
2266 |
+
#: views/packages/main/s3.build.php:142
|
2267 |
+
msgid "Click to download installer file"
|
2268 |
+
msgstr ""
|
2269 |
+
|
2270 |
+
#: views/packages/main/s3.build.php:145
|
2271 |
+
msgid "Click to download archive file"
|
2272 |
+
msgstr ""
|
2273 |
+
|
2274 |
+
#: views/packages/main/s3.build.php:151
|
2275 |
+
msgid "Click to download both files"
|
2276 |
+
msgstr ""
|
2277 |
+
|
2278 |
+
#: views/packages/main/s3.build.php:152
|
2279 |
+
msgid "One-Click Download"
|
2280 |
+
msgstr ""
|
2281 |
+
|
2282 |
+
#: views/packages/main/s3.build.php:155
|
2283 |
+
msgid "One Click:"
|
2284 |
+
msgstr ""
|
2285 |
+
|
2286 |
+
#: views/packages/main/s3.build.php:156
|
2287 |
+
msgid ""
|
2288 |
+
"Clicking this link will open both the installer and archive download prompts "
|
2289 |
+
"at the same time. On some browsers you may have to disable pop-up warnings "
|
2290 |
+
"on this domain for this to work correctly."
|
2291 |
+
msgstr ""
|
2292 |
+
|
2293 |
+
#: views/packages/main/s3.build.php:164
|
2294 |
+
msgid "How do I install this Package?"
|
2295 |
+
msgstr ""
|
2296 |
+
|
2297 |
+
#: views/packages/main/s3.build.php:176
|
2298 |
+
msgid "Host Build Interrupt"
|
2299 |
+
msgstr ""
|
2300 |
+
|
2301 |
+
#: views/packages/main/s3.build.php:177
|
2302 |
+
msgid "This server cannot complete the build due to host setup constraints."
|
2303 |
+
msgstr ""
|
2304 |
+
|
2305 |
+
#: views/packages/main/s3.build.php:178
|
2306 |
+
msgid ""
|
2307 |
+
"To get past this hosts limitation consider the options below by clicking "
|
2308 |
+
"each section."
|
2309 |
+
msgstr ""
|
2310 |
+
|
2311 |
+
#: views/packages/main/s3.build.php:184
|
2312 |
+
msgid "Option 1: Try DupArchive"
|
2313 |
+
msgstr ""
|
2314 |
+
|
2315 |
+
#: views/packages/main/s3.build.php:188
|
2316 |
+
msgid "OPTION 1:"
|
2317 |
+
msgstr ""
|
2318 |
+
|
2319 |
+
#: views/packages/main/s3.build.php:190
|
2320 |
+
msgid ""
|
2321 |
+
"Enable the DupArchive format which is specific to Duplicator and designed to "
|
2322 |
+
"perform better on constrained budget hosts."
|
2323 |
+
msgstr ""
|
2324 |
+
|
2325 |
+
#: views/packages/main/s3.build.php:194
|
2326 |
+
msgid ""
|
2327 |
+
"Note: DupArchive on Duplicator only supports sites up to 500MB. If your "
|
2328 |
+
"site is over 500MB then use a file filter on step 1 to get the size below "
|
2329 |
+
"500MB or try the other options mentioned below. Alternatively, you may want "
|
2330 |
+
"to consider"
|
2331 |
+
msgstr ""
|
2332 |
+
|
2333 |
+
#: views/packages/main/s3.build.php:200
|
2334 |
+
msgid " which is capable of migrating sites much larger than 500MB."
|
2335 |
+
msgstr ""
|
2336 |
+
|
2337 |
+
#: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
|
2338 |
+
msgid "Please follow these steps:"
|
2339 |
+
msgstr ""
|
2340 |
+
|
2341 |
+
#: views/packages/main/s3.build.php:206
|
2342 |
+
msgid ""
|
2343 |
+
"On the scanner step check to make sure your package is under 500MB. If not "
|
2344 |
+
"see additional options below."
|
2345 |
+
msgstr ""
|
2346 |
+
|
2347 |
+
#: views/packages/main/s3.build.php:208
|
2348 |
+
msgid ""
|
2349 |
+
"Go to Duplicator > Settings > Packages Tab > Archive Engine >"
|
2350 |
+
msgstr ""
|
2351 |
+
|
2352 |
+
#: views/packages/main/s3.build.php:209
|
2353 |
+
msgid "Enable DupArchive"
|
2354 |
+
msgstr ""
|
2355 |
+
|
2356 |
+
#: views/packages/main/s3.build.php:211
|
2357 |
+
msgid "Build a new package using the new engine format."
|
2358 |
+
msgstr ""
|
2359 |
+
|
2360 |
+
#: views/packages/main/s3.build.php:215
|
2361 |
+
msgid ""
|
2362 |
+
"Note: The DupArchive engine will generate an archive.daf file. This file is "
|
2363 |
+
"very similar to a .zip except that it can only be extracted by the installer."
|
2364 |
+
"php file or the"
|
2365 |
+
msgstr ""
|
2366 |
+
|
2367 |
+
#: views/packages/main/s3.build.php:217
|
2368 |
+
msgid "commandline extraction tool"
|
2369 |
+
msgstr ""
|
2370 |
+
|
2371 |
+
#: views/packages/main/s3.build.php:225
|
2372 |
+
msgid "Option 2: File Filters"
|
2373 |
+
msgstr ""
|
2374 |
+
|
2375 |
+
#: views/packages/main/s3.build.php:229
|
2376 |
+
msgid "OPTION 2:"
|
2377 |
+
msgstr ""
|
2378 |
+
|
2379 |
+
#: views/packages/main/s3.build.php:231
|
2380 |
+
msgid ""
|
2381 |
+
"The first pass for reading files on some budget hosts maybe slow and have "
|
2382 |
+
"conflicts with strict timeout settings setup by the hosting provider. In "
|
2383 |
+
"these cases, it is recommended to retry the build by adding file filters to "
|
2384 |
+
"larger files/directories."
|
2385 |
+
msgstr ""
|
2386 |
+
|
2387 |
+
#: views/packages/main/s3.build.php:236
|
2388 |
+
msgid ""
|
2389 |
+
"For example, you could filter out the \"/wp-content/uploads/\" folder to "
|
2390 |
+
"create the package then move the files from that directory over manually. "
|
2391 |
+
"If this work-flow is not desired or does not work please check-out the other "
|
2392 |
+
"options below."
|
2393 |
+
msgstr ""
|
2394 |
+
|
2395 |
+
#: views/packages/main/s3.build.php:241
|
2396 |
+
msgid "Retry Build With Filters"
|
2397 |
+
msgstr ""
|
2398 |
+
|
2399 |
+
#: views/packages/main/s3.build.php:247
|
2400 |
+
msgid "Build Folder:"
|
2401 |
+
msgstr ""
|
2402 |
+
|
2403 |
+
#: views/packages/main/s3.build.php:248
|
2404 |
+
msgid ""
|
2405 |
+
"On some servers the build will continue to run in the background. To "
|
2406 |
+
"validate if a build is still running; open the 'tmp' folder above and see if "
|
2407 |
+
"the archive file is growing in size or check the main packages screen to see "
|
2408 |
+
"if the package completed. If it is not then your server has strict timeout "
|
2409 |
+
"constraints."
|
2410 |
+
msgstr ""
|
2411 |
+
|
2412 |
+
#: views/packages/main/s3.build.php:260
|
2413 |
+
msgid "Option 3: Two-Part Install"
|
2414 |
+
msgstr ""
|
2415 |
+
|
2416 |
+
#: views/packages/main/s3.build.php:264
|
2417 |
+
msgid "OPTION 3:"
|
2418 |
+
msgstr ""
|
2419 |
+
|
2420 |
+
#: views/packages/main/s3.build.php:266
|
2421 |
+
msgid ""
|
2422 |
+
"A two-part install minimizes server load and can avoid I/O and CPU issues "
|
2423 |
+
"encountered on some budget hosts. With this procedure you simply build a "
|
2424 |
+
"'database-only' archive, manually move the website files, and then run the "
|
2425 |
+
"installer to complete the process."
|
2426 |
+
msgstr ""
|
2427 |
+
|
2428 |
+
#: views/packages/main/s3.build.php:270
|
2429 |
+
msgid " Overview"
|
2430 |
+
msgstr ""
|
2431 |
+
|
2432 |
+
#: views/packages/main/s3.build.php:273
|
2433 |
+
msgid "Click the button below to go back to Step 1."
|
2434 |
+
msgstr ""
|
2435 |
+
|
2436 |
+
#: views/packages/main/s3.build.php:274
|
2437 |
+
msgid ""
|
2438 |
+
"On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
|
2439 |
+
msgstr ""
|
2440 |
+
|
2441 |
+
#: views/packages/main/s3.build.php:276
|
2442 |
+
msgid "Complete the package build and follow the "
|
2443 |
+
msgstr ""
|
2444 |
+
|
2445 |
+
#: views/packages/main/s3.build.php:286
|
2446 |
+
msgid "Yes. I have read the above overview and would like to continue!"
|
2447 |
+
msgstr ""
|
2448 |
+
|
2449 |
+
#: views/packages/main/s3.build.php:288
|
2450 |
+
msgid "Start Two-Part Install Process"
|
2451 |
+
msgstr ""
|
2452 |
+
|
2453 |
+
#: views/packages/main/s3.build.php:297
|
2454 |
+
msgid "Option 4: Configure Server"
|
2455 |
+
msgstr ""
|
2456 |
+
|
2457 |
+
#: views/packages/main/s3.build.php:301
|
2458 |
+
msgid "OPTION 4:"
|
2459 |
+
msgstr ""
|
2460 |
+
|
2461 |
+
#: views/packages/main/s3.build.php:302
|
2462 |
+
msgid ""
|
2463 |
+
"This option is available on some hosts that allow for users to adjust server "
|
2464 |
+
"configurations. With this option you will be directed to an FAQ page that "
|
2465 |
+
"will show various recommendations you can take to improve/unlock constraints "
|
2466 |
+
"set up on this server."
|
2467 |
+
msgstr ""
|
2468 |
+
|
2469 |
+
#: views/packages/main/s3.build.php:308
|
2470 |
+
msgid "Diagnose Server Setup"
|
2471 |
+
msgstr ""
|
2472 |
+
|
2473 |
+
#: views/packages/main/s3.build.php:312
|
2474 |
+
msgid "RUNTIME DETAILS"
|
2475 |
+
msgstr ""
|
2476 |
+
|
2477 |
+
#: views/packages/main/s3.build.php:315
|
2478 |
+
msgid "Allowed Runtime:"
|
2479 |
+
msgstr ""
|
2480 |
+
|
2481 |
+
#: views/packages/main/s3.build.php:319
|
2482 |
+
msgid "PHP Max Execution"
|
2483 |
+
msgstr ""
|
2484 |
+
|
2485 |
+
#: views/packages/main/s3.build.php:329
|
2486 |
+
msgid ""
|
2487 |
+
"This value is represented in seconds. A value of 0 means no timeout limit is "
|
2488 |
+
"set for PHP."
|
2489 |
+
msgstr ""
|
2490 |
+
|
2491 |
+
#: views/packages/main/s3.build.php:333 views/settings/packages.php:167
|
2492 |
+
msgid "Mode"
|
2493 |
+
msgstr ""
|
2494 |
+
|
2495 |
+
#: views/packages/main/s3.build.php:339
|
2496 |
+
msgid "PHP Max Execution Mode"
|
2497 |
+
msgstr ""
|
2498 |
+
|
2499 |
+
#: views/packages/main/s3.build.php:341
|
2500 |
+
msgid ""
|
2501 |
+
"If the value is [dynamic] then its possible for PHP to run longer than the "
|
2502 |
+
"default. If the value is [fixed] then PHP will not be allowed to run longer "
|
2503 |
+
"than the default. <br/><br/> If this value is larger than the [Allowed "
|
2504 |
+
"Runtime] above then the web server has been enabled with a timeout cap and "
|
2505 |
+
"is overriding the PHP max time setting."
|
2506 |
+
msgstr ""
|
2507 |
+
|
2508 |
+
#: views/packages/main/s3.build.php:362
|
2509 |
+
msgid "Read Package Log File"
|
2510 |
+
msgstr ""
|
2511 |
+
|
2512 |
+
#: views/packages/screen.php:64
|
2513 |
+
msgid ""
|
2514 |
+
"<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' "
|
2515 |
+
"section is the main interface for managing all the packages that have been "
|
2516 |
+
"created. A Package consists of two core files, the 'archive.zip' and the "
|
2517 |
+
"'installer.php' file. The archive file is a zip file containing all your "
|
2518 |
+
"WordPress files and a copy of your WordPress database. The installer file "
|
2519 |
+
"is a php file that when browsed to via a web browser presents a wizard that "
|
2520 |
+
"redeploys/installs the website by extracting the archive file and installing "
|
2521 |
+
"the database. To create a package, click the 'Create New' button and "
|
2522 |
+
"follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</"
|
2523 |
+
"b><br/>To download the package files click on the Installer and Archive "
|
2524 |
+
"buttons after creating a package. The archive file will have a copy of the "
|
2525 |
+
"installer inside of it named installer-backup.php in case the original "
|
2526 |
+
"installer file is lost. To see the details of a package click on the <i "
|
2527 |
+
"class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-"
|
2528 |
+
"archive'></i> Archive Types</b><br/>An archive file can be saved as either "
|
2529 |
+
"a .zip file or .daf file. A zip file is a common archive format used to "
|
2530 |
+
"compress and group files. The daf file short for 'Duplicator Archive "
|
2531 |
+
"Format' is a custom format used specifically for working with larger "
|
2532 |
+
"packages and scale-ability issues on many shared hosting platforms. Both "
|
2533 |
+
"formats work very similar. The main difference is that the daf file can "
|
2534 |
+
"only be extracted using the installer.php file or the <a href='https://"
|
2535 |
+
"snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' "
|
2536 |
+
"target='_blank'>DAF extraction tool</a>. The zip file can be used by the "
|
2537 |
+
"installer.php or other zip tools like winrar/7zip/winzip or other client-"
|
2538 |
+
"side tools. <br/><br/>"
|
2539 |
+
msgstr ""
|
2540 |
+
|
2541 |
+
#: views/packages/screen.php:85
|
2542 |
+
msgid ""
|
2543 |
+
"<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional "
|
2544 |
+
"filtered directory paths, files, file extensions and database tables. To "
|
2545 |
+
"filter specific system files, click the 'Enable File Filters' checkbox and "
|
2546 |
+
"add the full path of the file or directory, followed by a semicolon. For a "
|
2547 |
+
"file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/"
|
2548 |
+
">To exclude a database table, check the box labeled 'Enable Table Filters' "
|
2549 |
+
"and check the table name to exclude. To include only a copy of your database "
|
2550 |
+
"in the archive file check the box labeled 'Archive Only the Database'. The "
|
2551 |
+
"installer.php file can optionally be pre-filled with data at install time "
|
2552 |
+
"but is not required. <br/><br/>"
|
2553 |
+
msgstr ""
|
2554 |
+
|
2555 |
+
#: views/packages/screen.php:97
|
2556 |
+
msgid ""
|
2557 |
+
"<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and "
|
2558 |
+
"database to let you know if there are any concerns or issues that may be "
|
2559 |
+
"present. All items in green mean the checks looked good. All items in red "
|
2560 |
+
"indicate a warning. Warnings will not prevent the build from running, "
|
2561 |
+
"however if you do run into issues with the build then investigating the "
|
2562 |
+
"warnings should be considered. Click on each section for more details about "
|
2563 |
+
"each scan check. <br/><br/>"
|
2564 |
+
msgstr ""
|
2565 |
+
|
2566 |
+
#: views/packages/screen.php:105
|
2567 |
+
msgid ""
|
2568 |
+
"<b>Packages » 3 Build</b> <br/>The final step in the build process where the "
|
2569 |
+
"installer script and archive of the website can be downloaded. To start "
|
2570 |
+
"the install process follow these steps: <ol><li>Download the installer.php "
|
2571 |
+
"and archive.zip files to your local computer.</li><li>For localhost installs "
|
2572 |
+
"be sure you have PHP, Apache & MySQL installed on your local computer with "
|
2573 |
+
"software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package."
|
2574 |
+
"zip and installer.php into any empty directory under your webroot then "
|
2575 |
+
"browse to the installer.php via your web browser to launch the install "
|
2576 |
+
"wizard.</li><li>For remote installs use FTP or cPanel to upload both the "
|
2577 |
+
"archive.zip and installer.php to your hosting provider. Place the files in a "
|
2578 |
+
"new empty directory under your host's webroot accessible from a valid URL "
|
2579 |
+
"such as http://your-domain/your-wp-directory/installer.php to launch the "
|
2580 |
+
"install wizard. On some hosts the root directory will be a something like "
|
2581 |
+
"public_html -or- www. If your're not sure contact your hosting provider. </"
|
2582 |
+
"li></ol>For complete instructions see:<br/>\n"
|
2583 |
+
"\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?"
|
2584 |
+
"utm_source=duplicator_free&utm_medium=wordpress_plugin&"
|
2585 |
+
"utm_content=package_built_install_help&"
|
2586 |
+
"utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
|
2587 |
+
"\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
|
2588 |
+
msgstr ""
|
2589 |
+
|
2590 |
+
#: views/packages/screen.php:122
|
2591 |
+
msgid ""
|
2592 |
+
"<b>Packages » Details</b> <br/>The details view will give you a full break-"
|
2593 |
+
"down of the package including any errors that may have occured during the "
|
2594 |
+
"install. <br/><br/>"
|
2595 |
+
msgstr ""
|
2596 |
+
|
2597 |
+
#: views/settings/about-info.php:49
|
2598 |
+
msgid ""
|
2599 |
+
"Duplicator can streamline your workflow and quickly clone/migrate a "
|
2600 |
+
"WordPress site. The plugin helps admins, designers and developers speed up "
|
2601 |
+
"the migration process of moving a WordPress site. Please help us continue "
|
2602 |
+
"development by giving the plugin a 5 star."
|
2603 |
+
msgstr ""
|
2604 |
+
|
2605 |
+
#: views/settings/about-info.php:58
|
2606 |
+
msgid "Rate Duplicator"
|
2607 |
+
msgstr ""
|
2608 |
+
|
2609 |
+
#: views/settings/about-info.php:69
|
2610 |
+
msgid "Support Duplicator"
|
2611 |
+
msgstr ""
|
2612 |
+
|
2613 |
+
#: views/settings/about-info.php:71
|
2614 |
+
msgid "with a 5 star review!"
|
2615 |
+
msgstr ""
|
2616 |
+
|
2617 |
+
#: views/settings/about-info.php:85
|
2618 |
+
msgid "Spread the Word"
|
2619 |
+
msgstr ""
|
2620 |
+
|
2621 |
+
#: views/settings/about-info.php:92
|
2622 |
+
msgid "Facebook"
|
2623 |
+
msgstr ""
|
2624 |
+
|
2625 |
+
#: views/settings/about-info.php:95
|
2626 |
+
msgid "Twitter"
|
2627 |
+
msgstr ""
|
2628 |
+
|
2629 |
+
#: views/settings/about-info.php:98
|
2630 |
+
msgid "LinkedIn"
|
2631 |
+
msgstr ""
|
2632 |
+
|
2633 |
+
#: views/settings/about-info.php:101
|
2634 |
+
msgid "Google+"
|
2635 |
+
msgstr ""
|
2636 |
+
|
2637 |
+
#: views/settings/about-info.php:120
|
2638 |
+
msgid "Stay in the Loop"
|
2639 |
+
msgstr ""
|
2640 |
+
|
2641 |
+
#: views/settings/about-info.php:130
|
2642 |
+
msgid ""
|
2643 |
+
"Subscribe to the Duplicator newsletter and stay on top of great ideas, "
|
2644 |
+
"tutorials, and better ways to improve your workflows"
|
2645 |
+
msgstr ""
|
2646 |
+
|
2647 |
+
#: views/settings/controller.php:24
|
2648 |
+
msgid "Schedules"
|
2649 |
+
msgstr ""
|
2650 |
+
|
2651 |
+
#: views/settings/controller.php:26
|
2652 |
+
msgid "License"
|
2653 |
+
msgstr ""
|
2654 |
+
|
2655 |
+
#: views/settings/controller.php:27
|
2656 |
+
msgid "About"
|
2657 |
+
msgstr ""
|
2658 |
+
|
2659 |
+
#: views/settings/general.php:8
|
2660 |
+
msgid "General Settings Saved"
|
2661 |
+
msgstr ""
|
2662 |
+
|
2663 |
+
#: views/settings/general.php:88
|
2664 |
+
msgid "Plugin"
|
2665 |
+
msgstr ""
|
2666 |
+
|
2667 |
+
#: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
|
2668 |
+
#: views/tools/diagnostics/inc.settings.php:110
|
2669 |
+
#: views/tools/diagnostics/inc.settings.php:183
|
2670 |
+
msgid "Version"
|
2671 |
+
msgstr ""
|
2672 |
+
|
2673 |
+
#: views/settings/general.php:99
|
2674 |
+
msgid "Uninstall"
|
2675 |
+
msgstr ""
|
2676 |
+
|
2677 |
+
#: views/settings/general.php:102
|
2678 |
+
msgid "Delete Plugin Settings"
|
2679 |
+
msgstr ""
|
2680 |
+
|
2681 |
+
#: views/settings/general.php:105
|
2682 |
+
msgid "Delete Entire Storage Directory"
|
2683 |
+
msgstr ""
|
2684 |
+
|
2685 |
+
#: views/settings/general.php:112
|
2686 |
+
msgid "Full Path"
|
2687 |
+
msgstr ""
|
2688 |
+
|
2689 |
+
#: views/settings/general.php:115
|
2690 |
+
msgid "Disable .htaccess File In Storage Directory"
|
2691 |
+
msgstr ""
|
2692 |
+
|
2693 |
+
#: views/settings/general.php:117
|
2694 |
+
msgid "Disable if issues occur when downloading installer/archive files."
|
2695 |
+
msgstr ""
|
2696 |
+
|
2697 |
+
#: views/settings/general.php:122
|
2698 |
+
msgid "Custom Roles"
|
2699 |
+
msgstr ""
|
2700 |
+
|
2701 |
+
#: views/settings/general.php:125
|
2702 |
+
msgid "Enable User Role Editor Plugin Integration"
|
2703 |
+
msgstr ""
|
2704 |
+
|
2705 |
+
#: views/settings/general.php:130
|
2706 |
+
msgid "The User Role Editor Plugin"
|
2707 |
+
msgstr ""
|
2708 |
+
|
2709 |
+
#: views/settings/general.php:131 views/settings/gopro.php:46
|
2710 |
+
msgid "Free"
|
2711 |
+
msgstr ""
|
2712 |
+
|
2713 |
+
#: views/settings/general.php:132
|
2714 |
+
msgid "or"
|
2715 |
+
msgstr ""
|
2716 |
+
|
2717 |
+
#: views/settings/general.php:133 views/settings/gopro.php:47
|
2718 |
+
msgid "Professional"
|
2719 |
+
msgstr ""
|
2720 |
+
|
2721 |
+
#: views/settings/general.php:134
|
2722 |
+
msgid "must be installed to use"
|
2723 |
+
msgstr ""
|
2724 |
+
|
2725 |
+
#: views/settings/general.php:135
|
2726 |
+
msgid "this feature."
|
2727 |
+
msgstr ""
|
2728 |
+
|
2729 |
+
#: views/settings/general.php:144
|
2730 |
+
msgid "Debug"
|
2731 |
+
msgstr ""
|
2732 |
+
|
2733 |
+
#: views/settings/general.php:148
|
2734 |
+
msgid "Debugging"
|
2735 |
+
msgstr ""
|
2736 |
+
|
2737 |
+
#: views/settings/general.php:151
|
2738 |
+
msgid "Enable debug options throughout user interface"
|
2739 |
+
msgstr ""
|
2740 |
+
|
2741 |
+
#: views/settings/general.php:155
|
2742 |
+
msgid "Trace Log"
|
2743 |
+
msgstr ""
|
2744 |
+
|
2745 |
+
#: views/settings/general.php:161
|
2746 |
+
msgid ""
|
2747 |
+
"Turns on detailed operation logging. Logging will occur in both PHP error "
|
2748 |
+
"and local trace logs."
|
2749 |
+
msgstr ""
|
2750 |
+
|
2751 |
+
#: views/settings/general.php:163
|
2752 |
+
msgid ""
|
2753 |
+
"WARNING: Only turn on this setting when asked to by support as tracing will "
|
2754 |
+
"impact performance."
|
2755 |
+
msgstr ""
|
2756 |
+
|
2757 |
+
#: views/settings/general.php:167
|
2758 |
+
msgid "Download Trace Log"
|
2759 |
+
msgstr ""
|
2760 |
+
|
2761 |
+
#: views/settings/general.php:175
|
2762 |
+
msgid "Advanced"
|
2763 |
+
msgstr ""
|
2764 |
+
|
2765 |
+
#: views/settings/general.php:182
|
2766 |
+
msgid "Reset Packages"
|
2767 |
+
msgstr ""
|
2768 |
+
|
2769 |
+
#: views/settings/general.php:185
|
2770 |
+
msgid ""
|
2771 |
+
"This process will reset all packages by deleting those without a completed "
|
2772 |
+
"status, reset the active package id and perform a cleanup of the build tmp "
|
2773 |
+
"file."
|
2774 |
+
msgstr ""
|
2775 |
+
|
2776 |
+
#: views/settings/general.php:188
|
2777 |
+
msgid "Reset Settings"
|
2778 |
+
msgstr ""
|
2779 |
+
|
2780 |
+
#: views/settings/general.php:189
|
2781 |
+
msgid ""
|
2782 |
+
"This action should only be used if the packages screen is having issues or a "
|
2783 |
+
"build is stuck."
|
2784 |
+
msgstr ""
|
2785 |
+
|
2786 |
+
#: views/settings/general.php:194
|
2787 |
+
msgid "Archive scan"
|
2788 |
+
msgstr ""
|
2789 |
+
|
2790 |
+
#: views/settings/general.php:197
|
2791 |
+
msgid "Skip"
|
2792 |
+
msgstr ""
|
2793 |
+
|
2794 |
+
#: views/settings/general.php:199
|
2795 |
+
msgid ""
|
2796 |
+
"If enabled all files check on scan will be skipped before package creation. "
|
2797 |
+
"In some cases, this option can be beneficial if the scan process is having "
|
2798 |
+
"issues running or returning errors."
|
2799 |
+
msgstr ""
|
2800 |
+
|
2801 |
+
#: views/settings/general.php:205
|
2802 |
+
msgid "Other Plugins/Themes JS"
|
2803 |
+
msgstr ""
|
2804 |
+
|
2805 |
+
#: views/settings/general.php:208 views/settings/general.php:224
|
2806 |
+
msgid "Unhook them on Duplicator pages"
|
2807 |
+
msgstr ""
|
2808 |
+
|
2809 |
+
#: views/settings/general.php:211
|
2810 |
+
msgid ""
|
2811 |
+
"Check this option if other plugins/themes JavaScript files are conflicting "
|
2812 |
+
"with Duplicator."
|
2813 |
+
msgstr ""
|
2814 |
+
|
2815 |
+
#: views/settings/general.php:215 views/settings/general.php:231
|
2816 |
+
msgid ""
|
2817 |
+
"Do not modify this setting unless you know the expected result or have "
|
2818 |
+
"talked to support."
|
2819 |
+
msgstr ""
|
2820 |
+
|
2821 |
+
#: views/settings/general.php:221
|
2822 |
+
msgid "Other Plugins/Themes CSS"
|
2823 |
+
msgstr ""
|
2824 |
+
|
2825 |
+
#: views/settings/general.php:227
|
2826 |
+
msgid ""
|
2827 |
+
"Check this option if other plugins/themes CSS files are conflicting with "
|
2828 |
+
"Duplicator."
|
2829 |
+
msgstr ""
|
2830 |
+
|
2831 |
+
#: views/settings/general.php:240
|
2832 |
+
msgid "Save General Settings"
|
2833 |
+
msgstr ""
|
2834 |
+
|
2835 |
+
#: views/settings/general.php:249
|
2836 |
+
msgid "Reset Packages ?"
|
2837 |
+
msgstr ""
|
2838 |
+
|
2839 |
+
#: views/settings/general.php:250
|
2840 |
+
msgid ""
|
2841 |
+
"This will clear and reset all of the current temporary packages. Would you "
|
2842 |
+
"like to continue?"
|
2843 |
+
msgstr ""
|
2844 |
+
|
2845 |
+
#: views/settings/general.php:251
|
2846 |
+
msgid "Resetting settings, Please Wait..."
|
2847 |
+
msgstr ""
|
2848 |
+
|
2849 |
+
#: views/settings/general.php:254
|
2850 |
+
msgid "Yes"
|
2851 |
+
msgstr ""
|
2852 |
+
|
2853 |
+
#: views/settings/general.php:255
|
2854 |
+
msgid "No"
|
2855 |
+
msgstr ""
|
2856 |
+
|
2857 |
+
#: views/settings/general.php:259
|
2858 |
+
msgid "AJAX ERROR!"
|
2859 |
+
msgstr ""
|
2860 |
+
|
2861 |
+
#: views/settings/general.php:259
|
2862 |
+
msgid "Ajax request error"
|
2863 |
+
msgstr ""
|
2864 |
+
|
2865 |
+
#: views/settings/general.php:264 views/settings/general.php:317
|
2866 |
+
msgid "RESPONSE ERROR!"
|
2867 |
+
msgstr ""
|
2868 |
+
|
2869 |
+
#: views/settings/general.php:307
|
2870 |
+
msgid "Packages successfully reset"
|
2871 |
+
msgstr ""
|
2872 |
+
|
2873 |
+
#: views/settings/gopro.php:39
|
2874 |
+
msgid "The simplicity of Duplicator"
|
2875 |
+
msgstr ""
|
2876 |
+
|
2877 |
+
#: views/settings/gopro.php:40
|
2878 |
+
msgid "with power for everyone."
|
2879 |
+
msgstr ""
|
2880 |
+
|
2881 |
+
#: views/settings/gopro.php:45
|
2882 |
+
msgid "Feature"
|
2883 |
+
msgstr ""
|
2884 |
+
|
2885 |
+
#: views/settings/gopro.php:50
|
2886 |
+
msgid "Backup Files & Database"
|
2887 |
+
msgstr ""
|
2888 |
+
|
2889 |
+
#: views/settings/gopro.php:60
|
2890 |
+
msgid "Database Table Filters"
|
2891 |
+
msgstr ""
|
2892 |
+
|
2893 |
+
#: views/settings/gopro.php:65
|
2894 |
+
msgid "Migration Wizard"
|
2895 |
+
msgstr ""
|
2896 |
+
|
2897 |
+
#: views/settings/gopro.php:70
|
2898 |
+
msgid "Scheduled Backups"
|
2899 |
+
msgstr ""
|
2900 |
+
|
2901 |
+
#: views/settings/gopro.php:77
|
2902 |
+
msgid "Amazon S3 Storage"
|
2903 |
+
msgstr ""
|
2904 |
+
|
2905 |
+
#: views/settings/gopro.php:85
|
2906 |
+
msgid "Dropbox Storage "
|
2907 |
+
msgstr ""
|
2908 |
+
|
2909 |
+
#: views/settings/gopro.php:93
|
2910 |
+
msgid "Google Drive Storage"
|
2911 |
+
msgstr ""
|
2912 |
+
|
2913 |
+
#: views/settings/gopro.php:101
|
2914 |
+
msgid "Microsoft One Drive Storage"
|
2915 |
+
msgstr ""
|
2916 |
+
|
2917 |
+
#: views/settings/gopro.php:109
|
2918 |
+
msgid "Remote FTP/SFTP Storage"
|
2919 |
+
msgstr ""
|
2920 |
+
|
2921 |
+
#: views/settings/gopro.php:115
|
2922 |
+
msgid "Overwrite Live Site"
|
2923 |
+
msgstr ""
|
2924 |
+
|
2925 |
+
#: views/settings/gopro.php:117
|
2926 |
+
msgid "Overwrite Existing Site"
|
2927 |
+
msgstr ""
|
2928 |
+
|
2929 |
+
#: views/settings/gopro.php:118
|
2930 |
+
msgid "Overwrite a live site. Makes installing super-fast!"
|
2931 |
+
msgstr ""
|
2932 |
+
|
2933 |
+
#: views/settings/gopro.php:124 views/settings/gopro.php:126
|
2934 |
+
msgid "Large Site Support"
|
2935 |
+
msgstr ""
|
2936 |
+
|
2937 |
+
#: views/settings/gopro.php:127
|
2938 |
+
msgid ""
|
2939 |
+
"Advanced archive engine processes multi-gig sites - even on stubborn budget "
|
2940 |
+
"hosts!"
|
2941 |
+
msgstr ""
|
2942 |
+
|
2943 |
+
#: views/settings/gopro.php:133
|
2944 |
+
msgid "Multiple Archive Engines"
|
2945 |
+
msgstr ""
|
2946 |
+
|
2947 |
+
#: views/settings/gopro.php:138
|
2948 |
+
msgid "Server Throttling"
|
2949 |
+
msgstr ""
|
2950 |
+
|
2951 |
+
#: views/settings/gopro.php:143
|
2952 |
+
msgid "Background Processing"
|
2953 |
+
msgstr ""
|
2954 |
+
|
2955 |
+
#: views/settings/gopro.php:148
|
2956 |
+
msgid "Installer Passwords"
|
2957 |
+
msgstr ""
|
2958 |
+
|
2959 |
+
#: views/settings/gopro.php:153
|
2960 |
+
msgid " Regenerate Salts"
|
2961 |
+
msgstr ""
|
2962 |
+
|
2963 |
+
#: views/settings/gopro.php:155
|
2964 |
+
msgid "Regenerate Salts"
|
2965 |
+
msgstr ""
|
2966 |
+
|
2967 |
+
#: views/settings/gopro.php:156
|
2968 |
+
msgid ""
|
2969 |
+
"Installer contains option to regenerate salts in the wp-config.php file. "
|
2970 |
+
"This feature is only available with Freelancer, Business or Gold licenses."
|
2971 |
+
msgstr ""
|
2972 |
+
|
2973 |
+
#: views/settings/gopro.php:162 views/settings/gopro.php:164
|
2974 |
+
msgid "WP-Config Control Plus"
|
2975 |
+
msgstr ""
|
2976 |
+
|
2977 |
+
#: views/settings/gopro.php:165
|
2978 |
+
msgid "Control many wp-config.php settings right from the installer!"
|
2979 |
+
msgstr ""
|
2980 |
+
|
2981 |
+
#: views/settings/gopro.php:173
|
2982 |
+
msgid "cPanel Database API"
|
2983 |
+
msgstr ""
|
2984 |
+
|
2985 |
+
#: views/settings/gopro.php:177
|
2986 |
+
msgid ""
|
2987 |
+
"Create the database and database user directly in the installer. No need to "
|
2988 |
+
"browse to your host's cPanel application."
|
2989 |
+
msgstr ""
|
2990 |
+
|
2991 |
+
#: views/settings/gopro.php:183
|
2992 |
+
msgid "Multisite Network Migration"
|
2993 |
+
msgstr ""
|
2994 |
+
|
2995 |
+
#: views/settings/gopro.php:188
|
2996 |
+
msgid "Multisite Subsite > Standalone"
|
2997 |
+
msgstr ""
|
2998 |
+
|
2999 |
+
#: views/settings/gopro.php:190
|
3000 |
+
msgid "Multisite"
|
3001 |
+
msgstr ""
|
3002 |
+
|
3003 |
+
#: views/settings/gopro.php:191
|
3004 |
+
msgid ""
|
3005 |
+
"Install an individual subsite from a Multisite as a standalone site. This "
|
3006 |
+
"feature is only available with Business or Gold licenses."
|
3007 |
+
msgstr ""
|
3008 |
+
|
3009 |
+
#: views/settings/gopro.php:198
|
3010 |
+
msgid "Custom Search & Replace"
|
3011 |
+
msgstr ""
|
3012 |
+
|
3013 |
+
#: views/settings/gopro.php:204
|
3014 |
+
msgid "Email Alerts"
|
3015 |
+
msgstr ""
|
3016 |
+
|
3017 |
+
#: views/settings/gopro.php:210
|
3018 |
+
msgid "Manual Transfers"
|
3019 |
+
msgstr ""
|
3020 |
+
|
3021 |
+
#: views/settings/gopro.php:216
|
3022 |
+
msgid "Active Customer Support"
|
3023 |
+
msgstr ""
|
3024 |
+
|
3025 |
+
#: views/settings/gopro.php:219
|
3026 |
+
msgid ""
|
3027 |
+
"Pro users get top priority for any requests to our support desk. In most "
|
3028 |
+
"cases responses will be answered in under 24 hours."
|
3029 |
+
msgstr ""
|
3030 |
+
|
3031 |
+
#: views/settings/gopro.php:225
|
3032 |
+
msgid "Plus Many Other Features..."
|
3033 |
+
msgstr ""
|
3034 |
+
|
3035 |
+
#: views/settings/gopro.php:234
|
3036 |
+
msgid "Check It Out!"
|
3037 |
+
msgstr ""
|
3038 |
+
|
3039 |
+
#: views/settings/license.php:4
|
3040 |
+
msgid "Activation"
|
3041 |
+
msgstr ""
|
3042 |
+
|
3043 |
+
#: views/settings/license.php:9
|
3044 |
+
#, php-format
|
3045 |
+
msgid "%1$sManage Licenses%2$s"
|
3046 |
+
msgstr ""
|
3047 |
+
|
3048 |
+
#: views/settings/license.php:14
|
3049 |
+
msgid "Duplicator Free"
|
3050 |
+
msgstr ""
|
3051 |
+
|
3052 |
+
#: views/settings/license.php:16
|
3053 |
+
msgid "Basic Features"
|
3054 |
+
msgstr ""
|
3055 |
+
|
3056 |
+
#: views/settings/license.php:17
|
3057 |
+
msgid "Pro Features"
|
3058 |
+
msgstr ""
|
3059 |
+
|
3060 |
+
#: views/settings/license.php:22
|
3061 |
+
msgid "License Key"
|
3062 |
+
msgstr ""
|
3063 |
+
|
3064 |
+
#: views/settings/license.php:26
|
3065 |
+
msgid "The free version of Duplicator does not require a license key. "
|
3066 |
+
msgstr ""
|
3067 |
+
|
3068 |
+
#: views/settings/license.php:28
|
3069 |
+
msgid ""
|
3070 |
+
"Professional Users: Please note that if you have already purchased the "
|
3071 |
+
"Professional version it is a separate plugin that you download and install. "
|
3072 |
+
"You can download the Professional version from the email sent after your "
|
3073 |
+
"purchase or click on the 'Manage Licenses' link above to download the plugin "
|
3074 |
+
"from your snapcreek.com dashboard. "
|
3075 |
+
msgstr ""
|
3076 |
+
|
3077 |
+
#: views/settings/license.php:31
|
3078 |
+
msgid "If you would like to purchase the professional version you can "
|
3079 |
+
msgstr ""
|
3080 |
+
|
3081 |
+
#: views/settings/license.php:32
|
3082 |
+
msgid "get a copy here"
|
3083 |
+
msgstr ""
|
3084 |
+
|
3085 |
+
#: views/settings/packages.php:8
|
3086 |
+
msgid "Package Settings Saved"
|
3087 |
+
msgstr ""
|
3088 |
+
|
3089 |
+
#: views/settings/packages.php:74
|
3090 |
+
msgid "SQL Script"
|
3091 |
+
msgstr ""
|
3092 |
+
|
3093 |
+
#: views/settings/packages.php:78
|
3094 |
+
msgid "Mysqldump"
|
3095 |
+
msgstr ""
|
3096 |
+
|
3097 |
+
#: views/settings/packages.php:88
|
3098 |
+
msgid "PHP Code"
|
3099 |
+
msgstr ""
|
3100 |
+
|
3101 |
+
#: views/settings/packages.php:98
|
3102 |
+
msgid ""
|
3103 |
+
"This server does not support the PHP shell_exec function which is required "
|
3104 |
+
"for mysqldump to run. "
|
3105 |
+
msgstr ""
|
3106 |
+
|
3107 |
+
#: views/settings/packages.php:99
|
3108 |
+
msgid "Please contact the host or server administrator to enable this feature."
|
3109 |
+
msgstr ""
|
3110 |
+
|
3111 |
+
#: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
|
3112 |
+
msgid "Host Recommendation:"
|
3113 |
+
msgstr ""
|
3114 |
+
|
3115 |
+
#: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
|
3116 |
+
msgid ""
|
3117 |
+
"Duplicator recommends going with the high performance pro plan or better "
|
3118 |
+
"from our recommended list"
|
3119 |
+
msgstr ""
|
3120 |
+
|
3121 |
+
#: views/settings/packages.php:109
|
3122 |
+
msgid "Please visit our recommended"
|
3123 |
+
msgstr ""
|
3124 |
+
|
3125 |
+
#: views/settings/packages.php:110 views/settings/packages.php:134
|
3126 |
+
#: views/tools/diagnostics/logging.php:186
|
3127 |
+
msgid "host list"
|
3128 |
+
msgstr ""
|
3129 |
+
|
3130 |
+
#: views/settings/packages.php:111
|
3131 |
+
msgid "for reliable access to mysqldump"
|
3132 |
+
msgstr ""
|
3133 |
+
|
3134 |
+
#: views/settings/packages.php:122
|
3135 |
+
msgid "Successfully Found:"
|
3136 |
+
msgstr ""
|
3137 |
+
|
3138 |
+
#: views/settings/packages.php:129
|
3139 |
+
msgid ""
|
3140 |
+
"Mysqldump was not found at its default location or the location provided. "
|
3141 |
+
"Please enter a custom path to a valid location where mysqldump can run. If "
|
3142 |
+
"the problem persist contact your host or server administrator. "
|
3143 |
+
msgstr ""
|
3144 |
+
|
3145 |
+
#: views/settings/packages.php:133
|
3146 |
+
msgid "See the"
|
3147 |
+
msgstr ""
|
3148 |
+
|
3149 |
+
#: views/settings/packages.php:135
|
3150 |
+
msgid "for reliable access to mysqldump."
|
3151 |
+
msgstr ""
|
3152 |
+
|
3153 |
+
#: views/settings/packages.php:141
|
3154 |
+
msgid "Custom Path"
|
3155 |
+
msgstr ""
|
3156 |
+
|
3157 |
+
#: views/settings/packages.php:143
|
3158 |
+
msgid "mysqldump path:"
|
3159 |
+
msgstr ""
|
3160 |
+
|
3161 |
+
#: views/settings/packages.php:144
|
3162 |
+
msgid ""
|
3163 |
+
"Add a custom path if the path to mysqldump is not properly detected. For "
|
3164 |
+
"all paths use a forward slash as the path seperator. On Linux systems use "
|
3165 |
+
"mysqldump for Windows systems use mysqldump.exe. If the path tried does not "
|
3166 |
+
"work please contact your hosting provider for details on the correct path."
|
3167 |
+
msgstr ""
|
3168 |
+
|
3169 |
+
#: views/settings/packages.php:148
|
3170 |
+
msgid "/usr/bin/mypath/mysqldump"
|
3171 |
+
msgstr ""
|
3172 |
+
|
3173 |
+
#: views/settings/packages.php:152
|
3174 |
+
msgid ""
|
3175 |
+
"<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided "
|
3176 |
+
"is not recognized as a valid mysqldump file:<br/>"
|
3177 |
+
msgstr ""
|
3178 |
+
|
3179 |
+
#: views/settings/packages.php:170
|
3180 |
+
msgid "Single-Threaded"
|
3181 |
+
msgstr ""
|
3182 |
+
|
3183 |
+
#: views/settings/packages.php:173
|
3184 |
+
msgid "Multi-Threaded"
|
3185 |
+
msgstr ""
|
3186 |
+
|
3187 |
+
#: views/settings/packages.php:177
|
3188 |
+
msgid "PHP Code Mode:"
|
3189 |
+
msgstr ""
|
3190 |
+
|
3191 |
+
#: views/settings/packages.php:179
|
3192 |
+
msgid ""
|
3193 |
+
"Single-Threaded mode attempts to create the entire database script in one "
|
3194 |
+
"request. Multi-Threaded mode allows the database script to be chunked over "
|
3195 |
+
"multiple requests. Multi-Threaded mode is typically slower but much more "
|
3196 |
+
"reliable especially for larger databases."
|
3197 |
+
msgstr ""
|
3198 |
+
|
3199 |
+
#: views/settings/packages.php:181
|
3200 |
+
msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
|
3201 |
+
msgstr ""
|
3202 |
+
|
3203 |
+
#: views/settings/packages.php:184
|
3204 |
+
msgid "Query Limit Size"
|
3205 |
+
msgstr ""
|
3206 |
+
|
3207 |
+
#: views/settings/packages.php:194
|
3208 |
+
msgid "PHP Query Limit Size"
|
3209 |
+
msgstr ""
|
3210 |
+
|
3211 |
+
#: views/settings/packages.php:195
|
3212 |
+
msgid ""
|
3213 |
+
"A higher limit size will speed up the database build time, however it will "
|
3214 |
+
"use more memory. If your host has memory caps start off low."
|
3215 |
+
msgstr ""
|
3216 |
+
|
3217 |
+
#: views/settings/packages.php:213
|
3218 |
+
msgid "ZipArchive"
|
3219 |
+
msgstr ""
|
3220 |
+
|
3221 |
+
#: views/settings/packages.php:219
|
3222 |
+
msgid "DupArchive"
|
3223 |
+
msgstr ""
|
3224 |
+
|
3225 |
+
#: views/settings/packages.php:228
|
3226 |
+
msgid "Creates a archive format (archive.zip)."
|
3227 |
+
msgstr ""
|
3228 |
+
|
3229 |
+
#: views/settings/packages.php:229
|
3230 |
+
msgid ""
|
3231 |
+
"This option uses the internal PHP ZipArchive classes to create a Zip file."
|
3232 |
+
msgstr ""
|
3233 |
+
|
3234 |
+
#: views/settings/packages.php:238
|
3235 |
+
msgid "Creates a custom archive format (archive.daf)."
|
3236 |
+
msgstr ""
|
3237 |
+
|
3238 |
+
#: views/settings/packages.php:239
|
3239 |
+
msgid ""
|
3240 |
+
"This option is recommended for large sites or sites on constrained servers."
|
3241 |
+
msgstr ""
|
3242 |
+
|
3243 |
+
#: views/settings/packages.php:246
|
3244 |
+
msgid "Archive Flush"
|
3245 |
+
msgstr ""
|
3246 |
+
|
3247 |
+
#: views/settings/packages.php:249
|
3248 |
+
msgid "Attempt Network Keep Alive"
|
3249 |
+
msgstr ""
|
3250 |
+
|
3251 |
+
#: views/settings/packages.php:250
|
3252 |
+
msgid "enable only for large archives"
|
3253 |
+
msgstr ""
|
3254 |
+
|
3255 |
+
#: views/settings/packages.php:253
|
3256 |
+
msgid ""
|
3257 |
+
"This will attempt to keep a network connection established for large "
|
3258 |
+
"archives."
|
3259 |
+
msgstr ""
|
3260 |
+
|
3261 |
+
#: views/settings/packages.php:254
|
3262 |
+
msgid " Valid only when Archive Engine for ZipArchive is enabled."
|
3263 |
+
msgstr ""
|
3264 |
+
|
3265 |
+
#: views/settings/packages.php:261
|
3266 |
+
msgid "Visual"
|
3267 |
+
msgstr ""
|
3268 |
+
|
3269 |
+
#: views/settings/packages.php:265
|
3270 |
+
msgid "Created Format"
|
3271 |
+
msgstr ""
|
3272 |
+
|
3273 |
+
#: views/settings/packages.php:269
|
3274 |
+
msgid "By Year"
|
3275 |
+
msgstr ""
|
3276 |
+
|
3277 |
+
#: views/settings/packages.php:276
|
3278 |
+
msgid "By Month"
|
3279 |
+
msgstr ""
|
3280 |
+
|
3281 |
+
#: views/settings/packages.php:283
|
3282 |
+
msgid "By Day"
|
3283 |
+
msgstr ""
|
3284 |
+
|
3285 |
+
#: views/settings/packages.php:291
|
3286 |
+
msgid ""
|
3287 |
+
"The UTC date format shown in the 'Created' column on the Packages screen."
|
3288 |
+
msgstr ""
|
3289 |
+
|
3290 |
+
#: views/settings/packages.php:292
|
3291 |
+
msgid ""
|
3292 |
+
"To use WordPress timezone formats consider an upgrade to Duplicator Pro."
|
3293 |
+
msgstr ""
|
3294 |
+
|
3295 |
+
#: views/settings/packages.php:301
|
3296 |
+
msgid "Save Package Settings"
|
3297 |
+
msgstr ""
|
3298 |
+
|
3299 |
+
#: views/settings/schedule.php:14 views/tools/templates.php:15
|
3300 |
+
msgid "This option is available in Duplicator Pro."
|
3301 |
+
msgstr ""
|
3302 |
+
|
3303 |
+
#: views/settings/schedule.php:15
|
3304 |
+
msgid ""
|
3305 |
+
"Create robust schedules that automatically create packages while you sleep."
|
3306 |
+
msgstr ""
|
3307 |
+
|
3308 |
+
#: views/settings/schedule.php:17
|
3309 |
+
msgid "Simply choose your storage location and when you want it to run."
|
3310 |
+
msgstr ""
|
3311 |
+
|
3312 |
+
#: views/settings/storage.php:15
|
3313 |
+
msgid "Store your packages in multiple locations with Duplicator Pro"
|
3314 |
+
msgstr ""
|
3315 |
+
|
3316 |
+
#: views/settings/storage.php:20
|
3317 |
+
msgid " Dropbox"
|
3318 |
+
msgstr ""
|
3319 |
+
|
3320 |
+
#: views/settings/storage.php:28
|
3321 |
+
msgid ""
|
3322 |
+
"Set up a one-time storage location and automatically <br/> push the package "
|
3323 |
+
"to your destination."
|
3324 |
+
msgstr ""
|
3325 |
+
|
3326 |
+
#: views/tools/controller.php:22
|
3327 |
+
msgid "Diagnostics"
|
3328 |
+
msgstr ""
|
3329 |
+
|
3330 |
+
#: views/tools/controller.php:23
|
3331 |
+
msgid "Templates"
|
3332 |
+
msgstr ""
|
3333 |
+
|
3334 |
+
#: views/tools/diagnostics/inc.data.php:11
|
3335 |
+
msgid "Stored Data"
|
3336 |
+
msgstr ""
|
3337 |
+
|
3338 |
+
#: views/tools/diagnostics/inc.data.php:16
|
3339 |
+
msgid "Data Cleanup"
|
3340 |
+
msgstr ""
|
3341 |
+
|
3342 |
+
#: views/tools/diagnostics/inc.data.php:21
|
3343 |
+
msgid "Remove Installation Files"
|
3344 |
+
msgstr ""
|
3345 |
+
|
3346 |
+
#: views/tools/diagnostics/inc.data.php:25
|
3347 |
+
msgid "Removes all reserved installer files."
|
3348 |
+
msgstr ""
|
3349 |
+
|
3350 |
+
#: views/tools/diagnostics/inc.data.php:30
|
3351 |
+
msgid ""
|
3352 |
+
"Clicking on the 'Remove Installation Files' button will attempt to remove "
|
3353 |
+
"the installer files used by Duplicator. These files should not be left on "
|
3354 |
+
"production systems for security reasons. Below are the files that should be "
|
3355 |
+
"removed."
|
3356 |
+
msgstr ""
|
3357 |
+
|
3358 |
+
#: views/tools/diagnostics/inc.data.php:45
|
3359 |
+
msgid "Clear Build Cache"
|
3360 |
+
msgstr ""
|
3361 |
+
|
3362 |
+
#: views/tools/diagnostics/inc.data.php:48
|
3363 |
+
msgid "Removes all build data from:"
|
3364 |
+
msgstr ""
|
3365 |
+
|
3366 |
+
#: views/tools/diagnostics/inc.data.php:53
|
3367 |
+
msgid "Options Values"
|
3368 |
+
msgstr ""
|
3369 |
+
|
3370 |
+
#: views/tools/diagnostics/inc.data.php:87
|
3371 |
+
msgid "Delete Option?"
|
3372 |
+
msgstr ""
|
3373 |
+
|
3374 |
+
#: views/tools/diagnostics/inc.data.php:88
|
3375 |
+
msgid "Delete the option value just selected?"
|
3376 |
+
msgstr ""
|
3377 |
+
|
3378 |
+
#: views/tools/diagnostics/inc.data.php:89
|
3379 |
+
msgid "Removing Option, Please Wait..."
|
3380 |
+
msgstr ""
|
3381 |
+
|
3382 |
+
#: views/tools/diagnostics/inc.data.php:94
|
3383 |
+
msgid "Clear Build Cache?"
|
3384 |
+
msgstr ""
|
3385 |
+
|
3386 |
+
#: views/tools/diagnostics/inc.data.php:95
|
3387 |
+
msgid ""
|
3388 |
+
"This process will remove all build cache files. Be sure no packages are "
|
3389 |
+
"currently building or else they will be cancelled."
|
3390 |
+
msgstr ""
|
3391 |
+
|
3392 |
+
#: views/tools/diagnostics/inc.data.php:107
|
3393 |
+
msgid "Delete the option value"
|
3394 |
+
msgstr ""
|
3395 |
+
|
3396 |
+
#: views/tools/diagnostics/inc.phpinfo.php:17
|
3397 |
+
msgid "PHP Information"
|
3398 |
+
msgstr ""
|
3399 |
+
|
3400 |
+
#: views/tools/diagnostics/inc.settings.php:5
|
3401 |
+
#: views/tools/diagnostics/inc.settings.php:6
|
3402 |
+
msgid "unknow"
|
3403 |
+
msgstr ""
|
3404 |
+
|
3405 |
+
#: views/tools/diagnostics/inc.settings.php:23
|
3406 |
+
msgid "Server Settings"
|
3407 |
+
msgstr ""
|
3408 |
+
|
3409 |
+
#: views/tools/diagnostics/inc.settings.php:32
|
3410 |
+
msgid "Duplicator Version"
|
3411 |
+
msgstr ""
|
3412 |
+
|
3413 |
+
#: views/tools/diagnostics/inc.settings.php:39
|
3414 |
+
msgid "Operating System"
|
3415 |
+
msgstr ""
|
3416 |
+
|
3417 |
+
#: views/tools/diagnostics/inc.settings.php:43
|
3418 |
+
msgid "Timezone"
|
3419 |
+
msgstr ""
|
3420 |
+
|
3421 |
+
#: views/tools/diagnostics/inc.settings.php:47
|
3422 |
+
msgid "Server Time"
|
3423 |
+
msgstr ""
|
3424 |
+
|
3425 |
+
#: views/tools/diagnostics/inc.settings.php:59
|
3426 |
+
msgid "ABSPATH"
|
3427 |
+
msgstr ""
|
3428 |
+
|
3429 |
+
#: views/tools/diagnostics/inc.settings.php:63
|
3430 |
+
msgid "Plugins Path"
|
3431 |
+
msgstr ""
|
3432 |
+
|
3433 |
+
#: views/tools/diagnostics/inc.settings.php:67
|
3434 |
+
msgid "Loaded PHP INI"
|
3435 |
+
msgstr ""
|
3436 |
+
|
3437 |
+
#: views/tools/diagnostics/inc.settings.php:71
|
3438 |
+
msgid "Server IP"
|
3439 |
+
msgstr ""
|
3440 |
+
|
3441 |
+
#: views/tools/diagnostics/inc.settings.php:78
|
3442 |
+
msgid "Can't detect"
|
3443 |
+
msgstr ""
|
3444 |
+
|
3445 |
+
#: views/tools/diagnostics/inc.settings.php:84
|
3446 |
+
msgid "Client IP"
|
3447 |
+
msgstr ""
|
3448 |
+
|
3449 |
+
#: views/tools/diagnostics/inc.settings.php:95
|
3450 |
+
msgid "Language"
|
3451 |
+
msgstr ""
|
3452 |
+
|
3453 |
+
#: views/tools/diagnostics/inc.settings.php:99
|
3454 |
+
#: views/tools/diagnostics/inc.settings.php:191
|
3455 |
+
msgid "Charset"
|
3456 |
+
msgstr ""
|
3457 |
+
|
3458 |
+
#: views/tools/diagnostics/inc.settings.php:103
|
3459 |
+
msgid "Memory Limit "
|
3460 |
+
msgstr ""
|
3461 |
+
|
3462 |
+
#: views/tools/diagnostics/inc.settings.php:104
|
3463 |
+
msgid "Max"
|
3464 |
+
msgstr ""
|
3465 |
+
|
3466 |
+
#: views/tools/diagnostics/inc.settings.php:122
|
3467 |
+
msgid "Process"
|
3468 |
+
msgstr ""
|
3469 |
+
|
3470 |
+
#: views/tools/diagnostics/inc.settings.php:126
|
3471 |
+
msgid "Safe Mode"
|
3472 |
+
msgstr ""
|
3473 |
+
|
3474 |
+
#: views/tools/diagnostics/inc.settings.php:130
|
3475 |
+
msgid "On"
|
3476 |
+
msgstr ""
|
3477 |
+
|
3478 |
+
#: views/tools/diagnostics/inc.settings.php:130
|
3479 |
+
msgid "Off"
|
3480 |
+
msgstr ""
|
3481 |
+
|
3482 |
+
#: views/tools/diagnostics/inc.settings.php:135
|
3483 |
+
msgid "Memory Limit"
|
3484 |
+
msgstr ""
|
3485 |
+
|
3486 |
+
#: views/tools/diagnostics/inc.settings.php:139
|
3487 |
+
msgid "Memory In Use"
|
3488 |
+
msgstr ""
|
3489 |
+
|
3490 |
+
#: views/tools/diagnostics/inc.settings.php:143
|
3491 |
+
#: views/tools/diagnostics/inc.settings.php:152
|
3492 |
+
msgid "Max Execution Time"
|
3493 |
+
msgstr ""
|
3494 |
+
|
3495 |
+
#: views/tools/diagnostics/inc.settings.php:153
|
3496 |
+
msgid ""
|
3497 |
+
"If the value shows dynamic then this means its possible for PHP to run "
|
3498 |
+
"longer than the default. If the value is fixed then PHP will not be allowed "
|
3499 |
+
"to run longer than the default."
|
3500 |
+
msgstr ""
|
3501 |
+
|
3502 |
+
#: views/tools/diagnostics/inc.settings.php:158
|
3503 |
+
msgid "Shell Exec"
|
3504 |
+
msgstr ""
|
3505 |
+
|
3506 |
+
#: views/tools/diagnostics/inc.settings.php:159
|
3507 |
+
#: views/tools/diagnostics/inc.settings.php:163
|
3508 |
+
msgid "Is Supported"
|
3509 |
+
msgstr ""
|
3510 |
+
|
3511 |
+
#: views/tools/diagnostics/inc.settings.php:159
|
3512 |
+
#: views/tools/diagnostics/inc.settings.php:163
|
3513 |
+
msgid "Not Supported"
|
3514 |
+
msgstr ""
|
3515 |
+
|
3516 |
+
#: views/tools/diagnostics/inc.settings.php:162
|
3517 |
+
msgid "Shell Exec Zip"
|
3518 |
+
msgstr ""
|
3519 |
+
|
3520 |
+
#: views/tools/diagnostics/inc.settings.php:166
|
3521 |
+
msgid "Suhosin Extension"
|
3522 |
+
msgstr ""
|
3523 |
+
|
3524 |
+
#: views/tools/diagnostics/inc.settings.php:170
|
3525 |
+
msgid "Architecture "
|
3526 |
+
msgstr ""
|
3527 |
+
|
3528 |
+
#: views/tools/diagnostics/inc.settings.php:176
|
3529 |
+
msgid "Error Log File "
|
3530 |
+
msgstr ""
|
3531 |
+
|
3532 |
+
#: views/tools/diagnostics/inc.settings.php:187
|
3533 |
+
msgid "Comments"
|
3534 |
+
msgstr ""
|
3535 |
+
|
3536 |
+
#: views/tools/diagnostics/inc.settings.php:195
|
3537 |
+
msgid "Wait Timeout"
|
3538 |
+
msgstr ""
|
3539 |
+
|
3540 |
+
#: views/tools/diagnostics/inc.settings.php:199
|
3541 |
+
msgid "Max Allowed Packets"
|
3542 |
+
msgstr ""
|
3543 |
+
|
3544 |
+
#: views/tools/diagnostics/inc.settings.php:203
|
3545 |
+
msgid "msyqldump Path"
|
3546 |
+
msgstr ""
|
3547 |
+
|
3548 |
+
#: views/tools/diagnostics/inc.settings.php:207
|
3549 |
+
msgid "Server Disk"
|
3550 |
+
msgstr ""
|
3551 |
+
|
3552 |
+
#: views/tools/diagnostics/inc.settings.php:210
|
3553 |
+
msgid "Free space"
|
3554 |
+
msgstr ""
|
3555 |
+
|
3556 |
+
#: views/tools/diagnostics/inc.settings.php:213
|
3557 |
+
msgid "Note: This value is the physical servers hard-drive allocation."
|
3558 |
+
msgstr ""
|
3559 |
+
|
3560 |
+
#: views/tools/diagnostics/inc.settings.php:214
|
3561 |
+
msgid ""
|
3562 |
+
"On shared hosts check your control panel for the 'TRUE' disk space quota "
|
3563 |
+
"value."
|
3564 |
+
msgstr ""
|
3565 |
+
|
3566 |
+
#: views/tools/diagnostics/inc.validator.php:16
|
3567 |
+
msgid "Run Validator"
|
3568 |
+
msgstr ""
|
3569 |
+
|
3570 |
+
#: views/tools/diagnostics/inc.validator.php:17
|
3571 |
+
msgid ""
|
3572 |
+
"This will run the scan validation check. This may take several minutes. Do "
|
3573 |
+
"you want to Continue?"
|
3574 |
+
msgstr ""
|
3575 |
+
|
3576 |
+
#: views/tools/diagnostics/inc.validator.php:28
|
3577 |
+
msgid "Scan Validator"
|
3578 |
+
msgstr ""
|
3579 |
+
|
3580 |
+
#: views/tools/diagnostics/inc.validator.php:33
|
3581 |
+
msgid ""
|
3582 |
+
"This utility will help to find unreadable files and sys-links in your "
|
3583 |
+
"environment that can lead to issues during the scan process. "
|
3584 |
+
msgstr ""
|
3585 |
+
|
3586 |
+
#: views/tools/diagnostics/inc.validator.php:34
|
3587 |
+
msgid ""
|
3588 |
+
"The utility will also shows how many files and directories you have in your "
|
3589 |
+
"system. This process may take several minutes to run. "
|
3590 |
+
msgstr ""
|
3591 |
+
|
3592 |
+
#: views/tools/diagnostics/inc.validator.php:35
|
3593 |
+
msgid ""
|
3594 |
+
"If there is a recursive loop on your system then the process has a built in "
|
3595 |
+
"check to stop after a large set of files and directories have been scanned. "
|
3596 |
+
msgstr ""
|
3597 |
+
|
3598 |
+
#: views/tools/diagnostics/inc.validator.php:36
|
3599 |
+
msgid ""
|
3600 |
+
"A message will show indicated that that a scan depth has been reached. If "
|
3601 |
+
"you have issues with the package scanner (step 2) during the build process "
|
3602 |
+
"then try to add The paths below to your file filters to allow the scanner to "
|
3603 |
+
"finish."
|
3604 |
+
msgstr ""
|
3605 |
+
|
3606 |
+
#: views/tools/diagnostics/inc.validator.php:43
|
3607 |
+
#: views/tools/diagnostics/inc.validator.php:153
|
3608 |
+
msgid "Run Scan Integrity Validation"
|
3609 |
+
msgstr ""
|
3610 |
+
|
3611 |
+
#: views/tools/diagnostics/inc.validator.php:77
|
3612 |
+
msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
|
3613 |
+
msgstr ""
|
3614 |
+
|
3615 |
+
#: views/tools/diagnostics/inc.validator.php:122
|
3616 |
+
msgid "Scanning Environment... This may take a few minutes."
|
3617 |
+
msgstr ""
|
3618 |
+
|
3619 |
+
#: views/tools/diagnostics/information.php:25
|
3620 |
+
msgid "File Found: Unable to remove"
|
3621 |
+
msgstr ""
|
3622 |
+
|
3623 |
+
#: views/tools/diagnostics/information.php:26
|
3624 |
+
msgid "Removed"
|
3625 |
+
msgstr ""
|
3626 |
+
|
3627 |
+
#: views/tools/diagnostics/information.php:44
|
3628 |
+
msgid "Installer file cleanup ran!"
|
3629 |
+
msgstr ""
|
3630 |
+
|
3631 |
+
#: views/tools/diagnostics/information.php:48
|
3632 |
+
msgid "Build cache removed."
|
3633 |
+
msgstr ""
|
3634 |
+
|
3635 |
+
#: views/tools/diagnostics/information.php:125
|
3636 |
+
msgid "No Duplicator installer files found on this WordPress Site."
|
3637 |
+
msgstr ""
|
3638 |
+
|
3639 |
+
#: views/tools/diagnostics/information.php:132
|
3640 |
+
msgid "Security Notes"
|
3641 |
+
msgstr ""
|
3642 |
+
|
3643 |
+
#: views/tools/diagnostics/information.php:133
|
3644 |
+
msgid ""
|
3645 |
+
"If the installer files do not successfully get removed with this action, "
|
3646 |
+
"then they WILL need to be removed manually through your hosts control panel "
|
3647 |
+
"or FTP. Please remove all installer files to avoid any security issues on "
|
3648 |
+
"this site. For more details please visit the FAQ link <a href=\"https://"
|
3649 |
+
"snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target="
|
3650 |
+
"\"_blank\">Which files need to be removed after an install?</a>"
|
3651 |
+
msgstr ""
|
3652 |
+
|
3653 |
+
#: views/tools/diagnostics/information.php:140
|
3654 |
+
msgid "Some of the installer files did not get removed, "
|
3655 |
+
msgstr ""
|
3656 |
+
|
3657 |
+
#: views/tools/diagnostics/information.php:142
|
3658 |
+
msgid "please retry the installer cleanup process"
|
3659 |
+
msgstr ""
|
3660 |
+
|
3661 |
+
#: views/tools/diagnostics/information.php:144
|
3662 |
+
msgid " If this process continues please see the previous FAQ link."
|
3663 |
+
msgstr ""
|
3664 |
+
|
3665 |
+
#: views/tools/diagnostics/information.php:148
|
3666 |
+
msgid "Help Support Duplicator"
|
3667 |
+
msgstr ""
|
3668 |
+
|
3669 |
+
#: views/tools/diagnostics/information.php:149
|
3670 |
+
msgid ""
|
3671 |
+
"The Duplicator team has worked many years to make moving a WordPress site a "
|
3672 |
+
"much easier process. Show your support with a <a href=\"https://wordpress."
|
3673 |
+
"org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star "
|
3674 |
+
"review</a>! We would be thrilled if you could!"
|
3675 |
+
msgstr ""
|
3676 |
+
|
3677 |
+
#: views/tools/diagnostics/information.php:159
|
3678 |
+
msgid "Please test the entire site to validate the migration process!"
|
3679 |
+
msgstr ""
|
3680 |
+
|
3681 |
+
#: views/tools/diagnostics/information.php:165
|
3682 |
+
msgid ""
|
3683 |
+
"NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable "
|
3684 |
+
"all your plugins."
|
3685 |
+
msgstr ""
|
3686 |
+
|
3687 |
+
#: views/tools/diagnostics/information.php:170
|
3688 |
+
msgid ""
|
3689 |
+
"NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-"
|
3690 |
+
"enable all your plugins."
|
3691 |
+
msgstr ""
|
3692 |
+
|
3693 |
+
#: views/tools/diagnostics/information.php:212
|
3694 |
+
msgid "Plugin settings reset."
|
3695 |
+
msgstr ""
|
3696 |
+
|
3697 |
+
#: views/tools/diagnostics/information.php:213
|
3698 |
+
msgid "View state settings reset."
|
3699 |
+
msgstr ""
|
3700 |
+
|
3701 |
+
#: views/tools/diagnostics/information.php:214
|
3702 |
+
msgid "Active package settings reset."
|
3703 |
+
msgstr ""
|
3704 |
+
|
3705 |
+
#: views/tools/diagnostics/logging.php:166
|
3706 |
+
msgid "Log file not found or unreadable"
|
3707 |
+
msgstr ""
|
3708 |
+
|
3709 |
+
#: views/tools/diagnostics/logging.php:167
|
3710 |
+
msgid ""
|
3711 |
+
"Try to create a package, since no log files were found in the snapshots "
|
3712 |
+
"directory with the extension *.log"
|
3713 |
+
msgstr ""
|
3714 |
+
|
3715 |
+
#: views/tools/diagnostics/logging.php:168
|
3716 |
+
msgid "Reasons for log file not showing"
|
3717 |
+
msgstr ""
|
3718 |
+
|
3719 |
+
#: views/tools/diagnostics/logging.php:169
|
3720 |
+
msgid "The web server does not support returning .log file extentions"
|
3721 |
+
msgstr ""
|
3722 |
+
|
3723 |
+
#: views/tools/diagnostics/logging.php:170
|
3724 |
+
msgid ""
|
3725 |
+
"The snapshots directory does not have the correct permissions to write "
|
3726 |
+
"files. Try setting the permissions to 755"
|
3727 |
+
msgstr ""
|
3728 |
+
|
3729 |
+
#: views/tools/diagnostics/logging.php:171
|
3730 |
+
msgid ""
|
3731 |
+
"The process that PHP runs under does not have enough permissions to create "
|
3732 |
+
"files. Please contact your hosting provider for more details"
|
3733 |
+
msgstr ""
|
3734 |
+
|
3735 |
+
#: views/tools/diagnostics/logging.php:185
|
3736 |
+
msgid "Consider our recommended"
|
3737 |
+
msgstr ""
|
3738 |
+
|
3739 |
+
#: views/tools/diagnostics/logging.php:187
|
3740 |
+
msgid "if you’re unhappy with your current provider"
|
3741 |
+
msgstr ""
|
3742 |
+
|
3743 |
+
#: views/tools/diagnostics/logging.php:191
|
3744 |
+
#: views/tools/diagnostics/logging.php:196
|
3745 |
+
msgid "Options"
|
3746 |
+
msgstr ""
|
3747 |
+
|
3748 |
+
#: views/tools/diagnostics/logging.php:198
|
3749 |
+
msgid "Refresh"
|
3750 |
+
msgstr ""
|
3751 |
+
|
3752 |
+
#: views/tools/diagnostics/logging.php:201
|
3753 |
+
msgid "Auto Refresh"
|
3754 |
+
msgstr ""
|
3755 |
+
|
3756 |
+
#: views/tools/diagnostics/logging.php:207
|
3757 |
+
msgid "Package Logs"
|
3758 |
+
msgstr ""
|
3759 |
+
|
3760 |
+
#: views/tools/diagnostics/logging.php:208
|
3761 |
+
msgid "Top 20"
|
3762 |
+
msgstr ""
|
3763 |
+
|
3764 |
+
#: views/tools/diagnostics/main.php:43
|
3765 |
+
msgid "Information"
|
3766 |
+
msgstr ""
|
3767 |
+
|
3768 |
+
#: views/tools/diagnostics/main.php:44
|
3769 |
+
msgid "Logs"
|
3770 |
+
msgstr ""
|
3771 |
+
|
3772 |
+
#: views/tools/diagnostics/support.php:32
|
3773 |
+
msgid ""
|
3774 |
+
"Migrating WordPress is a complex process and the logic to make all the magic "
|
3775 |
+
"happen smoothly may not work quickly with every site. With over 30,000 "
|
3776 |
+
"plugins and a very complex server eco-system some migrations may run into "
|
3777 |
+
"issues. This is why the Duplicator includes a detailed knowledgebase that "
|
3778 |
+
"can help with many common issues. Resources to additional support, approved "
|
3779 |
+
"hosting, and alternatives to fit your needs can be found below."
|
3780 |
+
msgstr ""
|
3781 |
+
|
3782 |
+
#: views/tools/diagnostics/support.php:44
|
3783 |
+
msgid "Knowledgebase"
|
3784 |
+
msgstr ""
|
3785 |
+
|
3786 |
+
#: views/tools/diagnostics/support.php:47
|
3787 |
+
msgid "Complete Online Documentation"
|
3788 |
+
msgstr ""
|
3789 |
+
|
3790 |
+
#: views/tools/diagnostics/support.php:49
|
3791 |
+
msgid "Choose A Section"
|
3792 |
+
msgstr ""
|
3793 |
+
|
3794 |
+
#: views/tools/diagnostics/support.php:50
|
3795 |
+
msgid "Quick Start"
|
3796 |
+
msgstr ""
|
3797 |
+
|
3798 |
+
#: views/tools/diagnostics/support.php:52
|
3799 |
+
msgid "User Guide"
|
3800 |
+
msgstr ""
|
3801 |
+
|
3802 |
+
#: views/tools/diagnostics/support.php:54
|
3803 |
+
msgid "FAQs"
|
3804 |
+
msgstr ""
|
3805 |
+
|
3806 |
+
#: views/tools/diagnostics/support.php:56
|
3807 |
+
msgid "Change Log"
|
3808 |
+
msgstr ""
|
3809 |
+
|
3810 |
+
#: views/tools/diagnostics/support.php:66
|
3811 |
+
msgid "Online Support"
|
3812 |
+
msgstr ""
|
3813 |
+
|
3814 |
+
#: views/tools/diagnostics/support.php:69
|
3815 |
+
msgid "Get Help From IT Professionals"
|
3816 |
+
msgstr ""
|
3817 |
+
|
3818 |
+
#: views/tools/diagnostics/support.php:73
|
3819 |
+
msgid "Get Support!"
|
3820 |
+
msgstr ""
|
3821 |
+
|
3822 |
+
#: views/tools/diagnostics/support.php:87
|
3823 |
+
msgid "Approved Hosting"
|
3824 |
+
msgstr ""
|
3825 |
+
|
3826 |
+
#: views/tools/diagnostics/support.php:90
|
3827 |
+
msgid "Servers That Work With Duplicator"
|
3828 |
+
msgstr ""
|
3829 |
+
|
3830 |
+
#: views/tools/diagnostics/support.php:93
|
3831 |
+
msgid "Trusted Providers!"
|
3832 |
+
msgstr ""
|
3833 |
+
|
3834 |
+
#: views/tools/diagnostics/support.php:104
|
3835 |
+
msgid "Alternatives"
|
3836 |
+
msgstr ""
|
3837 |
+
|
3838 |
+
#: views/tools/diagnostics/support.php:107
|
3839 |
+
msgid "Other Commercial Resources"
|
3840 |
+
msgstr ""
|
3841 |
+
|
3842 |
+
#: views/tools/diagnostics/support.php:110
|
3843 |
+
msgid "Pro Solutions!"
|
3844 |
+
msgstr ""
|
3845 |
+
|
3846 |
+
#: views/tools/templates.php:16
|
3847 |
+
msgid ""
|
3848 |
+
"Templates allow you to customize what you want to include in your site and "
|
3849 |
+
"store it as a re-usable profile."
|
3850 |
+
msgstr ""
|
3851 |
+
|
3852 |
+
#: views/tools/templates.php:18
|
3853 |
+
msgid ""
|
3854 |
+
"Save time and create a template that can be applied to a schedule or a "
|
3855 |
+
"custom package setup."
|
3856 |
+
msgstr ""
|
languages/duplicator.pot
CHANGED
@@ -1,3408 +1,3408 @@
|
|
1 |
-
# Copyright (C) 2019 Snap Creek
|
2 |
-
# This file is distributed under the same license as the Duplicator plugin.
|
3 |
-
#, fuzzy
|
4 |
-
msgid ""
|
5 |
-
msgstr ""
|
6 |
-
"Project-Id-Version: Duplicator 1.3.7\n"
|
7 |
-
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
|
8 |
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
-
"Language-Team: LANGUAGE <LL@li.org>\n"
|
10 |
-
"MIME-Version: 1.0\n"
|
11 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
-
"Content-Transfer-Encoding: 8bit\n"
|
13 |
-
"POT-Creation-Date: 2019-09-02 12:30+0530\n"
|
14 |
-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
15 |
-
"X-Generator: Poedit 2.2.3\n"
|
16 |
-
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;esc_attr__\n"
|
17 |
-
"X-Poedit-Basepath: ..\n"
|
18 |
-
"X-Poedit-SearchPath-0: .\n"
|
19 |
-
|
20 |
-
#: classes/class.logging.php:141
|
21 |
-
msgid "No Log"
|
22 |
-
msgstr ""
|
23 |
-
|
24 |
-
#: classes/class.server.php:207
|
25 |
-
msgid "(directory)"
|
26 |
-
msgstr ""
|
27 |
-
|
28 |
-
#: classes/package/class.pack.database.php:663
|
29 |
-
msgid "Please contact your DataBase administrator to fix the error."
|
30 |
-
msgstr ""
|
31 |
-
|
32 |
-
#: classes/package/class.pack.installer.php:90
|
33 |
-
msgid "Error reading DupArchive mini expander"
|
34 |
-
msgstr ""
|
35 |
-
|
36 |
-
#: classes/package/class.pack.installer.php:103
|
37 |
-
msgid "Error writing installer contents"
|
38 |
-
msgstr ""
|
39 |
-
|
40 |
-
#: classes/package/class.pack.php:309
|
41 |
-
msgid "Package name can't be empty"
|
42 |
-
msgstr ""
|
43 |
-
|
44 |
-
#: classes/package/class.pack.php:315
|
45 |
-
#, php-format
|
46 |
-
msgid "Directories: <b>%1$s</b> isn't a valid path"
|
47 |
-
msgstr ""
|
48 |
-
|
49 |
-
#: classes/package/class.pack.php:321
|
50 |
-
#, php-format
|
51 |
-
msgid "File extension: <b>%1$s</b> isn't a valid extension"
|
52 |
-
msgstr ""
|
53 |
-
|
54 |
-
#: classes/package/class.pack.php:327
|
55 |
-
#, php-format
|
56 |
-
msgid "Files: <b>%1$s</b> isn't a valid file name"
|
57 |
-
msgstr ""
|
58 |
-
|
59 |
-
#: classes/package/class.pack.php:335
|
60 |
-
#, php-format
|
61 |
-
msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
|
62 |
-
msgstr ""
|
63 |
-
|
64 |
-
#: classes/package/class.pack.php:346
|
65 |
-
#, php-format
|
66 |
-
msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
|
67 |
-
msgstr ""
|
68 |
-
|
69 |
-
#: classes/package/class.pack.php:845
|
70 |
-
#, php-format
|
71 |
-
msgid "Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
|
72 |
-
msgstr ""
|
73 |
-
|
74 |
-
#: classes/package/class.pack.php:868
|
75 |
-
#, php-format
|
76 |
-
msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
|
77 |
-
msgstr ""
|
78 |
-
|
79 |
-
#: classes/package/class.pack.php:869
|
80 |
-
#, php-format
|
81 |
-
msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
|
82 |
-
msgstr ""
|
83 |
-
|
84 |
-
#: classes/package/class.pack.php:913
|
85 |
-
#, php-format
|
86 |
-
msgid "ERROR: Cannot open created archive. Error code = %1$s"
|
87 |
-
msgstr ""
|
88 |
-
|
89 |
-
#: classes/package/class.pack.php:918
|
90 |
-
msgid "ERROR: Archive is not valid zip archive."
|
91 |
-
msgstr ""
|
92 |
-
|
93 |
-
#: classes/package/class.pack.php:922
|
94 |
-
msgid "ERROR: Archive doesn't pass consistency check."
|
95 |
-
msgstr ""
|
96 |
-
|
97 |
-
#: classes/package/class.pack.php:927
|
98 |
-
msgid "ERROR: Archive checksum is bad."
|
99 |
-
msgstr ""
|
100 |
-
|
101 |
-
#: classes/package/class.pack.php:938
|
102 |
-
msgid "ARCHIVE CONSISTENCY TEST: Pass"
|
103 |
-
msgstr ""
|
104 |
-
|
105 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:44
|
106 |
-
msgid "Package build appears stuck so marking package as failed. Is the Max Worker Time set too high?."
|
107 |
-
msgstr ""
|
108 |
-
|
109 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:45
|
110 |
-
msgid "Build Failure"
|
111 |
-
msgstr ""
|
112 |
-
|
113 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:83
|
114 |
-
msgid "Click on \"Resolve This\" button to fix the JSON settings."
|
115 |
-
msgstr ""
|
116 |
-
|
117 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:95
|
118 |
-
#, php-format
|
119 |
-
msgid "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
|
120 |
-
msgstr ""
|
121 |
-
|
122 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:214
|
123 |
-
msgid "Problem adding items to archive."
|
124 |
-
msgstr ""
|
125 |
-
|
126 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:216
|
127 |
-
msgid "Problems adding items to archive."
|
128 |
-
msgstr ""
|
129 |
-
|
130 |
-
#: classes/package/duparchive/class.pack.archive.duparchive.php:314
|
131 |
-
msgid "Critical failure present in validation"
|
132 |
-
msgstr ""
|
133 |
-
|
134 |
-
#: classes/ui/class.ui.dialog.php:95
|
135 |
-
msgid "Processing please wait..."
|
136 |
-
msgstr ""
|
137 |
-
|
138 |
-
#: classes/ui/class.ui.dialog.php:98
|
139 |
-
msgid "OK"
|
140 |
-
msgstr ""
|
141 |
-
|
142 |
-
#: classes/ui/class.ui.dialog.php:99 deactivation.php:135
|
143 |
-
msgid "Cancel"
|
144 |
-
msgstr ""
|
145 |
-
|
146 |
-
#: classes/ui/class.ui.notice.php:47
|
147 |
-
msgid "Safe Mode:"
|
148 |
-
msgstr ""
|
149 |
-
|
150 |
-
#: classes/ui/class.ui.notice.php:48
|
151 |
-
msgid "During the install safe mode was enabled deactivating all plugins.<br/> Please be sure to "
|
152 |
-
msgstr ""
|
153 |
-
|
154 |
-
#: classes/ui/class.ui.notice.php:49
|
155 |
-
msgid "re-activate the plugins"
|
156 |
-
msgstr ""
|
157 |
-
|
158 |
-
#: classes/ui/class.ui.notice.php:56
|
159 |
-
#: views/tools/diagnostics/information.php:158
|
160 |
-
msgid "This site has been successfully migrated!"
|
161 |
-
msgstr ""
|
162 |
-
|
163 |
-
#: classes/ui/class.ui.notice.php:57
|
164 |
-
msgid "Final step(s):"
|
165 |
-
msgstr ""
|
166 |
-
|
167 |
-
#: classes/ui/class.ui.notice.php:58
|
168 |
-
msgid "This message will be removed after all installer files are removed. Installer files must be removed to maintain a secure site. Click the link above or button below to remove all installer files and complete the migration."
|
169 |
-
msgstr ""
|
170 |
-
|
171 |
-
#: classes/ui/class.ui.notice.php:62
|
172 |
-
msgid "Remove Installation Files Now!"
|
173 |
-
msgstr ""
|
174 |
-
|
175 |
-
#: classes/ui/class.ui.notice.php:63
|
176 |
-
msgid "Optionally, Review Duplicator at WordPress.org..."
|
177 |
-
msgstr ""
|
178 |
-
|
179 |
-
#: classes/ui/class.ui.notice.php:69
|
180 |
-
msgid "Migration Almost Complete!"
|
181 |
-
msgstr ""
|
182 |
-
|
183 |
-
#: classes/ui/class.ui.notice.php:70
|
184 |
-
msgid "Reserved Duplicator installation files have been detected in the root directory. Please delete these installation files to avoid security issues. <br/> Go to:Duplicator > Tools > Information >Stored Data and click the \"Remove Installation Files\" button"
|
185 |
-
msgstr ""
|
186 |
-
|
187 |
-
#: classes/ui/class.ui.notice.php:76
|
188 |
-
msgid "Take me there now!"
|
189 |
-
msgstr ""
|
190 |
-
|
191 |
-
#: classes/ui/class.ui.notice.php:91
|
192 |
-
msgid "Redirecting Please Wait..."
|
193 |
-
msgstr ""
|
194 |
-
|
195 |
-
#: classes/ui/class.ui.notice.php:94
|
196 |
-
msgid "Invalid token permissions to perform this request."
|
197 |
-
msgstr ""
|
198 |
-
|
199 |
-
#: classes/ui/class.ui.notice.php:117
|
200 |
-
#, php-format
|
201 |
-
msgid "Activate %s"
|
202 |
-
msgstr ""
|
203 |
-
|
204 |
-
#: classes/ui/class.ui.screen.base.php:44
|
205 |
-
msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
|
206 |
-
msgstr ""
|
207 |
-
|
208 |
-
#: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
|
209 |
-
#: views/tools/diagnostics/main.php:45
|
210 |
-
msgid "Support"
|
211 |
-
msgstr ""
|
212 |
-
|
213 |
-
#: classes/ui/class.ui.screen.base.php:65
|
214 |
-
msgid "Resources"
|
215 |
-
msgstr ""
|
216 |
-
|
217 |
-
#: classes/ui/class.ui.screen.base.php:66
|
218 |
-
msgid "Knowledge Base"
|
219 |
-
msgstr ""
|
220 |
-
|
221 |
-
#: classes/ui/class.ui.screen.base.php:67
|
222 |
-
msgid "Full User Guide"
|
223 |
-
msgstr ""
|
224 |
-
|
225 |
-
#: classes/ui/class.ui.screen.base.php:68
|
226 |
-
msgid "Technical FAQs"
|
227 |
-
msgstr ""
|
228 |
-
|
229 |
-
#: classes/ui/class.ui.screen.base.php:69
|
230 |
-
msgid "Package Settings"
|
231 |
-
msgstr ""
|
232 |
-
|
233 |
-
#: classes/utilities/class.u.php:64
|
234 |
-
msgid "32-bit"
|
235 |
-
msgstr ""
|
236 |
-
|
237 |
-
#: classes/utilities/class.u.php:67
|
238 |
-
msgid "64-bit"
|
239 |
-
msgstr ""
|
240 |
-
|
241 |
-
#: classes/utilities/class.u.php:70
|
242 |
-
msgid "Unknown"
|
243 |
-
msgstr ""
|
244 |
-
|
245 |
-
#: classes/utilities/class.u.php:496
|
246 |
-
msgid "You do not have sufficient permissions to access this page."
|
247 |
-
msgstr ""
|
248 |
-
|
249 |
-
#: ctrls/ctrl.package.php:175
|
250 |
-
msgid "Error building DupArchive package"
|
251 |
-
msgstr ""
|
252 |
-
|
253 |
-
#: ctrls/ctrl.package.php:303
|
254 |
-
msgid "An unathorized security request was made to this page. Please try again!"
|
255 |
-
msgstr ""
|
256 |
-
|
257 |
-
#: ctrls/ctrl.package.php:325
|
258 |
-
msgid "Active package object error"
|
259 |
-
msgstr ""
|
260 |
-
|
261 |
-
#: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
|
262 |
-
msgid "Couldn't find a local copy of the file requested."
|
263 |
-
msgstr ""
|
264 |
-
|
265 |
-
#: deactivation.php:48
|
266 |
-
msgid "Need help? We are ready to answer your questions."
|
267 |
-
msgstr ""
|
268 |
-
|
269 |
-
#: deactivation.php:48
|
270 |
-
msgid "Contact Support"
|
271 |
-
msgstr ""
|
272 |
-
|
273 |
-
#: deactivation.php:53
|
274 |
-
msgid "It's not working on my server."
|
275 |
-
msgstr ""
|
276 |
-
|
277 |
-
#: deactivation.php:55
|
278 |
-
msgid "Kindly share what didn't work so we can fix it in future updates..."
|
279 |
-
msgstr ""
|
280 |
-
|
281 |
-
#: deactivation.php:60
|
282 |
-
msgid "It's too confusing to understand."
|
283 |
-
msgstr ""
|
284 |
-
|
285 |
-
#: deactivation.php:62
|
286 |
-
msgid "Please tell us what is not clear so that we can improve it."
|
287 |
-
msgstr ""
|
288 |
-
|
289 |
-
#: deactivation.php:67
|
290 |
-
msgid "I found a different plugin that I like better."
|
291 |
-
msgstr ""
|
292 |
-
|
293 |
-
#: deactivation.php:69
|
294 |
-
msgid "What's the plugin name?"
|
295 |
-
msgstr ""
|
296 |
-
|
297 |
-
#: deactivation.php:73
|
298 |
-
msgid "It does not do what I need."
|
299 |
-
msgstr ""
|
300 |
-
|
301 |
-
#: deactivation.php:75
|
302 |
-
msgid "What does it need to do?"
|
303 |
-
msgstr ""
|
304 |
-
|
305 |
-
#: deactivation.php:79
|
306 |
-
msgid "It's a temporary deactivation, I use the plugin all the time."
|
307 |
-
msgstr ""
|
308 |
-
|
309 |
-
#: deactivation.php:85
|
310 |
-
#, php-format
|
311 |
-
msgid "I'm switching over to the %s"
|
312 |
-
msgstr ""
|
313 |
-
|
314 |
-
#: deactivation.php:85
|
315 |
-
msgid "Pro version"
|
316 |
-
msgstr ""
|
317 |
-
|
318 |
-
#: deactivation.php:128
|
319 |
-
msgid "Quick Feedback"
|
320 |
-
msgstr ""
|
321 |
-
|
322 |
-
#: deactivation.php:129
|
323 |
-
msgid "If you have a moment, please let us know why you are deactivating"
|
324 |
-
msgstr ""
|
325 |
-
|
326 |
-
#: deactivation.php:136 deactivation.php:344
|
327 |
-
msgid "Skip & Deactivate"
|
328 |
-
msgstr ""
|
329 |
-
|
330 |
-
#: deactivation.php:137
|
331 |
-
msgid "Send & Deactivate"
|
332 |
-
msgstr ""
|
333 |
-
|
334 |
-
#: deactivation.php:140
|
335 |
-
msgid "Your response is sent anonymously."
|
336 |
-
msgstr ""
|
337 |
-
|
338 |
-
#: deactivation.php:235 deactivation.php:236
|
339 |
-
msgid "Processing"
|
340 |
-
msgstr ""
|
341 |
-
|
342 |
-
#: deactivation.php:283
|
343 |
-
msgid "Please tell us the reason so we can improve it."
|
344 |
-
msgstr ""
|
345 |
-
|
346 |
-
#: duplicator.php:398 views/packages/details/controller.php:48
|
347 |
-
#: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
|
348 |
-
#: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
|
349 |
-
#: views/settings/controller.php:23
|
350 |
-
msgid "Packages"
|
351 |
-
msgstr ""
|
352 |
-
|
353 |
-
#: duplicator.php:404 views/tools/controller.php:19
|
354 |
-
msgid "Tools"
|
355 |
-
msgstr ""
|
356 |
-
|
357 |
-
#: duplicator.php:409 views/packages/main/packages.php:85
|
358 |
-
#: views/settings/controller.php:19 views/settings/general.php:179
|
359 |
-
msgid "Settings"
|
360 |
-
msgstr ""
|
361 |
-
|
362 |
-
#: duplicator.php:413
|
363 |
-
msgid "Go Pro!"
|
364 |
-
msgstr ""
|
365 |
-
|
366 |
-
#: duplicator.php:481 views/settings/license.php:8
|
367 |
-
msgid "Manage"
|
368 |
-
msgstr ""
|
369 |
-
|
370 |
-
#: duplicator.php:498 views/packages/main/packages.php:82
|
371 |
-
msgid "Get Help"
|
372 |
-
msgstr ""
|
373 |
-
|
374 |
-
#: duplicator.php:498
|
375 |
-
msgid "Go Pro"
|
376 |
-
msgstr ""
|
377 |
-
|
378 |
-
#: views/packages/details/controller.php:13
|
379 |
-
msgid "package log"
|
380 |
-
msgstr ""
|
381 |
-
|
382 |
-
#: views/packages/details/controller.php:14
|
383 |
-
msgid "FAQ"
|
384 |
-
msgstr ""
|
385 |
-
|
386 |
-
#: views/packages/details/controller.php:15
|
387 |
-
msgid "resources page"
|
388 |
-
msgstr ""
|
389 |
-
|
390 |
-
#: views/packages/details/controller.php:34
|
391 |
-
msgid "This package contains an error. Please review the "
|
392 |
-
msgstr ""
|
393 |
-
|
394 |
-
#: views/packages/details/controller.php:34
|
395 |
-
msgid " for details."
|
396 |
-
msgstr ""
|
397 |
-
|
398 |
-
#: views/packages/details/controller.php:35
|
399 |
-
msgid "For help visit the "
|
400 |
-
msgstr ""
|
401 |
-
|
402 |
-
#: views/packages/details/controller.php:35
|
403 |
-
msgid " and "
|
404 |
-
msgstr ""
|
405 |
-
|
406 |
-
#: views/packages/details/controller.php:42
|
407 |
-
msgid "Details"
|
408 |
-
msgstr ""
|
409 |
-
|
410 |
-
#: views/packages/details/controller.php:45
|
411 |
-
msgid "Transfer"
|
412 |
-
msgstr ""
|
413 |
-
|
414 |
-
#: views/packages/details/detail.php:63
|
415 |
-
msgid "Invalid Package ID request. Please try again!"
|
416 |
-
msgstr ""
|
417 |
-
|
418 |
-
#: views/packages/details/detail.php:75 views/settings/controller.php:22
|
419 |
-
#: views/tools/diagnostics/inc.settings.php:29
|
420 |
-
msgid "General"
|
421 |
-
msgstr ""
|
422 |
-
|
423 |
-
#: views/packages/details/detail.php:81 views/packages/details/detail.php:184
|
424 |
-
#: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
|
425 |
-
#: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
|
426 |
-
#: views/packages/main/s3.build.php:133
|
427 |
-
msgid "Name"
|
428 |
-
msgstr ""
|
429 |
-
|
430 |
-
#: views/packages/details/detail.php:85
|
431 |
-
msgid "ID"
|
432 |
-
msgstr ""
|
433 |
-
|
434 |
-
#: views/packages/details/detail.php:86
|
435 |
-
msgid "Hash"
|
436 |
-
msgstr ""
|
437 |
-
|
438 |
-
#: views/packages/details/detail.php:87
|
439 |
-
msgid "Full Name"
|
440 |
-
msgstr ""
|
441 |
-
|
442 |
-
#: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
|
443 |
-
#: views/packages/main/s2.scan3.php:530
|
444 |
-
msgid "Notes"
|
445 |
-
msgstr ""
|
446 |
-
|
447 |
-
#: views/packages/details/detail.php:93
|
448 |
-
msgid "- no notes -"
|
449 |
-
msgstr ""
|
450 |
-
|
451 |
-
#: views/packages/details/detail.php:96
|
452 |
-
msgid "Versions"
|
453 |
-
msgstr ""
|
454 |
-
|
455 |
-
#: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
|
456 |
-
msgid "WordPress"
|
457 |
-
msgstr ""
|
458 |
-
|
459 |
-
#: views/packages/details/detail.php:100 views/packages/details/detail.php:101
|
460 |
-
#: views/packages/details/detail.php:103 views/packages/details/detail.php:104
|
461 |
-
#: views/packages/details/detail.php:118
|
462 |
-
msgid "- unknown -"
|
463 |
-
msgstr ""
|
464 |
-
|
465 |
-
#: views/packages/details/detail.php:101
|
466 |
-
msgid "PHP"
|
467 |
-
msgstr ""
|
468 |
-
|
469 |
-
#: views/packages/details/detail.php:102
|
470 |
-
msgid "Mysql"
|
471 |
-
msgstr ""
|
472 |
-
|
473 |
-
#: views/packages/details/detail.php:109
|
474 |
-
msgid "Runtime"
|
475 |
-
msgstr ""
|
476 |
-
|
477 |
-
#: views/packages/details/detail.php:110
|
478 |
-
msgid "error running"
|
479 |
-
msgstr ""
|
480 |
-
|
481 |
-
#: views/packages/details/detail.php:113
|
482 |
-
msgid "Status"
|
483 |
-
msgstr ""
|
484 |
-
|
485 |
-
#: views/packages/details/detail.php:114
|
486 |
-
msgid "completed"
|
487 |
-
msgstr ""
|
488 |
-
|
489 |
-
#: views/packages/details/detail.php:114
|
490 |
-
msgid "in-complete"
|
491 |
-
msgstr ""
|
492 |
-
|
493 |
-
#: views/packages/details/detail.php:117 views/packages/details/detail.php:366
|
494 |
-
#: views/packages/main/s1.setup2.php:472
|
495 |
-
#: views/tools/diagnostics/inc.settings.php:118
|
496 |
-
msgid "User"
|
497 |
-
msgstr ""
|
498 |
-
|
499 |
-
#: views/packages/details/detail.php:121 views/packages/details/detail.php:269
|
500 |
-
#: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
|
501 |
-
#: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
|
502 |
-
msgid "Files"
|
503 |
-
msgstr ""
|
504 |
-
|
505 |
-
#: views/packages/details/detail.php:129
|
506 |
-
msgid "Log"
|
507 |
-
msgstr ""
|
508 |
-
|
509 |
-
#: views/packages/details/detail.php:130
|
510 |
-
msgid "Share"
|
511 |
-
msgstr ""
|
512 |
-
|
513 |
-
#: views/packages/details/detail.php:138 views/packages/details/detail.php:226
|
514 |
-
#: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
|
515 |
-
#: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
|
516 |
-
#: views/settings/packages.php:204
|
517 |
-
msgid "Archive"
|
518 |
-
msgstr ""
|
519 |
-
|
520 |
-
#: views/packages/details/detail.php:142 views/packages/details/detail.php:325
|
521 |
-
#: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
|
522 |
-
#: views/packages/main/s3.build.php:143
|
523 |
-
msgid "Installer"
|
524 |
-
msgstr ""
|
525 |
-
|
526 |
-
#: views/packages/details/detail.php:146 views/packages/details/detail.php:362
|
527 |
-
#: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
|
528 |
-
#: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
|
529 |
-
#: views/settings/packages.php:70
|
530 |
-
msgid "Database"
|
531 |
-
msgstr ""
|
532 |
-
|
533 |
-
#: views/packages/details/detail.php:160
|
534 |
-
msgid "Download Links"
|
535 |
-
msgstr ""
|
536 |
-
|
537 |
-
#: views/packages/details/detail.php:163
|
538 |
-
msgid "The following links contain sensitive data. Please share with caution!"
|
539 |
-
msgstr ""
|
540 |
-
|
541 |
-
#: views/packages/details/detail.php:169
|
542 |
-
msgid "The database SQL script is a quick link to your database backup script. An exact copy is also stored in the package."
|
543 |
-
msgstr ""
|
544 |
-
|
545 |
-
#: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
|
546 |
-
#: views/settings/controller.php:25 views/settings/general.php:110
|
547 |
-
msgid "Storage"
|
548 |
-
msgstr ""
|
549 |
-
|
550 |
-
#: views/packages/details/detail.php:185 views/packages/details/detail.php:286
|
551 |
-
#: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
|
552 |
-
msgid "Type"
|
553 |
-
msgstr ""
|
554 |
-
|
555 |
-
#: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
|
556 |
-
msgid "Location"
|
557 |
-
msgstr ""
|
558 |
-
|
559 |
-
#: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
|
560 |
-
msgid "Default"
|
561 |
-
msgstr ""
|
562 |
-
|
563 |
-
#: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
|
564 |
-
msgid "Local"
|
565 |
-
msgstr ""
|
566 |
-
|
567 |
-
#: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
|
568 |
-
#, php-format
|
569 |
-
msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
|
570 |
-
msgstr ""
|
571 |
-
|
572 |
-
#: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
|
573 |
-
#: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
|
574 |
-
#: views/packages/main/s3.build.php:21
|
575 |
-
msgid "Duplicator Pro"
|
576 |
-
msgstr ""
|
577 |
-
|
578 |
-
#: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
|
579 |
-
msgid "Additional Storage:"
|
580 |
-
msgstr ""
|
581 |
-
|
582 |
-
#: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
|
583 |
-
msgid "Duplicator Pro allows you to create a package and then store it at a custom location on this server or to a cloud based location such as Google Drive, Amazon, Dropbox or FTP."
|
584 |
-
msgstr ""
|
585 |
-
|
586 |
-
#: views/packages/details/detail.php:234 views/packages/details/detail.php:290
|
587 |
-
#: views/packages/main/s1.setup2.php:260
|
588 |
-
msgid "Build Mode"
|
589 |
-
msgstr ""
|
590 |
-
|
591 |
-
#: views/packages/details/detail.php:241
|
592 |
-
msgid "Database Mode"
|
593 |
-
msgstr ""
|
594 |
-
|
595 |
-
#: views/packages/details/detail.php:242
|
596 |
-
msgid "Archive Database Only Enabled"
|
597 |
-
msgstr ""
|
598 |
-
|
599 |
-
#: views/packages/details/detail.php:246 views/packages/details/detail.php:303
|
600 |
-
msgid "Filters"
|
601 |
-
msgstr ""
|
602 |
-
|
603 |
-
#: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
|
604 |
-
#: views/packages/main/s2.scan3.php:629
|
605 |
-
msgid "Directories"
|
606 |
-
msgstr ""
|
607 |
-
|
608 |
-
#: views/packages/details/detail.php:254 views/packages/details/detail.php:264
|
609 |
-
#: views/packages/details/detail.php:273 views/packages/details/detail.php:312
|
610 |
-
msgid "- no filters -"
|
611 |
-
msgstr ""
|
612 |
-
|
613 |
-
#: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
|
614 |
-
msgid "Extensions"
|
615 |
-
msgstr ""
|
616 |
-
|
617 |
-
#: views/packages/details/detail.php:283 views/packages/details/detail.php:395
|
618 |
-
msgid "DATABASE"
|
619 |
-
msgstr ""
|
620 |
-
|
621 |
-
#: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
|
622 |
-
msgid "MySQL Compatibility Mode Enabled"
|
623 |
-
msgstr ""
|
624 |
-
|
625 |
-
#: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
|
626 |
-
#: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
|
627 |
-
#: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
|
628 |
-
msgid "details"
|
629 |
-
msgstr ""
|
630 |
-
|
631 |
-
#: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
|
632 |
-
msgid "Tables"
|
633 |
-
msgstr ""
|
634 |
-
|
635 |
-
#: views/packages/details/detail.php:332
|
636 |
-
msgid " Security"
|
637 |
-
msgstr ""
|
638 |
-
|
639 |
-
#: views/packages/details/detail.php:336
|
640 |
-
msgid "Password Protection"
|
641 |
-
msgstr ""
|
642 |
-
|
643 |
-
#: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
|
644 |
-
msgid "Show/Hide Password"
|
645 |
-
msgstr ""
|
646 |
-
|
647 |
-
#: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
|
648 |
-
msgid " MySQL Server"
|
649 |
-
msgstr ""
|
650 |
-
|
651 |
-
#: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
|
652 |
-
msgid "Host"
|
653 |
-
msgstr ""
|
654 |
-
|
655 |
-
#: views/packages/details/detail.php:359 views/packages/details/detail.php:363
|
656 |
-
#: views/packages/details/detail.php:367
|
657 |
-
msgid "- not set -"
|
658 |
-
msgstr ""
|
659 |
-
|
660 |
-
#: views/packages/details/detail.php:375
|
661 |
-
msgid "View Package Object"
|
662 |
-
msgstr ""
|
663 |
-
|
664 |
-
#: views/packages/details/detail.php:392
|
665 |
-
msgid "Package File Links"
|
666 |
-
msgstr ""
|
667 |
-
|
668 |
-
#: views/packages/details/detail.php:396
|
669 |
-
msgid "PACKAGE"
|
670 |
-
msgstr ""
|
671 |
-
|
672 |
-
#: views/packages/details/detail.php:397
|
673 |
-
msgid "INSTALLER"
|
674 |
-
msgstr ""
|
675 |
-
|
676 |
-
#: views/packages/details/detail.php:398
|
677 |
-
msgid "LOG"
|
678 |
-
msgstr ""
|
679 |
-
|
680 |
-
#: views/packages/details/transfer.php:15
|
681 |
-
msgid "Transfer your packages to multiple locations with Duplicator Pro"
|
682 |
-
msgstr ""
|
683 |
-
|
684 |
-
#: views/packages/details/transfer.php:20 views/settings/storage.php:19
|
685 |
-
msgid "Amazon S3"
|
686 |
-
msgstr ""
|
687 |
-
|
688 |
-
#: views/packages/details/transfer.php:21
|
689 |
-
msgid "Dropbox"
|
690 |
-
msgstr ""
|
691 |
-
|
692 |
-
#: views/packages/details/transfer.php:22 views/settings/storage.php:21
|
693 |
-
msgid "Google Drive"
|
694 |
-
msgstr ""
|
695 |
-
|
696 |
-
#: views/packages/details/transfer.php:23 views/settings/storage.php:22
|
697 |
-
msgid "One Drive"
|
698 |
-
msgstr ""
|
699 |
-
|
700 |
-
#: views/packages/details/transfer.php:24 views/settings/storage.php:23
|
701 |
-
msgid "FTP & SFTP"
|
702 |
-
msgstr ""
|
703 |
-
|
704 |
-
#: views/packages/details/transfer.php:25 views/settings/storage.php:24
|
705 |
-
msgid "Custom Directory"
|
706 |
-
msgstr ""
|
707 |
-
|
708 |
-
#: views/packages/details/transfer.php:29
|
709 |
-
msgid "Set up a one-time storage location and automatically push the package to your destination."
|
710 |
-
msgstr ""
|
711 |
-
|
712 |
-
#: views/packages/details/transfer.php:35 views/settings/schedule.php:22
|
713 |
-
#: views/settings/storage.php:34 views/tools/templates.php:23
|
714 |
-
msgid "Learn More"
|
715 |
-
msgstr ""
|
716 |
-
|
717 |
-
#: views/packages/main/controller.php:9
|
718 |
-
msgid "An invalid request was made to this page."
|
719 |
-
msgstr ""
|
720 |
-
|
721 |
-
#: views/packages/main/controller.php:10
|
722 |
-
msgid "Please retry by going to the"
|
723 |
-
msgstr ""
|
724 |
-
|
725 |
-
#: views/packages/main/controller.php:11
|
726 |
-
msgid "Packages Screen"
|
727 |
-
msgstr ""
|
728 |
-
|
729 |
-
#: views/packages/main/controller.php:59
|
730 |
-
msgid "Packages » All"
|
731 |
-
msgstr ""
|
732 |
-
|
733 |
-
#: views/packages/main/controller.php:63 views/packages/main/controller.php:67
|
734 |
-
#: views/packages/main/controller.php:71
|
735 |
-
msgid "Packages » New"
|
736 |
-
msgstr ""
|
737 |
-
|
738 |
-
#: views/packages/main/packages.php:77
|
739 |
-
msgid "Bulk Actions"
|
740 |
-
msgstr ""
|
741 |
-
|
742 |
-
#: views/packages/main/packages.php:78
|
743 |
-
msgid "Delete selected package(s)"
|
744 |
-
msgstr ""
|
745 |
-
|
746 |
-
#: views/packages/main/packages.php:78
|
747 |
-
msgid "Delete"
|
748 |
-
msgstr ""
|
749 |
-
|
750 |
-
#: views/packages/main/packages.php:80
|
751 |
-
msgid "Apply"
|
752 |
-
msgstr ""
|
753 |
-
|
754 |
-
#: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
|
755 |
-
#: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
|
756 |
-
msgid "Create New"
|
757 |
-
msgstr ""
|
758 |
-
|
759 |
-
#: views/packages/main/packages.php:114 views/packages/main/packages.php:148
|
760 |
-
msgid "No Packages Found."
|
761 |
-
msgstr ""
|
762 |
-
|
763 |
-
#: views/packages/main/packages.php:115 views/packages/main/packages.php:149
|
764 |
-
msgid "Click the 'Create New' button to build a package."
|
765 |
-
msgstr ""
|
766 |
-
|
767 |
-
#: views/packages/main/packages.php:117 views/packages/main/packages.php:151
|
768 |
-
msgid "New to Duplicator?"
|
769 |
-
msgstr ""
|
770 |
-
|
771 |
-
#: views/packages/main/packages.php:119 views/packages/main/packages.php:153
|
772 |
-
msgid "Check out the 'Quick Start' guide!"
|
773 |
-
msgstr ""
|
774 |
-
|
775 |
-
#: views/packages/main/packages.php:135
|
776 |
-
msgid "Select all packages"
|
777 |
-
msgstr ""
|
778 |
-
|
779 |
-
#: views/packages/main/packages.php:136
|
780 |
-
msgid "Created"
|
781 |
-
msgstr ""
|
782 |
-
|
783 |
-
#: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
|
784 |
-
#: views/packages/main/s2.scan3.php:392
|
785 |
-
msgid "Size"
|
786 |
-
msgstr ""
|
787 |
-
|
788 |
-
#: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
|
789 |
-
msgid "Package"
|
790 |
-
msgstr ""
|
791 |
-
|
792 |
-
#: views/packages/main/packages.php:189
|
793 |
-
msgid "Archive created as zip file"
|
794 |
-
msgstr ""
|
795 |
-
|
796 |
-
#: views/packages/main/packages.php:190
|
797 |
-
msgid "Archive created as daf file"
|
798 |
-
msgstr ""
|
799 |
-
|
800 |
-
#: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
|
801 |
-
#: views/packages/main/s2.scan3.php:35
|
802 |
-
msgid "Database Only"
|
803 |
-
msgstr ""
|
804 |
-
|
805 |
-
#: views/packages/main/packages.php:199
|
806 |
-
msgid "Package Build Running"
|
807 |
-
msgstr ""
|
808 |
-
|
809 |
-
#: views/packages/main/packages.php:200
|
810 |
-
msgid "To stop or reset this package build goto Settings > Advanced > Reset Packages"
|
811 |
-
msgstr ""
|
812 |
-
|
813 |
-
#: views/packages/main/packages.php:210 views/packages/main/packages.php:228
|
814 |
-
msgid "Package Details"
|
815 |
-
msgstr ""
|
816 |
-
|
817 |
-
#: views/packages/main/packages.php:226
|
818 |
-
msgid "Error Processing"
|
819 |
-
msgstr ""
|
820 |
-
|
821 |
-
#: views/packages/main/packages.php:246
|
822 |
-
msgid "Current Server Time"
|
823 |
-
msgstr ""
|
824 |
-
|
825 |
-
#: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
|
826 |
-
msgid "Time"
|
827 |
-
msgstr ""
|
828 |
-
|
829 |
-
#: views/packages/main/packages.php:258
|
830 |
-
msgid "Items"
|
831 |
-
msgstr ""
|
832 |
-
|
833 |
-
#: views/packages/main/packages.php:268
|
834 |
-
msgid "Bulk Action Required"
|
835 |
-
msgstr ""
|
836 |
-
|
837 |
-
#: views/packages/main/packages.php:270
|
838 |
-
msgid "No selections made! Please select an action from the \"Bulk Actions\" drop down menu."
|
839 |
-
msgstr ""
|
840 |
-
|
841 |
-
#: views/packages/main/packages.php:274
|
842 |
-
msgid "Selection Required"
|
843 |
-
msgstr ""
|
844 |
-
|
845 |
-
#: views/packages/main/packages.php:276
|
846 |
-
msgid "No selections made! Please select at least one package to delete."
|
847 |
-
msgstr ""
|
848 |
-
|
849 |
-
#: views/packages/main/packages.php:280
|
850 |
-
msgid "Delete Packages?"
|
851 |
-
msgstr ""
|
852 |
-
|
853 |
-
#: views/packages/main/packages.php:281
|
854 |
-
msgid "Are you sure you want to delete the selected package(s)?"
|
855 |
-
msgstr ""
|
856 |
-
|
857 |
-
#: views/packages/main/packages.php:282
|
858 |
-
msgid "Removing Packages, Please Wait..."
|
859 |
-
msgstr ""
|
860 |
-
|
861 |
-
#: views/packages/main/packages.php:289
|
862 |
-
msgid "Duplicator Help"
|
863 |
-
msgstr ""
|
864 |
-
|
865 |
-
#: views/packages/main/packages.php:294
|
866 |
-
msgid "Alert!"
|
867 |
-
msgstr ""
|
868 |
-
|
869 |
-
#: views/packages/main/packages.php:295
|
870 |
-
msgid "A package is being processed. Retry later."
|
871 |
-
msgstr ""
|
872 |
-
|
873 |
-
#: views/packages/main/packages.php:302
|
874 |
-
msgid "Common Questions:"
|
875 |
-
msgstr ""
|
876 |
-
|
877 |
-
#: views/packages/main/packages.php:303
|
878 |
-
msgid "How do I create a package"
|
879 |
-
msgstr ""
|
880 |
-
|
881 |
-
#: views/packages/main/packages.php:304
|
882 |
-
msgid "How do I install a package?"
|
883 |
-
msgstr ""
|
884 |
-
|
885 |
-
#: views/packages/main/packages.php:305
|
886 |
-
msgid "Frequently Asked Questions!"
|
887 |
-
msgstr ""
|
888 |
-
|
889 |
-
#: views/packages/main/packages.php:308
|
890 |
-
msgid "Other Resources:"
|
891 |
-
msgstr ""
|
892 |
-
|
893 |
-
#: views/packages/main/packages.php:309
|
894 |
-
msgid "Need help with the plugin?"
|
895 |
-
msgstr ""
|
896 |
-
|
897 |
-
#: views/packages/main/packages.php:310
|
898 |
-
msgid "Have an idea for the plugin?"
|
899 |
-
msgstr ""
|
900 |
-
|
901 |
-
#: views/packages/main/packages.php:312
|
902 |
-
msgid "Help review the plugin!"
|
903 |
-
msgstr ""
|
904 |
-
|
905 |
-
#: views/packages/main/s1.setup1.php:12
|
906 |
-
msgid "Package settings have been reset."
|
907 |
-
msgstr ""
|
908 |
-
|
909 |
-
#: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
|
910 |
-
#: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
|
911 |
-
#: views/packages/main/s3.build.php:79
|
912 |
-
msgid "Setup"
|
913 |
-
msgstr ""
|
914 |
-
|
915 |
-
#: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
|
916 |
-
#: views/packages/main/s3.build.php:80
|
917 |
-
msgid "Scan"
|
918 |
-
msgstr ""
|
919 |
-
|
920 |
-
#: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
|
921 |
-
#: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
|
922 |
-
msgid "Build"
|
923 |
-
msgstr ""
|
924 |
-
|
925 |
-
#: views/packages/main/s1.setup1.php:67
|
926 |
-
msgid "Step 1: Package Setup"
|
927 |
-
msgstr ""
|
928 |
-
|
929 |
-
#: views/packages/main/s1.setup1.php:90
|
930 |
-
msgid "Requirements:"
|
931 |
-
msgstr ""
|
932 |
-
|
933 |
-
#: views/packages/main/s1.setup1.php:99
|
934 |
-
msgid "System requirements must pass for the Duplicator to work properly. Click each link for details."
|
935 |
-
msgstr ""
|
936 |
-
|
937 |
-
#: views/packages/main/s1.setup1.php:105
|
938 |
-
msgid "PHP Support"
|
939 |
-
msgstr ""
|
940 |
-
|
941 |
-
#: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
|
942 |
-
msgid "PHP Version"
|
943 |
-
msgstr ""
|
944 |
-
|
945 |
-
#: views/packages/main/s1.setup1.php:113
|
946 |
-
msgid "PHP versions 5.2.9+ or higher is required."
|
947 |
-
msgstr ""
|
948 |
-
|
949 |
-
#: views/packages/main/s1.setup1.php:117
|
950 |
-
msgid "Zip Archive Enabled"
|
951 |
-
msgstr ""
|
952 |
-
|
953 |
-
#: views/packages/main/s1.setup1.php:121
|
954 |
-
msgid "ZipArchive extension is required or"
|
955 |
-
msgstr ""
|
956 |
-
|
957 |
-
#: views/packages/main/s1.setup1.php:122
|
958 |
-
msgid "Switch to DupArchive"
|
959 |
-
msgstr ""
|
960 |
-
|
961 |
-
#: views/packages/main/s1.setup1.php:123
|
962 |
-
msgid "to by-pass this requirement."
|
963 |
-
msgstr ""
|
964 |
-
|
965 |
-
#: views/packages/main/s1.setup1.php:129
|
966 |
-
msgid "Safe Mode Off"
|
967 |
-
msgstr ""
|
968 |
-
|
969 |
-
#: views/packages/main/s1.setup1.php:131
|
970 |
-
msgid "Safe Mode should be set to Off in you php.ini file and is deprecated as of PHP 5.3.0."
|
971 |
-
msgstr ""
|
972 |
-
|
973 |
-
#: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
|
974 |
-
#: views/packages/main/s1.setup1.php:144
|
975 |
-
msgid "Function"
|
976 |
-
msgstr ""
|
977 |
-
|
978 |
-
#: views/packages/main/s1.setup1.php:150
|
979 |
-
msgid "For any issues in this section please contact your hosting provider or server administrator. For additional information see our online documentation."
|
980 |
-
msgstr ""
|
981 |
-
|
982 |
-
#: views/packages/main/s1.setup1.php:158
|
983 |
-
msgid "Required Paths"
|
984 |
-
msgstr ""
|
985 |
-
|
986 |
-
#: views/packages/main/s1.setup1.php:178
|
987 |
-
msgid "If the root WordPress path is not writable by PHP on some systems this can cause issues."
|
988 |
-
msgstr ""
|
989 |
-
|
990 |
-
#: views/packages/main/s1.setup1.php:181
|
991 |
-
msgid "If Duplicator does not have enough permissions then you will need to manually create the paths above. "
|
992 |
-
msgstr ""
|
993 |
-
|
994 |
-
#: views/packages/main/s1.setup1.php:190
|
995 |
-
msgid "Server Support"
|
996 |
-
msgstr ""
|
997 |
-
|
998 |
-
#: views/packages/main/s1.setup1.php:196
|
999 |
-
msgid "MySQL Version"
|
1000 |
-
msgstr ""
|
1001 |
-
|
1002 |
-
#: views/packages/main/s1.setup1.php:200
|
1003 |
-
msgid "MySQLi Support"
|
1004 |
-
msgstr ""
|
1005 |
-
|
1006 |
-
#: views/packages/main/s1.setup1.php:206
|
1007 |
-
msgid "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note the trailing 'i') is also required. Contact your server administrator and request that mysqli extension and MySQL Server 5.0+ be installed."
|
1008 |
-
msgstr ""
|
1009 |
-
|
1010 |
-
#: views/packages/main/s1.setup1.php:207
|
1011 |
-
#: views/tools/diagnostics/inc.data.php:26
|
1012 |
-
msgid "more info"
|
1013 |
-
msgstr ""
|
1014 |
-
|
1015 |
-
#: views/packages/main/s1.setup1.php:216
|
1016 |
-
msgid "Reserved Files"
|
1017 |
-
msgstr ""
|
1018 |
-
|
1019 |
-
#: views/packages/main/s1.setup1.php:221
|
1020 |
-
msgid "None of the reserved files where found from a previous install. This means you are clear to create a new package."
|
1021 |
-
msgstr ""
|
1022 |
-
|
1023 |
-
#: views/packages/main/s1.setup1.php:229
|
1024 |
-
msgid "WordPress Root Path:"
|
1025 |
-
msgstr ""
|
1026 |
-
|
1027 |
-
#: views/packages/main/s1.setup1.php:231
|
1028 |
-
msgid "Remove Files Now"
|
1029 |
-
msgstr ""
|
1030 |
-
|
1031 |
-
#: views/packages/main/s1.setup2.php:76
|
1032 |
-
msgid "Add Notes"
|
1033 |
-
msgstr ""
|
1034 |
-
|
1035 |
-
#: views/packages/main/s1.setup2.php:79
|
1036 |
-
msgid "Toggle a default name"
|
1037 |
-
msgstr ""
|
1038 |
-
|
1039 |
-
#: views/packages/main/s1.setup2.php:146
|
1040 |
-
msgid "File filter enabled"
|
1041 |
-
msgstr ""
|
1042 |
-
|
1043 |
-
#: views/packages/main/s1.setup2.php:147
|
1044 |
-
msgid "Database filter enabled"
|
1045 |
-
msgstr ""
|
1046 |
-
|
1047 |
-
#: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
|
1048 |
-
msgid "Archive Only the Database"
|
1049 |
-
msgstr ""
|
1050 |
-
|
1051 |
-
#: views/packages/main/s1.setup2.php:177
|
1052 |
-
msgid "Enable File Filters"
|
1053 |
-
msgstr ""
|
1054 |
-
|
1055 |
-
#: views/packages/main/s1.setup2.php:179
|
1056 |
-
msgid "File Filters:"
|
1057 |
-
msgstr ""
|
1058 |
-
|
1059 |
-
#: views/packages/main/s1.setup2.php:180
|
1060 |
-
msgid "File filters allow you to ignore directories and file extensions. When creating a package only include the data you want and need. This helps to improve the overall archive build time and keep your backups simple and clean."
|
1061 |
-
msgstr ""
|
1062 |
-
|
1063 |
-
#: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
|
1064 |
-
#: views/packages/main/s1.setup2.php:207
|
1065 |
-
msgid "Separate all filters by semicolon"
|
1066 |
-
msgstr ""
|
1067 |
-
|
1068 |
-
#: views/packages/main/s1.setup2.php:187
|
1069 |
-
msgid "Directories:"
|
1070 |
-
msgstr ""
|
1071 |
-
|
1072 |
-
#: views/packages/main/s1.setup2.php:188
|
1073 |
-
msgid "Number of directories filtered"
|
1074 |
-
msgstr ""
|
1075 |
-
|
1076 |
-
#: views/packages/main/s1.setup2.php:192
|
1077 |
-
msgid "root path"
|
1078 |
-
msgstr ""
|
1079 |
-
|
1080 |
-
#: views/packages/main/s1.setup2.php:193
|
1081 |
-
msgid "wp-uploads"
|
1082 |
-
msgstr ""
|
1083 |
-
|
1084 |
-
#: views/packages/main/s1.setup2.php:194
|
1085 |
-
msgid "cache"
|
1086 |
-
msgstr ""
|
1087 |
-
|
1088 |
-
#: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
|
1089 |
-
#: views/packages/main/s1.setup2.php:215
|
1090 |
-
msgid "(clear)"
|
1091 |
-
msgstr ""
|
1092 |
-
|
1093 |
-
#: views/packages/main/s1.setup2.php:199
|
1094 |
-
msgid "File extensions"
|
1095 |
-
msgstr ""
|
1096 |
-
|
1097 |
-
#: views/packages/main/s1.setup2.php:201
|
1098 |
-
msgid "media"
|
1099 |
-
msgstr ""
|
1100 |
-
|
1101 |
-
#: views/packages/main/s1.setup2.php:202
|
1102 |
-
msgid "archive"
|
1103 |
-
msgstr ""
|
1104 |
-
|
1105 |
-
#: views/packages/main/s1.setup2.php:209
|
1106 |
-
msgid "Files:"
|
1107 |
-
msgstr ""
|
1108 |
-
|
1109 |
-
#: views/packages/main/s1.setup2.php:210
|
1110 |
-
msgid "Number of files filtered"
|
1111 |
-
msgstr ""
|
1112 |
-
|
1113 |
-
#: views/packages/main/s1.setup2.php:214
|
1114 |
-
msgid "(file path)"
|
1115 |
-
msgstr ""
|
1116 |
-
|
1117 |
-
#: views/packages/main/s1.setup2.php:220
|
1118 |
-
msgid "The directory, file and extensions paths above will be excluded from the archive file if enabled is checked."
|
1119 |
-
msgstr ""
|
1120 |
-
|
1121 |
-
#: views/packages/main/s1.setup2.php:221
|
1122 |
-
msgid "Use the full path for directories and files with semicolons to separate all paths."
|
1123 |
-
msgstr ""
|
1124 |
-
|
1125 |
-
#: views/packages/main/s1.setup2.php:231
|
1126 |
-
msgid "This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the "
|
1127 |
-
msgstr ""
|
1128 |
-
|
1129 |
-
#: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
|
1130 |
-
msgid "Quick Start Two-Part Install Instructions"
|
1131 |
-
msgstr ""
|
1132 |
-
|
1133 |
-
#: views/packages/main/s1.setup2.php:238
|
1134 |
-
msgid "<b>Overview:</b><br/> This advanced option excludes all files from the archive. Only the database and a copy of the installer.php will be included in the archive.zip file. The option can be used for backing up and moving only the database."
|
1135 |
-
msgstr ""
|
1136 |
-
|
1137 |
-
#: views/packages/main/s1.setup2.php:243
|
1138 |
-
msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
|
1139 |
-
msgstr ""
|
1140 |
-
|
1141 |
-
#: views/packages/main/s1.setup2.php:245
|
1142 |
-
msgid "Please use caution when installing only the database over an existing site and be sure the correct files correspond with the database. For example, if WordPress 4.6 is on this site and you copy the database to a host that has WordPress 4.8 files then the source code of the files will not be in sync with the database causing possible errors. If you’re immediately moving the source files with the database then you can ignore this notice. Please use this advanced feature with caution!"
|
1143 |
-
msgstr ""
|
1144 |
-
|
1145 |
-
#: views/packages/main/s1.setup2.php:267
|
1146 |
-
msgid "Enable Table Filters"
|
1147 |
-
msgstr ""
|
1148 |
-
|
1149 |
-
#: views/packages/main/s1.setup2.php:269
|
1150 |
-
msgid "Enable Table Filters:"
|
1151 |
-
msgstr ""
|
1152 |
-
|
1153 |
-
#: views/packages/main/s1.setup2.php:270
|
1154 |
-
msgid "Checked tables will not be added to the database script. Excluding certain tables can possibly cause your site or plugins to not work correctly after install!"
|
1155 |
-
msgstr ""
|
1156 |
-
|
1157 |
-
#: views/packages/main/s1.setup2.php:276
|
1158 |
-
msgid "Include All"
|
1159 |
-
msgstr ""
|
1160 |
-
|
1161 |
-
#: views/packages/main/s1.setup2.php:277
|
1162 |
-
msgid "Exclude All"
|
1163 |
-
msgstr ""
|
1164 |
-
|
1165 |
-
#: views/packages/main/s1.setup2.php:321
|
1166 |
-
msgid "Checked tables will be <u>excluded</u> from the database script. "
|
1167 |
-
msgstr ""
|
1168 |
-
|
1169 |
-
#: views/packages/main/s1.setup2.php:322
|
1170 |
-
msgid "Excluding certain tables can cause your site or plugins to not work correctly after install!<br/>"
|
1171 |
-
msgstr ""
|
1172 |
-
|
1173 |
-
#: views/packages/main/s1.setup2.php:323
|
1174 |
-
msgid "<i class='core-table-info'> Use caution when excluding tables! It is highly recommended to not exclude WordPress core tables*, unless you know the impact.</i>"
|
1175 |
-
msgstr ""
|
1176 |
-
|
1177 |
-
#: views/packages/main/s1.setup2.php:328
|
1178 |
-
msgid "Compatibility Mode"
|
1179 |
-
msgstr ""
|
1180 |
-
|
1181 |
-
#: views/packages/main/s1.setup2.php:330
|
1182 |
-
msgid "Compatibility Mode:"
|
1183 |
-
msgstr ""
|
1184 |
-
|
1185 |
-
#: views/packages/main/s1.setup2.php:331
|
1186 |
-
msgid "This is an advanced database backwards compatibility feature that should ONLY be used if having problems installing packages. If the database server version is lower than the version where the package was built then these options may help generate a script that is more compliant with the older database server. It is recommended to try each option separately starting with mysql40."
|
1187 |
-
msgstr ""
|
1188 |
-
|
1189 |
-
#: views/packages/main/s1.setup2.php:352
|
1190 |
-
msgid "mysql40"
|
1191 |
-
msgstr ""
|
1192 |
-
|
1193 |
-
#: views/packages/main/s1.setup2.php:356
|
1194 |
-
msgid "no_table_options"
|
1195 |
-
msgstr ""
|
1196 |
-
|
1197 |
-
#: views/packages/main/s1.setup2.php:360
|
1198 |
-
msgid "no_key_options"
|
1199 |
-
msgstr ""
|
1200 |
-
|
1201 |
-
#: views/packages/main/s1.setup2.php:364
|
1202 |
-
msgid "no_field_options"
|
1203 |
-
msgstr ""
|
1204 |
-
|
1205 |
-
#: views/packages/main/s1.setup2.php:369
|
1206 |
-
msgid "This option is only available with mysqldump mode."
|
1207 |
-
msgstr ""
|
1208 |
-
|
1209 |
-
#: views/packages/main/s1.setup2.php:382
|
1210 |
-
msgid "Installer password protection is on"
|
1211 |
-
msgstr ""
|
1212 |
-
|
1213 |
-
#: views/packages/main/s1.setup2.php:383
|
1214 |
-
msgid "Installer password protection is off"
|
1215 |
-
msgstr ""
|
1216 |
-
|
1217 |
-
#: views/packages/main/s1.setup2.php:390
|
1218 |
-
msgid "All values in this section are"
|
1219 |
-
msgstr ""
|
1220 |
-
|
1221 |
-
#: views/packages/main/s1.setup2.php:390
|
1222 |
-
msgid "optional"
|
1223 |
-
msgstr ""
|
1224 |
-
|
1225 |
-
#: views/packages/main/s1.setup2.php:392
|
1226 |
-
msgid "Setup/Prefills"
|
1227 |
-
msgstr ""
|
1228 |
-
|
1229 |
-
#: views/packages/main/s1.setup2.php:393
|
1230 |
-
msgid "All values in this section are OPTIONAL! If you know ahead of time the database input fields the installer will use, then you can optionally enter them here and they will be prefilled at install time. Otherwise you can just enter them in at install time and ignore all these options in the Installer section."
|
1231 |
-
msgstr ""
|
1232 |
-
|
1233 |
-
#: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
|
1234 |
-
msgid "Branding"
|
1235 |
-
msgstr ""
|
1236 |
-
|
1237 |
-
#: views/packages/main/s1.setup2.php:407
|
1238 |
-
msgid "Available with Duplicator Pro - Freelancer!"
|
1239 |
-
msgstr ""
|
1240 |
-
|
1241 |
-
#: views/packages/main/s1.setup2.php:410
|
1242 |
-
msgid "Branding is a way to customize the installer look and feel. With branding you can create multiple brands of installers."
|
1243 |
-
msgstr ""
|
1244 |
-
|
1245 |
-
#: views/packages/main/s1.setup2.php:415
|
1246 |
-
msgid "Security"
|
1247 |
-
msgstr ""
|
1248 |
-
|
1249 |
-
#: views/packages/main/s1.setup2.php:422
|
1250 |
-
msgid "Enable Password Protection"
|
1251 |
-
msgstr ""
|
1252 |
-
|
1253 |
-
#: views/packages/main/s1.setup2.php:424
|
1254 |
-
msgid "Security:"
|
1255 |
-
msgstr ""
|
1256 |
-
|
1257 |
-
#: views/packages/main/s1.setup2.php:425
|
1258 |
-
msgid "Enabling this option will allow for basic password protection on the installer. Before running the installer the password below must be entered before proceeding with an install. This password is a general deterrent and should not be substituted for properly keeping your files secure. Be sure to remove all installer files when the install process is completed."
|
1259 |
-
msgstr ""
|
1260 |
-
|
1261 |
-
#: views/packages/main/s1.setup2.php:440
|
1262 |
-
msgid "Prefills"
|
1263 |
-
msgstr ""
|
1264 |
-
|
1265 |
-
#: views/packages/main/s1.setup2.php:448
|
1266 |
-
msgid "Basic"
|
1267 |
-
msgstr ""
|
1268 |
-
|
1269 |
-
#: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
|
1270 |
-
msgid "cPanel"
|
1271 |
-
msgstr ""
|
1272 |
-
|
1273 |
-
#: views/packages/main/s1.setup2.php:461
|
1274 |
-
msgid "example: localhost (value is optional)"
|
1275 |
-
msgstr ""
|
1276 |
-
|
1277 |
-
#: views/packages/main/s1.setup2.php:464
|
1278 |
-
msgid "Host Port"
|
1279 |
-
msgstr ""
|
1280 |
-
|
1281 |
-
#: views/packages/main/s1.setup2.php:465
|
1282 |
-
msgid "example: 3306 (value is optional)"
|
1283 |
-
msgstr ""
|
1284 |
-
|
1285 |
-
#: views/packages/main/s1.setup2.php:469
|
1286 |
-
msgid "example: DatabaseName (value is optional)"
|
1287 |
-
msgstr ""
|
1288 |
-
|
1289 |
-
#: views/packages/main/s1.setup2.php:473
|
1290 |
-
msgid "example: DatabaseUserName (value is optional)"
|
1291 |
-
msgstr ""
|
1292 |
-
|
1293 |
-
#: views/packages/main/s1.setup2.php:483
|
1294 |
-
msgid "Create the database and database user at install time without leaving the installer!"
|
1295 |
-
msgstr ""
|
1296 |
-
|
1297 |
-
#: views/packages/main/s1.setup2.php:484
|
1298 |
-
msgid "This feature is only availble in "
|
1299 |
-
msgstr ""
|
1300 |
-
|
1301 |
-
#: views/packages/main/s1.setup2.php:485
|
1302 |
-
msgid "Duplicator Pro!"
|
1303 |
-
msgstr ""
|
1304 |
-
|
1305 |
-
#: views/packages/main/s1.setup2.php:486
|
1306 |
-
msgid "This feature works only with hosts that support cPanel."
|
1307 |
-
msgstr ""
|
1308 |
-
|
1309 |
-
#: views/packages/main/s1.setup2.php:498
|
1310 |
-
msgid "Reset"
|
1311 |
-
msgstr ""
|
1312 |
-
|
1313 |
-
#: views/packages/main/s1.setup2.php:499
|
1314 |
-
msgid "Next"
|
1315 |
-
msgstr ""
|
1316 |
-
|
1317 |
-
#: views/packages/main/s1.setup2.php:508
|
1318 |
-
msgid "Reset Package Settings?"
|
1319 |
-
msgstr ""
|
1320 |
-
|
1321 |
-
#: views/packages/main/s1.setup2.php:509
|
1322 |
-
msgid "This will clear and reset all of the current package settings. Would you like to continue?"
|
1323 |
-
msgstr ""
|
1324 |
-
|
1325 |
-
#: views/packages/main/s2.scan1.php:148
|
1326 |
-
msgid "Input fields not valid"
|
1327 |
-
msgstr ""
|
1328 |
-
|
1329 |
-
#: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
|
1330 |
-
msgid "Please try again!"
|
1331 |
-
msgstr ""
|
1332 |
-
|
1333 |
-
#: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
|
1334 |
-
#: views/packages/main/s3.build.php:353
|
1335 |
-
msgid "Error Message:"
|
1336 |
-
msgstr ""
|
1337 |
-
|
1338 |
-
#: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
|
1339 |
-
msgid "Back"
|
1340 |
-
msgstr ""
|
1341 |
-
|
1342 |
-
#: views/packages/main/s2.scan1.php:180
|
1343 |
-
msgid "Step 2: System Scan"
|
1344 |
-
msgstr ""
|
1345 |
-
|
1346 |
-
#: views/packages/main/s2.scan1.php:197
|
1347 |
-
msgid "Scanning Site"
|
1348 |
-
msgstr ""
|
1349 |
-
|
1350 |
-
#: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
|
1351 |
-
msgid "Please Wait..."
|
1352 |
-
msgstr ""
|
1353 |
-
|
1354 |
-
#: views/packages/main/s2.scan1.php:200
|
1355 |
-
msgid "Keep this window open during the scan process."
|
1356 |
-
msgstr ""
|
1357 |
-
|
1358 |
-
#: views/packages/main/s2.scan1.php:201
|
1359 |
-
msgid "This can take several minutes."
|
1360 |
-
msgstr ""
|
1361 |
-
|
1362 |
-
#: views/packages/main/s2.scan1.php:206
|
1363 |
-
msgid "Scan Error"
|
1364 |
-
msgstr ""
|
1365 |
-
|
1366 |
-
#: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
|
1367 |
-
msgid "Server Status:"
|
1368 |
-
msgstr ""
|
1369 |
-
|
1370 |
-
#: views/packages/main/s2.scan1.php:221
|
1371 |
-
msgid "Scan Complete"
|
1372 |
-
msgstr ""
|
1373 |
-
|
1374 |
-
#: views/packages/main/s2.scan1.php:223
|
1375 |
-
msgid "Process Time:"
|
1376 |
-
msgstr ""
|
1377 |
-
|
1378 |
-
#: views/packages/main/s2.scan1.php:239
|
1379 |
-
msgid "A notice status has been detected, are you sure you want to continue?"
|
1380 |
-
msgstr ""
|
1381 |
-
|
1382 |
-
#: views/packages/main/s2.scan1.php:243
|
1383 |
-
msgid "Yes. Continue with the build process!"
|
1384 |
-
msgstr ""
|
1385 |
-
|
1386 |
-
#: views/packages/main/s2.scan1.php:249
|
1387 |
-
msgid "Scan checks are not required to pass, however they could cause issues on some systems."
|
1388 |
-
msgstr ""
|
1389 |
-
|
1390 |
-
#: views/packages/main/s2.scan1.php:251
|
1391 |
-
msgid "Please review the details for each section by clicking on the detail title."
|
1392 |
-
msgstr ""
|
1393 |
-
|
1394 |
-
#: views/packages/main/s2.scan1.php:258
|
1395 |
-
msgid "Do you want to continue?"
|
1396 |
-
msgstr ""
|
1397 |
-
|
1398 |
-
#: views/packages/main/s2.scan1.php:260
|
1399 |
-
msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
|
1400 |
-
msgstr ""
|
1401 |
-
|
1402 |
-
#: views/packages/main/s2.scan1.php:261
|
1403 |
-
msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
|
1404 |
-
msgstr ""
|
1405 |
-
|
1406 |
-
#: views/packages/main/s2.scan1.php:263
|
1407 |
-
msgid "Yes. Continue without applying any file filters."
|
1408 |
-
msgstr ""
|
1409 |
-
|
1410 |
-
#: views/packages/main/s2.scan1.php:268
|
1411 |
-
msgid "Rescan"
|
1412 |
-
msgstr ""
|
1413 |
-
|
1414 |
-
#: views/packages/main/s2.scan1.php:414
|
1415 |
-
msgid "Unable to perform a full scan, please try the following actions:"
|
1416 |
-
msgstr ""
|
1417 |
-
|
1418 |
-
#: views/packages/main/s2.scan1.php:415
|
1419 |
-
msgid "1. Go back and create a root path directory filter to validate the site is scan-able."
|
1420 |
-
msgstr ""
|
1421 |
-
|
1422 |
-
#: views/packages/main/s2.scan1.php:416
|
1423 |
-
msgid "2. Continue to add/remove filters to isolate which path is causing issues."
|
1424 |
-
msgstr ""
|
1425 |
-
|
1426 |
-
#: views/packages/main/s2.scan1.php:417
|
1427 |
-
msgid "3. This message will go away once the correct filters are applied."
|
1428 |
-
msgstr ""
|
1429 |
-
|
1430 |
-
#: views/packages/main/s2.scan1.php:419
|
1431 |
-
msgid "Common Issues:"
|
1432 |
-
msgstr ""
|
1433 |
-
|
1434 |
-
#: views/packages/main/s2.scan1.php:420
|
1435 |
-
msgid "- On some budget hosts scanning over 30k files can lead to timeout/gateway issues. Consider scanning only your main WordPress site and avoid trying to backup other external directories."
|
1436 |
-
msgstr ""
|
1437 |
-
|
1438 |
-
#: views/packages/main/s2.scan1.php:421
|
1439 |
-
msgid "- Symbolic link recursion can cause timeouts. Ask your server admin if any are present in the scan path. If they are add the full path as a filter and try running the scan again."
|
1440 |
-
msgstr ""
|
1441 |
-
|
1442 |
-
#: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
|
1443 |
-
#: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
|
1444 |
-
msgid "Notice"
|
1445 |
-
msgstr ""
|
1446 |
-
|
1447 |
-
#: views/packages/main/s2.scan1.php:436
|
1448 |
-
msgid "Good"
|
1449 |
-
msgstr ""
|
1450 |
-
|
1451 |
-
#: views/packages/main/s2.scan1.php:437
|
1452 |
-
msgid "Fail"
|
1453 |
-
msgstr ""
|
1454 |
-
|
1455 |
-
#: views/packages/main/s2.scan2.php:7
|
1456 |
-
msgid "Server"
|
1457 |
-
msgstr ""
|
1458 |
-
|
1459 |
-
#: views/packages/main/s2.scan2.php:8
|
1460 |
-
msgid "Show Diagnostics"
|
1461 |
-
msgstr ""
|
1462 |
-
|
1463 |
-
#: views/packages/main/s2.scan2.php:63
|
1464 |
-
#: views/tools/diagnostics/inc.settings.php:51
|
1465 |
-
msgid "Web Server"
|
1466 |
-
msgstr ""
|
1467 |
-
|
1468 |
-
#: views/packages/main/s2.scan2.php:64
|
1469 |
-
msgid "Supported web servers: "
|
1470 |
-
msgstr ""
|
1471 |
-
|
1472 |
-
#: views/packages/main/s2.scan2.php:69
|
1473 |
-
msgid "The minimum PHP version supported by Duplicator is 5.2.9. It is highly recommended to use PHP 5.3+ for improved stability. For international language support please use PHP 7.0+."
|
1474 |
-
msgstr ""
|
1475 |
-
|
1476 |
-
#: views/packages/main/s2.scan2.php:74
|
1477 |
-
msgid "PHP Open Base Dir"
|
1478 |
-
msgstr ""
|
1479 |
-
|
1480 |
-
#: views/packages/main/s2.scan2.php:75
|
1481 |
-
msgid "Issues might occur when [open_basedir] is enabled. Work with your server admin to disable this value in the php.ini file if you’re having issues building a package."
|
1482 |
-
msgstr ""
|
1483 |
-
|
1484 |
-
#: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
|
1485 |
-
msgid "PHP Max Execution Time"
|
1486 |
-
msgstr ""
|
1487 |
-
|
1488 |
-
#: views/packages/main/s2.scan2.php:81
|
1489 |
-
msgid "Timeouts may occur for larger packages when [max_execution_time] time in the php.ini is too low. A value of 0 (recommended) indicates that PHP has no time limits. An attempt is made to override this value if the server allows it."
|
1490 |
-
msgstr ""
|
1491 |
-
|
1492 |
-
#: views/packages/main/s2.scan2.php:84
|
1493 |
-
msgid "Note: Timeouts can also be set at the web server layer, so if the PHP max timeout passes and you still see a build timeout messages, then your web server could be killing the process. If you are on a budget host and limited on processing time, consider using the database or file filters to shrink the size of your overall package. However use caution as excluding the wrong resources can cause your install to not work properly."
|
1494 |
-
msgstr ""
|
1495 |
-
|
1496 |
-
#: views/packages/main/s2.scan2.php:92
|
1497 |
-
msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
|
1498 |
-
msgstr ""
|
1499 |
-
|
1500 |
-
#: views/packages/main/s2.scan2.php:112
|
1501 |
-
msgid "WordPress Version"
|
1502 |
-
msgstr ""
|
1503 |
-
|
1504 |
-
#: views/packages/main/s2.scan2.php:113
|
1505 |
-
#, php-format
|
1506 |
-
msgid "It is recommended to have a version of WordPress that is greater than %1$s. Older version of WordPress can lead to migration issues and are a security risk. If possible please update your WordPress site to the latest version."
|
1507 |
-
msgstr ""
|
1508 |
-
|
1509 |
-
#: views/packages/main/s2.scan2.php:117
|
1510 |
-
msgid "Core Files"
|
1511 |
-
msgstr ""
|
1512 |
-
|
1513 |
-
#: views/packages/main/s2.scan2.php:123
|
1514 |
-
msgid "The core WordPress paths below will <u>not</u> be included in the archive. These paths are required for WordPress to function!"
|
1515 |
-
msgstr ""
|
1516 |
-
|
1517 |
-
#: views/packages/main/s2.scan2.php:134
|
1518 |
-
msgid "The core WordPress file below will <u>not</u> be included in the archive. This file is required for WordPress to function!"
|
1519 |
-
msgstr ""
|
1520 |
-
|
1521 |
-
#: views/packages/main/s2.scan2.php:147
|
1522 |
-
msgid " to the new location for the site to function properly."
|
1523 |
-
msgstr ""
|
1524 |
-
|
1525 |
-
#: views/packages/main/s2.scan2.php:153
|
1526 |
-
msgid "If the scanner is unable to locate the wp-config.php file in the root directory, then you will need to manually copy it to its new location. This check will also look for core WordPress paths that should be included in the archive for WordPress to work correctly."
|
1527 |
-
msgstr ""
|
1528 |
-
|
1529 |
-
#: views/packages/main/s2.scan2.php:172
|
1530 |
-
msgid "Multisite: Unsupported"
|
1531 |
-
msgstr ""
|
1532 |
-
|
1533 |
-
#: views/packages/main/s2.scan2.php:173
|
1534 |
-
msgid "Duplicator does not support WordPress multisite migrations. We recommend using Duplicator Pro which currently supports full multisite migrations and subsite to standalone site migrations."
|
1535 |
-
msgstr ""
|
1536 |
-
|
1537 |
-
#: views/packages/main/s2.scan2.php:177
|
1538 |
-
msgid "While it is not recommended you can still continue with the build of this package. Please note that at install time additional manual custom configurations will need to be made to finalize this multisite migration."
|
1539 |
-
msgstr ""
|
1540 |
-
|
1541 |
-
#: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
|
1542 |
-
msgid "upgrade to pro"
|
1543 |
-
msgstr ""
|
1544 |
-
|
1545 |
-
#: views/packages/main/s2.scan2.php:181
|
1546 |
-
msgid "Multisite: N/A"
|
1547 |
-
msgstr ""
|
1548 |
-
|
1549 |
-
#: views/packages/main/s2.scan2.php:182
|
1550 |
-
msgid "This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site."
|
1551 |
-
msgstr ""
|
1552 |
-
|
1553 |
-
#: views/packages/main/s2.scan3.php:6
|
1554 |
-
#: views/tools/diagnostics/inc.settings.php:55
|
1555 |
-
msgid "Root Path"
|
1556 |
-
msgstr ""
|
1557 |
-
|
1558 |
-
#: views/packages/main/s2.scan3.php:23
|
1559 |
-
msgid "Show Scan Details"
|
1560 |
-
msgstr ""
|
1561 |
-
|
1562 |
-
#: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
|
1563 |
-
#: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
|
1564 |
-
#: views/tools/diagnostics/inc.settings.php:167
|
1565 |
-
msgid "Enabled"
|
1566 |
-
msgstr ""
|
1567 |
-
|
1568 |
-
#: views/packages/main/s2.scan3.php:44
|
1569 |
-
msgid "Archive Size"
|
1570 |
-
msgstr ""
|
1571 |
-
|
1572 |
-
#: views/packages/main/s2.scan3.php:45
|
1573 |
-
msgid "This size includes only files BEFORE compression is applied. It does not include the size of the database script or any applied filters. Once complete the package size will be smaller than this number."
|
1574 |
-
msgstr ""
|
1575 |
-
|
1576 |
-
#: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
|
1577 |
-
#: views/packages/main/s2.scan3.php:442
|
1578 |
-
msgid "uncompressed"
|
1579 |
-
msgstr ""
|
1580 |
-
|
1581 |
-
#: views/packages/main/s2.scan3.php:56
|
1582 |
-
msgid "Database only"
|
1583 |
-
msgstr ""
|
1584 |
-
|
1585 |
-
#: views/packages/main/s2.scan3.php:60
|
1586 |
-
msgid "Only the database and a copy of the installer.php will be included in the archive.zip file."
|
1587 |
-
msgstr ""
|
1588 |
-
|
1589 |
-
#: views/packages/main/s2.scan3.php:67
|
1590 |
-
msgid "Skip archive scan enabled"
|
1591 |
-
msgstr ""
|
1592 |
-
|
1593 |
-
#: views/packages/main/s2.scan3.php:71
|
1594 |
-
msgid "All file checks are skipped. This could cause problems during extraction if problematic files are included."
|
1595 |
-
msgstr ""
|
1596 |
-
|
1597 |
-
#: views/packages/main/s2.scan3.php:73
|
1598 |
-
msgid " Disable the advanced option to re-enable file controls."
|
1599 |
-
msgstr ""
|
1600 |
-
|
1601 |
-
#: views/packages/main/s2.scan3.php:84
|
1602 |
-
msgid "Size Checks"
|
1603 |
-
msgstr ""
|
1604 |
-
|
1605 |
-
#: views/packages/main/s2.scan3.php:89
|
1606 |
-
msgid "File Count"
|
1607 |
-
msgstr ""
|
1608 |
-
|
1609 |
-
#: views/packages/main/s2.scan3.php:90
|
1610 |
-
msgid "Directory Count"
|
1611 |
-
msgstr ""
|
1612 |
-
|
1613 |
-
#: views/packages/main/s2.scan3.php:92
|
1614 |
-
msgid "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
|
1615 |
-
msgstr ""
|
1616 |
-
|
1617 |
-
#: views/packages/main/s2.scan3.php:93
|
1618 |
-
msgid "more details..."
|
1619 |
-
msgstr ""
|
1620 |
-
|
1621 |
-
#: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
|
1622 |
-
#: views/packages/main/s3.build.php:203 views/packages/screen.php:53
|
1623 |
-
msgid "Overview"
|
1624 |
-
msgstr ""
|
1625 |
-
|
1626 |
-
#: views/packages/main/s2.scan3.php:99
|
1627 |
-
#, php-format
|
1628 |
-
msgid "This notice is triggered at [%s] and can be ignored on most hosts. If during the build process you see a \"Host Build Interrupt\" message then this host has strict processing limits. Below are some options you can take to overcome constraints set up on this host."
|
1629 |
-
msgstr ""
|
1630 |
-
|
1631 |
-
#: views/packages/main/s2.scan3.php:103
|
1632 |
-
msgid "Timeout Options"
|
1633 |
-
msgstr ""
|
1634 |
-
|
1635 |
-
#: views/packages/main/s2.scan3.php:105
|
1636 |
-
msgid "Apply the \"Quick Filters\" below or click the back button to apply on previous page."
|
1637 |
-
msgstr ""
|
1638 |
-
|
1639 |
-
#: views/packages/main/s2.scan3.php:106
|
1640 |
-
msgid "See the FAQ link to adjust this hosts timeout limits: "
|
1641 |
-
msgstr ""
|
1642 |
-
|
1643 |
-
#: views/packages/main/s2.scan3.php:106
|
1644 |
-
msgid "What can I try for Timeout Issues?"
|
1645 |
-
msgstr ""
|
1646 |
-
|
1647 |
-
#: views/packages/main/s2.scan3.php:107
|
1648 |
-
msgid "Consider trying multi-threaded support in "
|
1649 |
-
msgstr ""
|
1650 |
-
|
1651 |
-
#: views/packages/main/s2.scan3.php:108
|
1652 |
-
msgid "Duplicator Pro."
|
1653 |
-
msgstr ""
|
1654 |
-
|
1655 |
-
#: views/packages/main/s2.scan3.php:112
|
1656 |
-
#, php-format
|
1657 |
-
msgid "Files over %1$s are listed below. Larger files such as movies or zipped content can cause timeout issues on some budget hosts. If you are having issues creating a package try excluding the directory paths below or go back to Step 1 and add them."
|
1658 |
-
msgstr ""
|
1659 |
-
|
1660 |
-
#: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
|
1661 |
-
#: views/packages/main/s2.scan3.php:257
|
1662 |
-
msgid "Quick Filters"
|
1663 |
-
msgstr ""
|
1664 |
-
|
1665 |
-
#: views/packages/main/s2.scan3.php:122
|
1666 |
-
msgid "Large Files"
|
1667 |
-
msgstr ""
|
1668 |
-
|
1669 |
-
#: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
|
1670 |
-
msgid "Hide All"
|
1671 |
-
msgstr ""
|
1672 |
-
|
1673 |
-
#: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
|
1674 |
-
msgid "Show All"
|
1675 |
-
msgstr ""
|
1676 |
-
|
1677 |
-
#: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
|
1678 |
-
msgid "Core WordPress directories should not be filtered. Use caution when excluding files."
|
1679 |
-
msgstr ""
|
1680 |
-
|
1681 |
-
#: views/packages/main/s2.scan3.php:156
|
1682 |
-
msgid "No large files found during this scan."
|
1683 |
-
msgstr ""
|
1684 |
-
|
1685 |
-
#: views/packages/main/s2.scan3.php:159
|
1686 |
-
msgid "No large files found during this scan. If you're having issues building a package click the back button and try adding a file filter to non-essential files paths like wp-content/uploads. These excluded files can then be manually moved to the new location after you have ran the migration installer."
|
1687 |
-
msgstr ""
|
1688 |
-
|
1689 |
-
#: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
|
1690 |
-
msgid "*Checking a directory will exclude all items recursively from that path down. Please use caution when filtering directories."
|
1691 |
-
msgstr ""
|
1692 |
-
|
1693 |
-
#: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
|
1694 |
-
#: views/packages/main/s2.scan3.php:305
|
1695 |
-
msgid "Add Filters & Rescan"
|
1696 |
-
msgstr ""
|
1697 |
-
|
1698 |
-
#: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
|
1699 |
-
msgid "Copy Paths to Clipboard"
|
1700 |
-
msgstr ""
|
1701 |
-
|
1702 |
-
#: views/packages/main/s2.scan3.php:193
|
1703 |
-
msgid "Addon Sites"
|
1704 |
-
msgstr ""
|
1705 |
-
|
1706 |
-
#: views/packages/main/s2.scan3.php:199
|
1707 |
-
msgid "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories within this site. If you confirm these to be separate sites, then it is recommended that you exclude them by checking the corresponding boxes below and clicking the 'Add Filters & Rescan' button. To backup the other sites install the plugin on the sites needing to be backed-up."
|
1708 |
-
msgstr ""
|
1709 |
-
|
1710 |
-
#: views/packages/main/s2.scan3.php:222
|
1711 |
-
msgid "No add on sites found."
|
1712 |
-
msgstr ""
|
1713 |
-
|
1714 |
-
#: views/packages/main/s2.scan3.php:228
|
1715 |
-
msgid "*Checking a directory will exclude all items in that path recursively."
|
1716 |
-
msgstr ""
|
1717 |
-
|
1718 |
-
#: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
|
1719 |
-
msgid "Name Checks"
|
1720 |
-
msgstr ""
|
1721 |
-
|
1722 |
-
#: views/packages/main/s2.scan3.php:249
|
1723 |
-
msgid "Unicode and special characters such as \"*?><:/\\|\", can be problematic on some hosts."
|
1724 |
-
msgstr ""
|
1725 |
-
|
1726 |
-
#: views/packages/main/s2.scan3.php:250
|
1727 |
-
msgid " Only consider using this filter if the package build is failing. Select files that are not important to your site or you can migrate manually."
|
1728 |
-
msgstr ""
|
1729 |
-
|
1730 |
-
#: views/packages/main/s2.scan3.php:251
|
1731 |
-
msgid "If this environment/system and the system where it will be installed are set up to support Unicode and long paths then these filters can be ignored. If you run into issues with creating or installing a package, then is recommended to filter these paths."
|
1732 |
-
msgstr ""
|
1733 |
-
|
1734 |
-
#: views/packages/main/s2.scan3.php:296
|
1735 |
-
msgid "No file/directory name warnings found."
|
1736 |
-
msgstr ""
|
1737 |
-
|
1738 |
-
#: views/packages/main/s2.scan3.php:319
|
1739 |
-
msgid "Read Checks"
|
1740 |
-
msgstr ""
|
1741 |
-
|
1742 |
-
#: views/packages/main/s2.scan3.php:324
|
1743 |
-
msgid "PHP is unable to read the following items and they will NOT be included in the package. Please work with your host to adjust the permissions or resolve the symbolic-link(s) shown in the lists below. If these items are not needed then this notice can be ignored."
|
1744 |
-
msgstr ""
|
1745 |
-
|
1746 |
-
#: views/packages/main/s2.scan3.php:330
|
1747 |
-
msgid "Unreadable Items:"
|
1748 |
-
msgstr ""
|
1749 |
-
|
1750 |
-
#: views/packages/main/s2.scan3.php:337
|
1751 |
-
msgid "No unreadable items found."
|
1752 |
-
msgstr ""
|
1753 |
-
|
1754 |
-
#: views/packages/main/s2.scan3.php:341
|
1755 |
-
msgid "Recursive Links:"
|
1756 |
-
msgstr ""
|
1757 |
-
|
1758 |
-
#: views/packages/main/s2.scan3.php:348
|
1759 |
-
msgid "No recursive sym-links found."
|
1760 |
-
msgstr ""
|
1761 |
-
|
1762 |
-
#: views/packages/main/s2.scan3.php:376
|
1763 |
-
msgid "Database Size:"
|
1764 |
-
msgstr ""
|
1765 |
-
|
1766 |
-
#: views/packages/main/s2.scan3.php:377
|
1767 |
-
msgid "The database size represents only the included tables. The process for gathering the size uses the query SHOW TABLE STATUS. The overall size of the database file can impact the final size of the package."
|
1768 |
-
msgstr ""
|
1769 |
-
|
1770 |
-
#: views/packages/main/s2.scan3.php:391
|
1771 |
-
msgid "TOTAL SIZE"
|
1772 |
-
msgstr ""
|
1773 |
-
|
1774 |
-
#: views/packages/main/s2.scan3.php:394
|
1775 |
-
msgid "Records"
|
1776 |
-
msgstr ""
|
1777 |
-
|
1778 |
-
#: views/packages/main/s2.scan3.php:397
|
1779 |
-
#, php-format
|
1780 |
-
msgid "Total size and row counts are approximate values. The thresholds that trigger notices are %1$s records total for the entire database. Larger databases take more time to process. On some budget hosts that have cpu/memory/timeout limits this may cause issues."
|
1781 |
-
msgstr ""
|
1782 |
-
|
1783 |
-
#: views/packages/main/s2.scan3.php:402
|
1784 |
-
msgid "TABLE DETAILS:"
|
1785 |
-
msgstr ""
|
1786 |
-
|
1787 |
-
#: views/packages/main/s2.scan3.php:404
|
1788 |
-
#, php-format
|
1789 |
-
msgid "The notices for tables are %1$s records or names with upper-case characters. Individual tables will not trigger a notice message, but can help narrow down issues if they occur later on."
|
1790 |
-
msgstr ""
|
1791 |
-
|
1792 |
-
#: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
|
1793 |
-
msgid "RECOMMENDATIONS:"
|
1794 |
-
msgstr ""
|
1795 |
-
|
1796 |
-
#: views/packages/main/s2.scan3.php:414
|
1797 |
-
msgid "repair and optimization"
|
1798 |
-
msgstr ""
|
1799 |
-
|
1800 |
-
#: views/packages/main/s2.scan3.php:415
|
1801 |
-
#, php-format
|
1802 |
-
msgid "1. Run a %1$s on the table to improve the overall size and performance."
|
1803 |
-
msgstr ""
|
1804 |
-
|
1805 |
-
#: views/packages/main/s2.scan3.php:417
|
1806 |
-
msgid "2. Remove post revisions and stale data from tables. Tables such as logs, statistical or other non-critical data should be cleared."
|
1807 |
-
msgstr ""
|
1808 |
-
|
1809 |
-
#: views/packages/main/s2.scan3.php:419
|
1810 |
-
msgid "Enable mysqldump"
|
1811 |
-
msgstr ""
|
1812 |
-
|
1813 |
-
#: views/packages/main/s2.scan3.php:420
|
1814 |
-
#, php-format
|
1815 |
-
msgid "3. %1$s if this host supports the option."
|
1816 |
-
msgstr ""
|
1817 |
-
|
1818 |
-
#: views/packages/main/s2.scan3.php:422
|
1819 |
-
msgid "lower_case_table_names"
|
1820 |
-
msgstr ""
|
1821 |
-
|
1822 |
-
#: views/packages/main/s2.scan3.php:423
|
1823 |
-
#, php-format
|
1824 |
-
msgid "4. For table name case sensitivity issues either rename the table with lower case characters or be prepared to work with the %1$s system variable setting."
|
1825 |
-
msgstr ""
|
1826 |
-
|
1827 |
-
#: views/packages/main/s2.scan3.php:434
|
1828 |
-
msgid "Total Size"
|
1829 |
-
msgstr ""
|
1830 |
-
|
1831 |
-
#: views/packages/main/s2.scan3.php:439
|
1832 |
-
msgid "Total Size:"
|
1833 |
-
msgstr ""
|
1834 |
-
|
1835 |
-
#: views/packages/main/s2.scan3.php:440
|
1836 |
-
msgid "The total size of the site (files plus database)."
|
1837 |
-
msgstr ""
|
1838 |
-
|
1839 |
-
#: views/packages/main/s2.scan3.php:450
|
1840 |
-
#, php-format
|
1841 |
-
msgid "The build can't continue because the total size of files and the database exceeds the %s limit that can be processed when creating a DupArchive package. "
|
1842 |
-
msgstr ""
|
1843 |
-
|
1844 |
-
#: views/packages/main/s2.scan3.php:451
|
1845 |
-
msgid "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-recommendations').toggle()\">Click for recommendations.</a>"
|
1846 |
-
msgstr ""
|
1847 |
-
|
1848 |
-
#: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
|
1849 |
-
#: views/settings/packages.php:208
|
1850 |
-
msgid "Archive Engine"
|
1851 |
-
msgstr ""
|
1852 |
-
|
1853 |
-
#: views/packages/main/s2.scan3.php:459
|
1854 |
-
#, php-format
|
1855 |
-
msgid " With DupArchive, Duplicator is restricted to processing sites up to %s. To process larger sites, consider these recommendations. "
|
1856 |
-
msgstr ""
|
1857 |
-
|
1858 |
-
#: views/packages/main/s2.scan3.php:468
|
1859 |
-
msgid "Step 1"
|
1860 |
-
msgstr ""
|
1861 |
-
|
1862 |
-
#: views/packages/main/s2.scan3.php:469
|
1863 |
-
#, php-format
|
1864 |
-
msgid "- Add data filters to get the package size under %s: "
|
1865 |
-
msgstr ""
|
1866 |
-
|
1867 |
-
#: views/packages/main/s2.scan3.php:471
|
1868 |
-
msgid "- In the 'Size Checks' section above consider adding filters (if notice is shown)."
|
1869 |
-
msgstr ""
|
1870 |
-
|
1871 |
-
#: views/packages/main/s2.scan3.php:473
|
1872 |
-
#, php-format
|
1873 |
-
msgid "- In %s consider adding file/directory or database table filters."
|
1874 |
-
msgstr ""
|
1875 |
-
|
1876 |
-
#: views/packages/main/s2.scan3.php:477
|
1877 |
-
msgid "covered here."
|
1878 |
-
msgstr ""
|
1879 |
-
|
1880 |
-
#: views/packages/main/s2.scan3.php:478
|
1881 |
-
#, php-format
|
1882 |
-
msgid "- Perform a two part install %s"
|
1883 |
-
msgstr ""
|
1884 |
-
|
1885 |
-
#: views/packages/main/s2.scan3.php:481
|
1886 |
-
msgid "ZipArchive Engine"
|
1887 |
-
msgstr ""
|
1888 |
-
|
1889 |
-
#: views/packages/main/s2.scan3.php:482
|
1890 |
-
#, php-format
|
1891 |
-
msgid "- Switch to the %s which requires a capable hosting provider (VPS recommended)."
|
1892 |
-
msgstr ""
|
1893 |
-
|
1894 |
-
#: views/packages/main/s2.scan3.php:486
|
1895 |
-
#, php-format
|
1896 |
-
msgid "- Consider upgrading to %s for large site support. (unlimited)"
|
1897 |
-
msgstr ""
|
1898 |
-
|
1899 |
-
#: views/packages/main/s2.scan3.php:496
|
1900 |
-
msgid "Migrate large, multi-gig sites with"
|
1901 |
-
msgstr ""
|
1902 |
-
|
1903 |
-
#: views/packages/main/s2.scan3.php:511
|
1904 |
-
msgid "Scan Details"
|
1905 |
-
msgstr ""
|
1906 |
-
|
1907 |
-
#: views/packages/main/s2.scan3.php:518
|
1908 |
-
msgid "Copy Quick Filter Paths"
|
1909 |
-
msgstr ""
|
1910 |
-
|
1911 |
-
#: views/packages/main/s2.scan3.php:537
|
1912 |
-
msgid "Name:"
|
1913 |
-
msgstr ""
|
1914 |
-
|
1915 |
-
#: views/packages/main/s2.scan3.php:538
|
1916 |
-
msgid "Host:"
|
1917 |
-
msgstr ""
|
1918 |
-
|
1919 |
-
#: views/packages/main/s2.scan3.php:540
|
1920 |
-
msgid "Build Mode:"
|
1921 |
-
msgstr ""
|
1922 |
-
|
1923 |
-
#: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
|
1924 |
-
msgid "File Filters"
|
1925 |
-
msgstr ""
|
1926 |
-
|
1927 |
-
#: views/packages/main/s2.scan3.php:557
|
1928 |
-
#: views/tools/diagnostics/inc.settings.php:167
|
1929 |
-
msgid "Disabled"
|
1930 |
-
msgstr ""
|
1931 |
-
|
1932 |
-
#: views/packages/main/s2.scan3.php:571
|
1933 |
-
msgid "No custom directory filters set."
|
1934 |
-
msgstr ""
|
1935 |
-
|
1936 |
-
#: views/packages/main/s2.scan3.php:581
|
1937 |
-
msgid "No file extension filters have been set."
|
1938 |
-
msgstr ""
|
1939 |
-
|
1940 |
-
#: views/packages/main/s2.scan3.php:593
|
1941 |
-
msgid "No custom file filters set."
|
1942 |
-
msgstr ""
|
1943 |
-
|
1944 |
-
#: views/packages/main/s2.scan3.php:597
|
1945 |
-
msgid "Auto Directory Filters"
|
1946 |
-
msgstr ""
|
1947 |
-
|
1948 |
-
#: views/packages/main/s2.scan3.php:603
|
1949 |
-
msgid "Auto File Filters"
|
1950 |
-
msgstr ""
|
1951 |
-
|
1952 |
-
#: views/packages/main/s2.scan3.php:616
|
1953 |
-
msgid "Path filters will be skipped during the archive process when enabled."
|
1954 |
-
msgstr ""
|
1955 |
-
|
1956 |
-
#: views/packages/main/s2.scan3.php:618
|
1957 |
-
msgid "[view json result report]"
|
1958 |
-
msgstr ""
|
1959 |
-
|
1960 |
-
#: views/packages/main/s2.scan3.php:621
|
1961 |
-
msgid "Auto filters are applied to prevent archiving other backup sets."
|
1962 |
-
msgstr ""
|
1963 |
-
|
1964 |
-
#: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
|
1965 |
-
msgid "Click to Copy"
|
1966 |
-
msgstr ""
|
1967 |
-
|
1968 |
-
#: views/packages/main/s2.scan3.php:646
|
1969 |
-
msgid "Copy the paths above and apply them as needed on Step 1 > Archive > Files section."
|
1970 |
-
msgstr ""
|
1971 |
-
|
1972 |
-
#: views/packages/main/s2.scan3.php:663
|
1973 |
-
msgid "Directory applied filter set."
|
1974 |
-
msgstr ""
|
1975 |
-
|
1976 |
-
#: views/packages/main/s2.scan3.php:690
|
1977 |
-
msgid "No directories have been selected!"
|
1978 |
-
msgstr ""
|
1979 |
-
|
1980 |
-
#: views/packages/main/s2.scan3.php:694
|
1981 |
-
msgid "No files have been selected!"
|
1982 |
-
msgstr ""
|
1983 |
-
|
1984 |
-
#: views/packages/main/s2.scan3.php:732
|
1985 |
-
msgid "Copied to Clipboard!"
|
1986 |
-
msgstr ""
|
1987 |
-
|
1988 |
-
#: views/packages/main/s2.scan3.php:734
|
1989 |
-
msgid "Manual copy of selected text required on this browser."
|
1990 |
-
msgstr ""
|
1991 |
-
|
1992 |
-
#: views/packages/main/s2.scan3.php:741
|
1993 |
-
msgid "Initializing Please Wait..."
|
1994 |
-
msgstr ""
|
1995 |
-
|
1996 |
-
#: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
|
1997 |
-
msgid "Error applying filters. Please go back to Step 1 to add filter manually!"
|
1998 |
-
msgstr ""
|
1999 |
-
|
2000 |
-
#: views/packages/main/s2.scan3.php:867
|
2001 |
-
msgid "Unable to report on any tables"
|
2002 |
-
msgstr ""
|
2003 |
-
|
2004 |
-
#: views/packages/main/s2.scan3.php:893
|
2005 |
-
msgid "Unable to report on database stats"
|
2006 |
-
msgstr ""
|
2007 |
-
|
2008 |
-
#: views/packages/main/s3.build.php:16
|
2009 |
-
msgid "Help review the plugin"
|
2010 |
-
msgstr ""
|
2011 |
-
|
2012 |
-
#: views/packages/main/s3.build.php:19
|
2013 |
-
msgid "Want more power? Try"
|
2014 |
-
msgstr ""
|
2015 |
-
|
2016 |
-
#: views/packages/main/s3.build.php:84
|
2017 |
-
msgid "Step 3: Build Package"
|
2018 |
-
msgstr ""
|
2019 |
-
|
2020 |
-
#: views/packages/main/s3.build.php:114
|
2021 |
-
msgid "Building Package"
|
2022 |
-
msgstr ""
|
2023 |
-
|
2024 |
-
#: views/packages/main/s3.build.php:117
|
2025 |
-
msgid "Keep this window open and do not close during the build process."
|
2026 |
-
msgstr ""
|
2027 |
-
|
2028 |
-
#: views/packages/main/s3.build.php:118
|
2029 |
-
msgid "This may take several minutes to complete."
|
2030 |
-
msgstr ""
|
2031 |
-
|
2032 |
-
#: views/packages/main/s3.build.php:122
|
2033 |
-
msgid "Build Status"
|
2034 |
-
msgstr ""
|
2035 |
-
|
2036 |
-
#: views/packages/main/s3.build.php:129
|
2037 |
-
msgid "Package Completed"
|
2038 |
-
msgstr ""
|
2039 |
-
|
2040 |
-
#: views/packages/main/s3.build.php:134
|
2041 |
-
msgid "Process Time"
|
2042 |
-
msgstr ""
|
2043 |
-
|
2044 |
-
#: views/packages/main/s3.build.php:140
|
2045 |
-
msgid "Download Files"
|
2046 |
-
msgstr ""
|
2047 |
-
|
2048 |
-
#: views/packages/main/s3.build.php:142
|
2049 |
-
msgid "Click to download installer file"
|
2050 |
-
msgstr ""
|
2051 |
-
|
2052 |
-
#: views/packages/main/s3.build.php:145
|
2053 |
-
msgid "Click to download archive file"
|
2054 |
-
msgstr ""
|
2055 |
-
|
2056 |
-
#: views/packages/main/s3.build.php:151
|
2057 |
-
msgid "Click to download both files"
|
2058 |
-
msgstr ""
|
2059 |
-
|
2060 |
-
#: views/packages/main/s3.build.php:152
|
2061 |
-
msgid "One-Click Download"
|
2062 |
-
msgstr ""
|
2063 |
-
|
2064 |
-
#: views/packages/main/s3.build.php:155
|
2065 |
-
msgid "One Click:"
|
2066 |
-
msgstr ""
|
2067 |
-
|
2068 |
-
#: views/packages/main/s3.build.php:156
|
2069 |
-
msgid "Clicking this link will open both the installer and archive download prompts at the same time. On some browsers you may have to disable pop-up warnings on this domain for this to work correctly."
|
2070 |
-
msgstr ""
|
2071 |
-
|
2072 |
-
#: views/packages/main/s3.build.php:164
|
2073 |
-
msgid "How do I install this Package?"
|
2074 |
-
msgstr ""
|
2075 |
-
|
2076 |
-
#: views/packages/main/s3.build.php:176
|
2077 |
-
msgid "Host Build Interrupt"
|
2078 |
-
msgstr ""
|
2079 |
-
|
2080 |
-
#: views/packages/main/s3.build.php:177
|
2081 |
-
msgid "This server cannot complete the build due to host setup constraints."
|
2082 |
-
msgstr ""
|
2083 |
-
|
2084 |
-
#: views/packages/main/s3.build.php:178
|
2085 |
-
msgid "To get past this hosts limitation consider the options below by clicking each section."
|
2086 |
-
msgstr ""
|
2087 |
-
|
2088 |
-
#: views/packages/main/s3.build.php:184
|
2089 |
-
msgid "Option 1: Try DupArchive"
|
2090 |
-
msgstr ""
|
2091 |
-
|
2092 |
-
#: views/packages/main/s3.build.php:188
|
2093 |
-
msgid "OPTION 1:"
|
2094 |
-
msgstr ""
|
2095 |
-
|
2096 |
-
#: views/packages/main/s3.build.php:190
|
2097 |
-
msgid "Enable the DupArchive format which is specific to Duplicator and designed to perform better on constrained budget hosts."
|
2098 |
-
msgstr ""
|
2099 |
-
|
2100 |
-
#: views/packages/main/s3.build.php:194
|
2101 |
-
msgid "Note: DupArchive on Duplicator only supports sites up to 500MB. If your site is over 500MB then use a file filter on step 1 to get the size below 500MB or try the other options mentioned below. Alternatively, you may want to consider"
|
2102 |
-
msgstr ""
|
2103 |
-
|
2104 |
-
#: views/packages/main/s3.build.php:200
|
2105 |
-
msgid " which is capable of migrating sites much larger than 500MB."
|
2106 |
-
msgstr ""
|
2107 |
-
|
2108 |
-
#: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
|
2109 |
-
msgid "Please follow these steps:"
|
2110 |
-
msgstr ""
|
2111 |
-
|
2112 |
-
#: views/packages/main/s3.build.php:206
|
2113 |
-
msgid "On the scanner step check to make sure your package is under 500MB. If not see additional options below."
|
2114 |
-
msgstr ""
|
2115 |
-
|
2116 |
-
#: views/packages/main/s3.build.php:208
|
2117 |
-
msgid "Go to Duplicator > Settings > Packages Tab > Archive Engine >"
|
2118 |
-
msgstr ""
|
2119 |
-
|
2120 |
-
#: views/packages/main/s3.build.php:209
|
2121 |
-
msgid "Enable DupArchive"
|
2122 |
-
msgstr ""
|
2123 |
-
|
2124 |
-
#: views/packages/main/s3.build.php:211
|
2125 |
-
msgid "Build a new package using the new engine format."
|
2126 |
-
msgstr ""
|
2127 |
-
|
2128 |
-
#: views/packages/main/s3.build.php:215
|
2129 |
-
msgid "Note: The DupArchive engine will generate an archive.daf file. This file is very similar to a .zip except that it can only be extracted by the installer.php file or the"
|
2130 |
-
msgstr ""
|
2131 |
-
|
2132 |
-
#: views/packages/main/s3.build.php:217
|
2133 |
-
msgid "commandline extraction tool"
|
2134 |
-
msgstr ""
|
2135 |
-
|
2136 |
-
#: views/packages/main/s3.build.php:225
|
2137 |
-
msgid "Option 2: File Filters"
|
2138 |
-
msgstr ""
|
2139 |
-
|
2140 |
-
#: views/packages/main/s3.build.php:229
|
2141 |
-
msgid "OPTION 2:"
|
2142 |
-
msgstr ""
|
2143 |
-
|
2144 |
-
#: views/packages/main/s3.build.php:231
|
2145 |
-
msgid "The first pass for reading files on some budget hosts maybe slow and have conflicts with strict timeout settings setup by the hosting provider. In these cases, it is recommended to retry the build by adding file filters to larger files/directories."
|
2146 |
-
msgstr ""
|
2147 |
-
|
2148 |
-
#: views/packages/main/s3.build.php:236
|
2149 |
-
msgid "For example, you could filter out the \"/wp-content/uploads/\" folder to create the package then move the files from that directory over manually. If this work-flow is not desired or does not work please check-out the other options below."
|
2150 |
-
msgstr ""
|
2151 |
-
|
2152 |
-
#: views/packages/main/s3.build.php:241
|
2153 |
-
msgid "Retry Build With Filters"
|
2154 |
-
msgstr ""
|
2155 |
-
|
2156 |
-
#: views/packages/main/s3.build.php:247
|
2157 |
-
msgid "Build Folder:"
|
2158 |
-
msgstr ""
|
2159 |
-
|
2160 |
-
#: views/packages/main/s3.build.php:248
|
2161 |
-
msgid "On some servers the build will continue to run in the background. To validate if a build is still running; open the 'tmp' folder above and see if the archive file is growing in size or check the main packages screen to see if the package completed. If it is not then your server has strict timeout constraints."
|
2162 |
-
msgstr ""
|
2163 |
-
|
2164 |
-
#: views/packages/main/s3.build.php:260
|
2165 |
-
msgid "Option 3: Two-Part Install"
|
2166 |
-
msgstr ""
|
2167 |
-
|
2168 |
-
#: views/packages/main/s3.build.php:264
|
2169 |
-
msgid "OPTION 3:"
|
2170 |
-
msgstr ""
|
2171 |
-
|
2172 |
-
#: views/packages/main/s3.build.php:266
|
2173 |
-
msgid "A two-part install minimizes server load and can avoid I/O and CPU issues encountered on some budget hosts. With this procedure you simply build a 'database-only' archive, manually move the website files, and then run the installer to complete the process."
|
2174 |
-
msgstr ""
|
2175 |
-
|
2176 |
-
#: views/packages/main/s3.build.php:270
|
2177 |
-
msgid " Overview"
|
2178 |
-
msgstr ""
|
2179 |
-
|
2180 |
-
#: views/packages/main/s3.build.php:273
|
2181 |
-
msgid "Click the button below to go back to Step 1."
|
2182 |
-
msgstr ""
|
2183 |
-
|
2184 |
-
#: views/packages/main/s3.build.php:274
|
2185 |
-
msgid "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
|
2186 |
-
msgstr ""
|
2187 |
-
|
2188 |
-
#: views/packages/main/s3.build.php:276
|
2189 |
-
msgid "Complete the package build and follow the "
|
2190 |
-
msgstr ""
|
2191 |
-
|
2192 |
-
#: views/packages/main/s3.build.php:286
|
2193 |
-
msgid "Yes. I have read the above overview and would like to continue!"
|
2194 |
-
msgstr ""
|
2195 |
-
|
2196 |
-
#: views/packages/main/s3.build.php:288
|
2197 |
-
msgid "Start Two-Part Install Process"
|
2198 |
-
msgstr ""
|
2199 |
-
|
2200 |
-
#: views/packages/main/s3.build.php:297
|
2201 |
-
msgid "Option 4: Configure Server"
|
2202 |
-
msgstr ""
|
2203 |
-
|
2204 |
-
#: views/packages/main/s3.build.php:301
|
2205 |
-
msgid "OPTION 4:"
|
2206 |
-
msgstr ""
|
2207 |
-
|
2208 |
-
#: views/packages/main/s3.build.php:302
|
2209 |
-
msgid "This option is available on some hosts that allow for users to adjust server configurations. With this option you will be directed to an FAQ page that will show various recommendations you can take to improve/unlock constraints set up on this server."
|
2210 |
-
msgstr ""
|
2211 |
-
|
2212 |
-
#: views/packages/main/s3.build.php:308
|
2213 |
-
msgid "Diagnose Server Setup"
|
2214 |
-
msgstr ""
|
2215 |
-
|
2216 |
-
#: views/packages/main/s3.build.php:312
|
2217 |
-
msgid "RUNTIME DETAILS"
|
2218 |
-
msgstr ""
|
2219 |
-
|
2220 |
-
#: views/packages/main/s3.build.php:315
|
2221 |
-
msgid "Allowed Runtime:"
|
2222 |
-
msgstr ""
|
2223 |
-
|
2224 |
-
#: views/packages/main/s3.build.php:319
|
2225 |
-
msgid "PHP Max Execution"
|
2226 |
-
msgstr ""
|
2227 |
-
|
2228 |
-
#: views/packages/main/s3.build.php:329
|
2229 |
-
msgid "This value is represented in seconds. A value of 0 means no timeout limit is set for PHP."
|
2230 |
-
msgstr ""
|
2231 |
-
|
2232 |
-
#: views/packages/main/s3.build.php:333 views/settings/packages.php:167
|
2233 |
-
msgid "Mode"
|
2234 |
-
msgstr ""
|
2235 |
-
|
2236 |
-
#: views/packages/main/s3.build.php:339
|
2237 |
-
msgid "PHP Max Execution Mode"
|
2238 |
-
msgstr ""
|
2239 |
-
|
2240 |
-
#: views/packages/main/s3.build.php:341
|
2241 |
-
msgid "If the value is [dynamic] then its possible for PHP to run longer than the default. If the value is [fixed] then PHP will not be allowed to run longer than the default. <br/><br/> If this value is larger than the [Allowed Runtime] above then the web server has been enabled with a timeout cap and is overriding the PHP max time setting."
|
2242 |
-
msgstr ""
|
2243 |
-
|
2244 |
-
#: views/packages/main/s3.build.php:362
|
2245 |
-
msgid "Read Package Log File"
|
2246 |
-
msgstr ""
|
2247 |
-
|
2248 |
-
#: views/packages/screen.php:64
|
2249 |
-
msgid "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</b><br/>To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-archive'></i> Archive Types</b><br/>An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for 'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
|
2250 |
-
msgstr ""
|
2251 |
-
|
2252 |
-
#: views/packages/screen.php:85
|
2253 |
-
msgid "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not required. <br/><br/>"
|
2254 |
-
msgstr ""
|
2255 |
-
|
2256 |
-
#: views/packages/screen.php:97
|
2257 |
-
msgid "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>"
|
2258 |
-
msgstr ""
|
2259 |
-
|
2260 |
-
#: views/packages/screen.php:105
|
2261 |
-
msgid ""
|
2262 |
-
"<b>Packages » 3 Build</b> <br/>The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: <ol><li>Download the installer.php and archive.zip files to your local computer.</li><li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li><li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li></ol>For complete instructions see:<br/>\n"
|
2263 |
-
"\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help&utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
|
2264 |
-
"\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
|
2265 |
-
msgstr ""
|
2266 |
-
|
2267 |
-
#: views/packages/screen.php:122
|
2268 |
-
msgid "<b>Packages » Details</b> <br/>The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>"
|
2269 |
-
msgstr ""
|
2270 |
-
|
2271 |
-
#: views/settings/about-info.php:49
|
2272 |
-
msgid "Duplicator can streamline your workflow and quickly clone/migrate a WordPress site. The plugin helps admins, designers and developers speed up the migration process of moving a WordPress site. Please help us continue development by giving the plugin a 5 star."
|
2273 |
-
msgstr ""
|
2274 |
-
|
2275 |
-
#: views/settings/about-info.php:58
|
2276 |
-
msgid "Rate Duplicator"
|
2277 |
-
msgstr ""
|
2278 |
-
|
2279 |
-
#: views/settings/about-info.php:69
|
2280 |
-
msgid "Support Duplicator"
|
2281 |
-
msgstr ""
|
2282 |
-
|
2283 |
-
#: views/settings/about-info.php:71
|
2284 |
-
msgid "with a 5 star review!"
|
2285 |
-
msgstr ""
|
2286 |
-
|
2287 |
-
#: views/settings/about-info.php:85
|
2288 |
-
msgid "Spread the Word"
|
2289 |
-
msgstr ""
|
2290 |
-
|
2291 |
-
#: views/settings/about-info.php:92
|
2292 |
-
msgid "Facebook"
|
2293 |
-
msgstr ""
|
2294 |
-
|
2295 |
-
#: views/settings/about-info.php:95
|
2296 |
-
msgid "Twitter"
|
2297 |
-
msgstr ""
|
2298 |
-
|
2299 |
-
#: views/settings/about-info.php:98
|
2300 |
-
msgid "LinkedIn"
|
2301 |
-
msgstr ""
|
2302 |
-
|
2303 |
-
#: views/settings/about-info.php:101
|
2304 |
-
msgid "Google+"
|
2305 |
-
msgstr ""
|
2306 |
-
|
2307 |
-
#: views/settings/about-info.php:120
|
2308 |
-
msgid "Stay in the Loop"
|
2309 |
-
msgstr ""
|
2310 |
-
|
2311 |
-
#: views/settings/about-info.php:130
|
2312 |
-
msgid "Subscribe to the Duplicator newsletter and stay on top of great ideas, tutorials, and better ways to improve your workflows"
|
2313 |
-
msgstr ""
|
2314 |
-
|
2315 |
-
#: views/settings/controller.php:24
|
2316 |
-
msgid "Schedules"
|
2317 |
-
msgstr ""
|
2318 |
-
|
2319 |
-
#: views/settings/controller.php:26
|
2320 |
-
msgid "License"
|
2321 |
-
msgstr ""
|
2322 |
-
|
2323 |
-
#: views/settings/controller.php:27
|
2324 |
-
msgid "About"
|
2325 |
-
msgstr ""
|
2326 |
-
|
2327 |
-
#: views/settings/general.php:8
|
2328 |
-
msgid "General Settings Saved"
|
2329 |
-
msgstr ""
|
2330 |
-
|
2331 |
-
#: views/settings/general.php:88
|
2332 |
-
msgid "Plugin"
|
2333 |
-
msgstr ""
|
2334 |
-
|
2335 |
-
#: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
|
2336 |
-
#: views/tools/diagnostics/inc.settings.php:110
|
2337 |
-
#: views/tools/diagnostics/inc.settings.php:183
|
2338 |
-
msgid "Version"
|
2339 |
-
msgstr ""
|
2340 |
-
|
2341 |
-
#: views/settings/general.php:99
|
2342 |
-
msgid "Uninstall"
|
2343 |
-
msgstr ""
|
2344 |
-
|
2345 |
-
#: views/settings/general.php:102
|
2346 |
-
msgid "Delete Plugin Settings"
|
2347 |
-
msgstr ""
|
2348 |
-
|
2349 |
-
#: views/settings/general.php:105
|
2350 |
-
msgid "Delete Entire Storage Directory"
|
2351 |
-
msgstr ""
|
2352 |
-
|
2353 |
-
#: views/settings/general.php:112
|
2354 |
-
msgid "Full Path"
|
2355 |
-
msgstr ""
|
2356 |
-
|
2357 |
-
#: views/settings/general.php:115
|
2358 |
-
msgid "Disable .htaccess File In Storage Directory"
|
2359 |
-
msgstr ""
|
2360 |
-
|
2361 |
-
#: views/settings/general.php:117
|
2362 |
-
msgid "Disable if issues occur when downloading installer/archive files."
|
2363 |
-
msgstr ""
|
2364 |
-
|
2365 |
-
#: views/settings/general.php:122
|
2366 |
-
msgid "Custom Roles"
|
2367 |
-
msgstr ""
|
2368 |
-
|
2369 |
-
#: views/settings/general.php:125
|
2370 |
-
msgid "Enable User Role Editor Plugin Integration"
|
2371 |
-
msgstr ""
|
2372 |
-
|
2373 |
-
#: views/settings/general.php:130
|
2374 |
-
msgid "The User Role Editor Plugin"
|
2375 |
-
msgstr ""
|
2376 |
-
|
2377 |
-
#: views/settings/general.php:131 views/settings/gopro.php:46
|
2378 |
-
msgid "Free"
|
2379 |
-
msgstr ""
|
2380 |
-
|
2381 |
-
#: views/settings/general.php:132
|
2382 |
-
msgid "or"
|
2383 |
-
msgstr ""
|
2384 |
-
|
2385 |
-
#: views/settings/general.php:133 views/settings/gopro.php:47
|
2386 |
-
msgid "Professional"
|
2387 |
-
msgstr ""
|
2388 |
-
|
2389 |
-
#: views/settings/general.php:134
|
2390 |
-
msgid "must be installed to use"
|
2391 |
-
msgstr ""
|
2392 |
-
|
2393 |
-
#: views/settings/general.php:135
|
2394 |
-
msgid "this feature."
|
2395 |
-
msgstr ""
|
2396 |
-
|
2397 |
-
#: views/settings/general.php:144
|
2398 |
-
msgid "Debug"
|
2399 |
-
msgstr ""
|
2400 |
-
|
2401 |
-
#: views/settings/general.php:148
|
2402 |
-
msgid "Debugging"
|
2403 |
-
msgstr ""
|
2404 |
-
|
2405 |
-
#: views/settings/general.php:151
|
2406 |
-
msgid "Enable debug options throughout user interface"
|
2407 |
-
msgstr ""
|
2408 |
-
|
2409 |
-
#: views/settings/general.php:155
|
2410 |
-
msgid "Trace Log"
|
2411 |
-
msgstr ""
|
2412 |
-
|
2413 |
-
#: views/settings/general.php:161
|
2414 |
-
msgid "Turns on detailed operation logging. Logging will occur in both PHP error and local trace logs."
|
2415 |
-
msgstr ""
|
2416 |
-
|
2417 |
-
#: views/settings/general.php:163
|
2418 |
-
msgid "WARNING: Only turn on this setting when asked to by support as tracing will impact performance."
|
2419 |
-
msgstr ""
|
2420 |
-
|
2421 |
-
#: views/settings/general.php:167
|
2422 |
-
msgid "Download Trace Log"
|
2423 |
-
msgstr ""
|
2424 |
-
|
2425 |
-
#: views/settings/general.php:175
|
2426 |
-
msgid "Advanced"
|
2427 |
-
msgstr ""
|
2428 |
-
|
2429 |
-
#: views/settings/general.php:182
|
2430 |
-
msgid "Reset Packages"
|
2431 |
-
msgstr ""
|
2432 |
-
|
2433 |
-
#: views/settings/general.php:185
|
2434 |
-
msgid "This process will reset all packages by deleting those without a completed status, reset the active package id and perform a cleanup of the build tmp file."
|
2435 |
-
msgstr ""
|
2436 |
-
|
2437 |
-
#: views/settings/general.php:188
|
2438 |
-
msgid "Reset Settings"
|
2439 |
-
msgstr ""
|
2440 |
-
|
2441 |
-
#: views/settings/general.php:189
|
2442 |
-
msgid "This action should only be used if the packages screen is having issues or a build is stuck."
|
2443 |
-
msgstr ""
|
2444 |
-
|
2445 |
-
#: views/settings/general.php:194
|
2446 |
-
msgid "Archive scan"
|
2447 |
-
msgstr ""
|
2448 |
-
|
2449 |
-
#: views/settings/general.php:197
|
2450 |
-
msgid "Skip"
|
2451 |
-
msgstr ""
|
2452 |
-
|
2453 |
-
#: views/settings/general.php:199
|
2454 |
-
msgid "If enabled all files check on scan will be skipped before package creation. In some cases, this option can be beneficial if the scan process is having issues running or returning errors."
|
2455 |
-
msgstr ""
|
2456 |
-
|
2457 |
-
#: views/settings/general.php:205
|
2458 |
-
msgid "Other Plugins/Themes JS"
|
2459 |
-
msgstr ""
|
2460 |
-
|
2461 |
-
#: views/settings/general.php:208 views/settings/general.php:224
|
2462 |
-
msgid "Unhook them on Duplicator pages"
|
2463 |
-
msgstr ""
|
2464 |
-
|
2465 |
-
#: views/settings/general.php:211
|
2466 |
-
msgid "Check this option if other plugins/themes JavaScript files are conflicting with Duplicator."
|
2467 |
-
msgstr ""
|
2468 |
-
|
2469 |
-
#: views/settings/general.php:215 views/settings/general.php:231
|
2470 |
-
msgid "Do not modify this setting unless you know the expected result or have talked to support."
|
2471 |
-
msgstr ""
|
2472 |
-
|
2473 |
-
#: views/settings/general.php:221
|
2474 |
-
msgid "Other Plugins/Themes CSS"
|
2475 |
-
msgstr ""
|
2476 |
-
|
2477 |
-
#: views/settings/general.php:227
|
2478 |
-
msgid "Check this option if other plugins/themes CSS files are conflicting with Duplicator."
|
2479 |
-
msgstr ""
|
2480 |
-
|
2481 |
-
#: views/settings/general.php:240
|
2482 |
-
msgid "Save General Settings"
|
2483 |
-
msgstr ""
|
2484 |
-
|
2485 |
-
#: views/settings/general.php:249
|
2486 |
-
msgid "Reset Packages ?"
|
2487 |
-
msgstr ""
|
2488 |
-
|
2489 |
-
#: views/settings/general.php:250
|
2490 |
-
msgid "This will clear and reset all of the current temporary packages. Would you like to continue?"
|
2491 |
-
msgstr ""
|
2492 |
-
|
2493 |
-
#: views/settings/general.php:251
|
2494 |
-
msgid "Resetting settings, Please Wait..."
|
2495 |
-
msgstr ""
|
2496 |
-
|
2497 |
-
#: views/settings/general.php:254
|
2498 |
-
msgid "Yes"
|
2499 |
-
msgstr ""
|
2500 |
-
|
2501 |
-
#: views/settings/general.php:255
|
2502 |
-
msgid "No"
|
2503 |
-
msgstr ""
|
2504 |
-
|
2505 |
-
#: views/settings/general.php:259
|
2506 |
-
msgid "AJAX ERROR!"
|
2507 |
-
msgstr ""
|
2508 |
-
|
2509 |
-
#: views/settings/general.php:259
|
2510 |
-
msgid "Ajax request error"
|
2511 |
-
msgstr ""
|
2512 |
-
|
2513 |
-
#: views/settings/general.php:264 views/settings/general.php:317
|
2514 |
-
msgid "RESPONSE ERROR!"
|
2515 |
-
msgstr ""
|
2516 |
-
|
2517 |
-
#: views/settings/general.php:307
|
2518 |
-
msgid "Packages successfully reset"
|
2519 |
-
msgstr ""
|
2520 |
-
|
2521 |
-
#: views/settings/gopro.php:39
|
2522 |
-
msgid "The simplicity of Duplicator"
|
2523 |
-
msgstr ""
|
2524 |
-
|
2525 |
-
#: views/settings/gopro.php:40
|
2526 |
-
msgid "with power for everyone."
|
2527 |
-
msgstr ""
|
2528 |
-
|
2529 |
-
#: views/settings/gopro.php:45
|
2530 |
-
msgid "Feature"
|
2531 |
-
msgstr ""
|
2532 |
-
|
2533 |
-
#: views/settings/gopro.php:50
|
2534 |
-
msgid "Backup Files & Database"
|
2535 |
-
msgstr ""
|
2536 |
-
|
2537 |
-
#: views/settings/gopro.php:60
|
2538 |
-
msgid "Database Table Filters"
|
2539 |
-
msgstr ""
|
2540 |
-
|
2541 |
-
#: views/settings/gopro.php:65
|
2542 |
-
msgid "Migration Wizard"
|
2543 |
-
msgstr ""
|
2544 |
-
|
2545 |
-
#: views/settings/gopro.php:70
|
2546 |
-
msgid "Scheduled Backups"
|
2547 |
-
msgstr ""
|
2548 |
-
|
2549 |
-
#: views/settings/gopro.php:77
|
2550 |
-
msgid "Amazon S3 Storage"
|
2551 |
-
msgstr ""
|
2552 |
-
|
2553 |
-
#: views/settings/gopro.php:85
|
2554 |
-
msgid "Dropbox Storage "
|
2555 |
-
msgstr ""
|
2556 |
-
|
2557 |
-
#: views/settings/gopro.php:93
|
2558 |
-
msgid "Google Drive Storage"
|
2559 |
-
msgstr ""
|
2560 |
-
|
2561 |
-
#: views/settings/gopro.php:101
|
2562 |
-
msgid "Microsoft One Drive Storage"
|
2563 |
-
msgstr ""
|
2564 |
-
|
2565 |
-
#: views/settings/gopro.php:109
|
2566 |
-
msgid "Remote FTP/SFTP Storage"
|
2567 |
-
msgstr ""
|
2568 |
-
|
2569 |
-
#: views/settings/gopro.php:115
|
2570 |
-
msgid "Overwrite Live Site"
|
2571 |
-
msgstr ""
|
2572 |
-
|
2573 |
-
#: views/settings/gopro.php:117
|
2574 |
-
msgid "Overwrite Existing Site"
|
2575 |
-
msgstr ""
|
2576 |
-
|
2577 |
-
#: views/settings/gopro.php:118
|
2578 |
-
msgid "Overwrite a live site. Makes installing super-fast!"
|
2579 |
-
msgstr ""
|
2580 |
-
|
2581 |
-
#: views/settings/gopro.php:124 views/settings/gopro.php:126
|
2582 |
-
msgid "Large Site Support"
|
2583 |
-
msgstr ""
|
2584 |
-
|
2585 |
-
#: views/settings/gopro.php:127
|
2586 |
-
msgid "Advanced archive engine processes multi-gig sites - even on stubborn budget hosts!"
|
2587 |
-
msgstr ""
|
2588 |
-
|
2589 |
-
#: views/settings/gopro.php:133
|
2590 |
-
msgid "Multiple Archive Engines"
|
2591 |
-
msgstr ""
|
2592 |
-
|
2593 |
-
#: views/settings/gopro.php:138
|
2594 |
-
msgid "Server Throttling"
|
2595 |
-
msgstr ""
|
2596 |
-
|
2597 |
-
#: views/settings/gopro.php:143
|
2598 |
-
msgid "Background Processing"
|
2599 |
-
msgstr ""
|
2600 |
-
|
2601 |
-
#: views/settings/gopro.php:148
|
2602 |
-
msgid "Installer Passwords"
|
2603 |
-
msgstr ""
|
2604 |
-
|
2605 |
-
#: views/settings/gopro.php:153
|
2606 |
-
|
2607 |
-
msgstr ""
|
2608 |
-
|
2609 |
-
#: views/settings/gopro.php:155
|
2610 |
-
msgid "Regenerate Salts"
|
2611 |
-
msgstr ""
|
2612 |
-
|
2613 |
-
#: views/settings/gopro.php:156
|
2614 |
-
msgid "Installer contains option to regenerate salts in the wp-config.php file. This feature is only available with Freelancer, Business or Gold licenses."
|
2615 |
-
msgstr ""
|
2616 |
-
|
2617 |
-
#: views/settings/gopro.php:162 views/settings/gopro.php:164
|
2618 |
-
msgid "WP-Config Control Plus"
|
2619 |
-
msgstr ""
|
2620 |
-
|
2621 |
-
#: views/settings/gopro.php:165
|
2622 |
-
msgid "Control many wp-config.php settings right from the installer!"
|
2623 |
-
msgstr ""
|
2624 |
-
|
2625 |
-
#: views/settings/gopro.php:173
|
2626 |
-
msgid "cPanel Database API"
|
2627 |
-
msgstr ""
|
2628 |
-
|
2629 |
-
#: views/settings/gopro.php:177
|
2630 |
-
msgid "Create the database and database user directly in the installer. No need to browse to your host's cPanel application."
|
2631 |
-
msgstr ""
|
2632 |
-
|
2633 |
-
#: views/settings/gopro.php:183
|
2634 |
-
msgid "Multisite Network Migration"
|
2635 |
-
msgstr ""
|
2636 |
-
|
2637 |
-
#: views/settings/gopro.php:188
|
2638 |
-
msgid "Multisite Subsite > Standalone"
|
2639 |
-
msgstr ""
|
2640 |
-
|
2641 |
-
#: views/settings/gopro.php:190
|
2642 |
-
msgid "Multisite"
|
2643 |
-
msgstr ""
|
2644 |
-
|
2645 |
-
#: views/settings/gopro.php:191
|
2646 |
-
msgid "Install an individual subsite from a Multisite as a standalone site. This feature is only available with Business or Gold licenses."
|
2647 |
-
msgstr ""
|
2648 |
-
|
2649 |
-
#: views/settings/gopro.php:198
|
2650 |
-
msgid "Custom Search & Replace"
|
2651 |
-
msgstr ""
|
2652 |
-
|
2653 |
-
#: views/settings/gopro.php:204
|
2654 |
-
msgid "Email Alerts"
|
2655 |
-
msgstr ""
|
2656 |
-
|
2657 |
-
#: views/settings/gopro.php:210
|
2658 |
-
msgid "Manual Transfers"
|
2659 |
-
msgstr ""
|
2660 |
-
|
2661 |
-
#: views/settings/gopro.php:216
|
2662 |
-
msgid "Active Customer Support"
|
2663 |
-
msgstr ""
|
2664 |
-
|
2665 |
-
#: views/settings/gopro.php:219
|
2666 |
-
msgid "Pro users get top priority for any requests to our support desk. In most cases responses will be answered in under 24 hours."
|
2667 |
-
msgstr ""
|
2668 |
-
|
2669 |
-
#: views/settings/gopro.php:225
|
2670 |
-
msgid "Plus Many Other Features..."
|
2671 |
-
msgstr ""
|
2672 |
-
|
2673 |
-
#: views/settings/gopro.php:234
|
2674 |
-
msgid "Check It Out!"
|
2675 |
-
msgstr ""
|
2676 |
-
|
2677 |
-
#: views/settings/license.php:4
|
2678 |
-
msgid "Activation"
|
2679 |
-
msgstr ""
|
2680 |
-
|
2681 |
-
#: views/settings/license.php:9
|
2682 |
-
#, php-format
|
2683 |
-
msgid "%1$sManage Licenses%2$s"
|
2684 |
-
msgstr ""
|
2685 |
-
|
2686 |
-
#: views/settings/license.php:14
|
2687 |
-
msgid "Duplicator Free"
|
2688 |
-
msgstr ""
|
2689 |
-
|
2690 |
-
#: views/settings/license.php:16
|
2691 |
-
msgid "Basic Features"
|
2692 |
-
msgstr ""
|
2693 |
-
|
2694 |
-
#: views/settings/license.php:17
|
2695 |
-
msgid "Pro Features"
|
2696 |
-
msgstr ""
|
2697 |
-
|
2698 |
-
#: views/settings/license.php:22
|
2699 |
-
msgid "License Key"
|
2700 |
-
msgstr ""
|
2701 |
-
|
2702 |
-
#: views/settings/license.php:26
|
2703 |
-
msgid "The free version of Duplicator does not require a license key. "
|
2704 |
-
msgstr ""
|
2705 |
-
|
2706 |
-
#: views/settings/license.php:28
|
2707 |
-
msgid "Professional Users: Please note that if you have already purchased the Professional version it is a separate plugin that you download and install. You can download the Professional version from the email sent after your purchase or click on the 'Manage Licenses' link above to download the plugin from your snapcreek.com dashboard. "
|
2708 |
-
msgstr ""
|
2709 |
-
|
2710 |
-
#: views/settings/license.php:31
|
2711 |
-
msgid "If you would like to purchase the professional version you can "
|
2712 |
-
msgstr ""
|
2713 |
-
|
2714 |
-
#: views/settings/license.php:32
|
2715 |
-
msgid "get a copy here"
|
2716 |
-
msgstr ""
|
2717 |
-
|
2718 |
-
#: views/settings/packages.php:8
|
2719 |
-
msgid "Package Settings Saved"
|
2720 |
-
msgstr ""
|
2721 |
-
|
2722 |
-
#: views/settings/packages.php:74
|
2723 |
-
msgid "SQL Script"
|
2724 |
-
msgstr ""
|
2725 |
-
|
2726 |
-
#: views/settings/packages.php:78
|
2727 |
-
msgid "Mysqldump"
|
2728 |
-
msgstr ""
|
2729 |
-
|
2730 |
-
#: views/settings/packages.php:88
|
2731 |
-
msgid "PHP Code"
|
2732 |
-
msgstr ""
|
2733 |
-
|
2734 |
-
#: views/settings/packages.php:98
|
2735 |
-
msgid "This server does not support the PHP shell_exec function which is required for mysqldump to run. "
|
2736 |
-
msgstr ""
|
2737 |
-
|
2738 |
-
#: views/settings/packages.php:99
|
2739 |
-
msgid "Please contact the host or server administrator to enable this feature."
|
2740 |
-
msgstr ""
|
2741 |
-
|
2742 |
-
#: views/settings/packages.php:104 views/tools/diagnostics/logging.php:180
|
2743 |
-
msgid "Host Recommendation:"
|
2744 |
-
msgstr ""
|
2745 |
-
|
2746 |
-
#: views/settings/packages.php:105 views/tools/diagnostics/logging.php:181
|
2747 |
-
msgid "Duplicator recommends going with the high performance pro plan or better from our recommended list"
|
2748 |
-
msgstr ""
|
2749 |
-
|
2750 |
-
#: views/settings/packages.php:109
|
2751 |
-
msgid "Please visit our recommended"
|
2752 |
-
msgstr ""
|
2753 |
-
|
2754 |
-
#: views/settings/packages.php:110 views/settings/packages.php:134
|
2755 |
-
#: views/tools/diagnostics/logging.php:186
|
2756 |
-
msgid "host list"
|
2757 |
-
msgstr ""
|
2758 |
-
|
2759 |
-
#: views/settings/packages.php:111
|
2760 |
-
msgid "for reliable access to mysqldump"
|
2761 |
-
msgstr ""
|
2762 |
-
|
2763 |
-
#: views/settings/packages.php:122
|
2764 |
-
msgid "Successfully Found:"
|
2765 |
-
msgstr ""
|
2766 |
-
|
2767 |
-
#: views/settings/packages.php:129
|
2768 |
-
msgid "Mysqldump was not found at its default location or the location provided. Please enter a custom path to a valid location where mysqldump can run. If the problem persist contact your host or server administrator. "
|
2769 |
-
msgstr ""
|
2770 |
-
|
2771 |
-
#: views/settings/packages.php:133
|
2772 |
-
msgid "See the"
|
2773 |
-
msgstr ""
|
2774 |
-
|
2775 |
-
#: views/settings/packages.php:135
|
2776 |
-
msgid "for reliable access to mysqldump."
|
2777 |
-
msgstr ""
|
2778 |
-
|
2779 |
-
#: views/settings/packages.php:141
|
2780 |
-
msgid "Custom Path"
|
2781 |
-
msgstr ""
|
2782 |
-
|
2783 |
-
#: views/settings/packages.php:143
|
2784 |
-
msgid "mysqldump path:"
|
2785 |
-
msgstr ""
|
2786 |
-
|
2787 |
-
#: views/settings/packages.php:144
|
2788 |
-
msgid "Add a custom path if the path to mysqldump is not properly detected. For all paths use a forward slash as the path seperator. On Linux systems use mysqldump for Windows systems use mysqldump.exe. If the path tried does not work please contact your hosting provider for details on the correct path."
|
2789 |
-
msgstr ""
|
2790 |
-
|
2791 |
-
#: views/settings/packages.php:148
|
2792 |
-
msgid "/usr/bin/mypath/mysqldump"
|
2793 |
-
msgstr ""
|
2794 |
-
|
2795 |
-
#: views/settings/packages.php:152
|
2796 |
-
msgid "<i class=\"fa fa-exclamation-triangle fa-sm\"></i> The custom path provided is not recognized as a valid mysqldump file:<br/>"
|
2797 |
-
msgstr ""
|
2798 |
-
|
2799 |
-
#: views/settings/packages.php:170
|
2800 |
-
msgid "Single-Threaded"
|
2801 |
-
msgstr ""
|
2802 |
-
|
2803 |
-
#: views/settings/packages.php:173
|
2804 |
-
msgid "Multi-Threaded"
|
2805 |
-
msgstr ""
|
2806 |
-
|
2807 |
-
#: views/settings/packages.php:177
|
2808 |
-
msgid "PHP Code Mode:"
|
2809 |
-
msgstr ""
|
2810 |
-
|
2811 |
-
#: views/settings/packages.php:179
|
2812 |
-
msgid "Single-Threaded mode attempts to create the entire database script in one request. Multi-Threaded mode allows the database script to be chunked over multiple requests. Multi-Threaded mode is typically slower but much more reliable especially for larger databases."
|
2813 |
-
msgstr ""
|
2814 |
-
|
2815 |
-
#: views/settings/packages.php:181
|
2816 |
-
msgid "<br><br><i>Multi-Threaded mode is only available in Duplicator Pro.</i>"
|
2817 |
-
msgstr ""
|
2818 |
-
|
2819 |
-
#: views/settings/packages.php:184
|
2820 |
-
msgid "Query Limit Size"
|
2821 |
-
msgstr ""
|
2822 |
-
|
2823 |
-
#: views/settings/packages.php:194
|
2824 |
-
msgid "PHP Query Limit Size"
|
2825 |
-
msgstr ""
|
2826 |
-
|
2827 |
-
#: views/settings/packages.php:195
|
2828 |
-
msgid "A higher limit size will speed up the database build time, however it will use more memory. If your host has memory caps start off low."
|
2829 |
-
msgstr ""
|
2830 |
-
|
2831 |
-
#: views/settings/packages.php:213
|
2832 |
-
msgid "ZipArchive"
|
2833 |
-
msgstr ""
|
2834 |
-
|
2835 |
-
#: views/settings/packages.php:219
|
2836 |
-
msgid "DupArchive"
|
2837 |
-
msgstr ""
|
2838 |
-
|
2839 |
-
#: views/settings/packages.php:228
|
2840 |
-
msgid "Creates a archive format (archive.zip)."
|
2841 |
-
msgstr ""
|
2842 |
-
|
2843 |
-
#: views/settings/packages.php:229
|
2844 |
-
msgid "This option uses the internal PHP ZipArchive classes to create a Zip file."
|
2845 |
-
msgstr ""
|
2846 |
-
|
2847 |
-
#: views/settings/packages.php:238
|
2848 |
-
msgid "Creates a custom archive format (archive.daf)."
|
2849 |
-
msgstr ""
|
2850 |
-
|
2851 |
-
#: views/settings/packages.php:239
|
2852 |
-
msgid "This option is recommended for large sites or sites on constrained servers."
|
2853 |
-
msgstr ""
|
2854 |
-
|
2855 |
-
#: views/settings/packages.php:246
|
2856 |
-
msgid "Archive Flush"
|
2857 |
-
msgstr ""
|
2858 |
-
|
2859 |
-
#: views/settings/packages.php:249
|
2860 |
-
msgid "Attempt Network Keep Alive"
|
2861 |
-
msgstr ""
|
2862 |
-
|
2863 |
-
#: views/settings/packages.php:250
|
2864 |
-
msgid "enable only for large archives"
|
2865 |
-
msgstr ""
|
2866 |
-
|
2867 |
-
#: views/settings/packages.php:253
|
2868 |
-
msgid "This will attempt to keep a network connection established for large archives."
|
2869 |
-
msgstr ""
|
2870 |
-
|
2871 |
-
#: views/settings/packages.php:254
|
2872 |
-
msgid " Valid only when Archive Engine for ZipArchive is enabled."
|
2873 |
-
msgstr ""
|
2874 |
-
|
2875 |
-
#: views/settings/packages.php:261
|
2876 |
-
msgid "Visual"
|
2877 |
-
msgstr ""
|
2878 |
-
|
2879 |
-
#: views/settings/packages.php:265
|
2880 |
-
msgid "Created Format"
|
2881 |
-
msgstr ""
|
2882 |
-
|
2883 |
-
#: views/settings/packages.php:269
|
2884 |
-
msgid "By Year"
|
2885 |
-
msgstr ""
|
2886 |
-
|
2887 |
-
#: views/settings/packages.php:276
|
2888 |
-
msgid "By Month"
|
2889 |
-
msgstr ""
|
2890 |
-
|
2891 |
-
#: views/settings/packages.php:283
|
2892 |
-
msgid "By Day"
|
2893 |
-
msgstr ""
|
2894 |
-
|
2895 |
-
#: views/settings/packages.php:291
|
2896 |
-
msgid "The UTC date format shown in the 'Created' column on the Packages screen."
|
2897 |
-
msgstr ""
|
2898 |
-
|
2899 |
-
#: views/settings/packages.php:292
|
2900 |
-
msgid "To use WordPress timezone formats consider an upgrade to Duplicator Pro."
|
2901 |
-
msgstr ""
|
2902 |
-
|
2903 |
-
#: views/settings/packages.php:301
|
2904 |
-
msgid "Save Package Settings"
|
2905 |
-
msgstr ""
|
2906 |
-
|
2907 |
-
#: views/settings/schedule.php:14 views/tools/templates.php:15
|
2908 |
-
msgid "This option is available in Duplicator Pro."
|
2909 |
-
msgstr ""
|
2910 |
-
|
2911 |
-
#: views/settings/schedule.php:15
|
2912 |
-
msgid "Create robust schedules that automatically create packages while you sleep."
|
2913 |
-
msgstr ""
|
2914 |
-
|
2915 |
-
#: views/settings/schedule.php:17
|
2916 |
-
msgid "Simply choose your storage location and when you want it to run."
|
2917 |
-
msgstr ""
|
2918 |
-
|
2919 |
-
#: views/settings/storage.php:15
|
2920 |
-
msgid "Store your packages in multiple locations with Duplicator Pro"
|
2921 |
-
msgstr ""
|
2922 |
-
|
2923 |
-
#: views/settings/storage.php:20
|
2924 |
-
msgid " Dropbox"
|
2925 |
-
msgstr ""
|
2926 |
-
|
2927 |
-
#: views/settings/storage.php:28
|
2928 |
-
msgid "Set up a one-time storage location and automatically <br/> push the package to your destination."
|
2929 |
-
msgstr ""
|
2930 |
-
|
2931 |
-
#: views/tools/controller.php:22
|
2932 |
-
msgid "Diagnostics"
|
2933 |
-
msgstr ""
|
2934 |
-
|
2935 |
-
#: views/tools/controller.php:23
|
2936 |
-
msgid "Templates"
|
2937 |
-
msgstr ""
|
2938 |
-
|
2939 |
-
#: views/tools/diagnostics/inc.data.php:11
|
2940 |
-
msgid "Stored Data"
|
2941 |
-
msgstr ""
|
2942 |
-
|
2943 |
-
#: views/tools/diagnostics/inc.data.php:16
|
2944 |
-
msgid "Data Cleanup"
|
2945 |
-
msgstr ""
|
2946 |
-
|
2947 |
-
#: views/tools/diagnostics/inc.data.php:21
|
2948 |
-
msgid "Remove Installation Files"
|
2949 |
-
msgstr ""
|
2950 |
-
|
2951 |
-
#: views/tools/diagnostics/inc.data.php:25
|
2952 |
-
msgid "Removes all reserved installer files."
|
2953 |
-
msgstr ""
|
2954 |
-
|
2955 |
-
#: views/tools/diagnostics/inc.data.php:30
|
2956 |
-
msgid "Clicking on the 'Remove Installation Files' button will attempt to remove the installer files used by Duplicator. These files should not be left on production systems for security reasons. Below are the files that should be removed."
|
2957 |
-
msgstr ""
|
2958 |
-
|
2959 |
-
#: views/tools/diagnostics/inc.data.php:45
|
2960 |
-
msgid "Clear Build Cache"
|
2961 |
-
msgstr ""
|
2962 |
-
|
2963 |
-
#: views/tools/diagnostics/inc.data.php:48
|
2964 |
-
msgid "Removes all build data from:"
|
2965 |
-
msgstr ""
|
2966 |
-
|
2967 |
-
#: views/tools/diagnostics/inc.data.php:53
|
2968 |
-
msgid "Options Values"
|
2969 |
-
msgstr ""
|
2970 |
-
|
2971 |
-
#: views/tools/diagnostics/inc.data.php:87
|
2972 |
-
msgid "Delete Option?"
|
2973 |
-
msgstr ""
|
2974 |
-
|
2975 |
-
#: views/tools/diagnostics/inc.data.php:88
|
2976 |
-
msgid "Delete the option value just selected?"
|
2977 |
-
msgstr ""
|
2978 |
-
|
2979 |
-
#: views/tools/diagnostics/inc.data.php:89
|
2980 |
-
msgid "Removing Option, Please Wait..."
|
2981 |
-
msgstr ""
|
2982 |
-
|
2983 |
-
#: views/tools/diagnostics/inc.data.php:94
|
2984 |
-
msgid "Clear Build Cache?"
|
2985 |
-
msgstr ""
|
2986 |
-
|
2987 |
-
#: views/tools/diagnostics/inc.data.php:95
|
2988 |
-
msgid "This process will remove all build cache files. Be sure no packages are currently building or else they will be cancelled."
|
2989 |
-
msgstr ""
|
2990 |
-
|
2991 |
-
#: views/tools/diagnostics/inc.data.php:107
|
2992 |
-
msgid "Delete the option value"
|
2993 |
-
msgstr ""
|
2994 |
-
|
2995 |
-
#: views/tools/diagnostics/inc.phpinfo.php:17
|
2996 |
-
msgid "PHP Information"
|
2997 |
-
msgstr ""
|
2998 |
-
|
2999 |
-
#: views/tools/diagnostics/inc.settings.php:5
|
3000 |
-
#: views/tools/diagnostics/inc.settings.php:6
|
3001 |
-
msgid "unknow"
|
3002 |
-
msgstr ""
|
3003 |
-
|
3004 |
-
#: views/tools/diagnostics/inc.settings.php:23
|
3005 |
-
msgid "Server Settings"
|
3006 |
-
msgstr ""
|
3007 |
-
|
3008 |
-
#: views/tools/diagnostics/inc.settings.php:32
|
3009 |
-
msgid "Duplicator Version"
|
3010 |
-
msgstr ""
|
3011 |
-
|
3012 |
-
#: views/tools/diagnostics/inc.settings.php:39
|
3013 |
-
msgid "Operating System"
|
3014 |
-
msgstr ""
|
3015 |
-
|
3016 |
-
#: views/tools/diagnostics/inc.settings.php:43
|
3017 |
-
msgid "Timezone"
|
3018 |
-
msgstr ""
|
3019 |
-
|
3020 |
-
#: views/tools/diagnostics/inc.settings.php:47
|
3021 |
-
msgid "Server Time"
|
3022 |
-
msgstr ""
|
3023 |
-
|
3024 |
-
#: views/tools/diagnostics/inc.settings.php:59
|
3025 |
-
msgid "ABSPATH"
|
3026 |
-
msgstr ""
|
3027 |
-
|
3028 |
-
#: views/tools/diagnostics/inc.settings.php:63
|
3029 |
-
msgid "Plugins Path"
|
3030 |
-
msgstr ""
|
3031 |
-
|
3032 |
-
#: views/tools/diagnostics/inc.settings.php:67
|
3033 |
-
msgid "Loaded PHP INI"
|
3034 |
-
msgstr ""
|
3035 |
-
|
3036 |
-
#: views/tools/diagnostics/inc.settings.php:71
|
3037 |
-
msgid "Server IP"
|
3038 |
-
msgstr ""
|
3039 |
-
|
3040 |
-
#: views/tools/diagnostics/inc.settings.php:78
|
3041 |
-
msgid "Can't detect"
|
3042 |
-
msgstr ""
|
3043 |
-
|
3044 |
-
#: views/tools/diagnostics/inc.settings.php:84
|
3045 |
-
msgid "Client IP"
|
3046 |
-
msgstr ""
|
3047 |
-
|
3048 |
-
#: views/tools/diagnostics/inc.settings.php:95
|
3049 |
-
msgid "Language"
|
3050 |
-
msgstr ""
|
3051 |
-
|
3052 |
-
#: views/tools/diagnostics/inc.settings.php:99
|
3053 |
-
#: views/tools/diagnostics/inc.settings.php:191
|
3054 |
-
msgid "Charset"
|
3055 |
-
msgstr ""
|
3056 |
-
|
3057 |
-
#: views/tools/diagnostics/inc.settings.php:103
|
3058 |
-
msgid "Memory Limit "
|
3059 |
-
msgstr ""
|
3060 |
-
|
3061 |
-
#: views/tools/diagnostics/inc.settings.php:104
|
3062 |
-
msgid "Max"
|
3063 |
-
msgstr ""
|
3064 |
-
|
3065 |
-
#: views/tools/diagnostics/inc.settings.php:122
|
3066 |
-
msgid "Process"
|
3067 |
-
msgstr ""
|
3068 |
-
|
3069 |
-
#: views/tools/diagnostics/inc.settings.php:126
|
3070 |
-
msgid "Safe Mode"
|
3071 |
-
msgstr ""
|
3072 |
-
|
3073 |
-
#: views/tools/diagnostics/inc.settings.php:130
|
3074 |
-
msgid "On"
|
3075 |
-
msgstr ""
|
3076 |
-
|
3077 |
-
#: views/tools/diagnostics/inc.settings.php:130
|
3078 |
-
msgid "Off"
|
3079 |
-
msgstr ""
|
3080 |
-
|
3081 |
-
#: views/tools/diagnostics/inc.settings.php:135
|
3082 |
-
msgid "Memory Limit"
|
3083 |
-
msgstr ""
|
3084 |
-
|
3085 |
-
#: views/tools/diagnostics/inc.settings.php:139
|
3086 |
-
msgid "Memory In Use"
|
3087 |
-
msgstr ""
|
3088 |
-
|
3089 |
-
#: views/tools/diagnostics/inc.settings.php:143
|
3090 |
-
#: views/tools/diagnostics/inc.settings.php:152
|
3091 |
-
msgid "Max Execution Time"
|
3092 |
-
msgstr ""
|
3093 |
-
|
3094 |
-
#: views/tools/diagnostics/inc.settings.php:153
|
3095 |
-
msgid "If the value shows dynamic then this means its possible for PHP to run longer than the default. If the value is fixed then PHP will not be allowed to run longer than the default."
|
3096 |
-
msgstr ""
|
3097 |
-
|
3098 |
-
#: views/tools/diagnostics/inc.settings.php:158
|
3099 |
-
msgid "Shell Exec"
|
3100 |
-
msgstr ""
|
3101 |
-
|
3102 |
-
#: views/tools/diagnostics/inc.settings.php:159
|
3103 |
-
#: views/tools/diagnostics/inc.settings.php:163
|
3104 |
-
msgid "Is Supported"
|
3105 |
-
msgstr ""
|
3106 |
-
|
3107 |
-
#: views/tools/diagnostics/inc.settings.php:159
|
3108 |
-
#: views/tools/diagnostics/inc.settings.php:163
|
3109 |
-
msgid "Not Supported"
|
3110 |
-
msgstr ""
|
3111 |
-
|
3112 |
-
#: views/tools/diagnostics/inc.settings.php:162
|
3113 |
-
msgid "Shell Exec Zip"
|
3114 |
-
msgstr ""
|
3115 |
-
|
3116 |
-
#: views/tools/diagnostics/inc.settings.php:166
|
3117 |
-
msgid "Suhosin Extension"
|
3118 |
-
msgstr ""
|
3119 |
-
|
3120 |
-
#: views/tools/diagnostics/inc.settings.php:170
|
3121 |
-
msgid "Architecture "
|
3122 |
-
msgstr ""
|
3123 |
-
|
3124 |
-
#: views/tools/diagnostics/inc.settings.php:176
|
3125 |
-
msgid "Error Log File "
|
3126 |
-
msgstr ""
|
3127 |
-
|
3128 |
-
#: views/tools/diagnostics/inc.settings.php:187
|
3129 |
-
msgid "Comments"
|
3130 |
-
msgstr ""
|
3131 |
-
|
3132 |
-
#: views/tools/diagnostics/inc.settings.php:195
|
3133 |
-
msgid "Wait Timeout"
|
3134 |
-
msgstr ""
|
3135 |
-
|
3136 |
-
#: views/tools/diagnostics/inc.settings.php:199
|
3137 |
-
msgid "Max Allowed Packets"
|
3138 |
-
msgstr ""
|
3139 |
-
|
3140 |
-
#: views/tools/diagnostics/inc.settings.php:203
|
3141 |
-
msgid "msyqldump Path"
|
3142 |
-
msgstr ""
|
3143 |
-
|
3144 |
-
#: views/tools/diagnostics/inc.settings.php:207
|
3145 |
-
msgid "Server Disk"
|
3146 |
-
msgstr ""
|
3147 |
-
|
3148 |
-
#: views/tools/diagnostics/inc.settings.php:210
|
3149 |
-
msgid "Free space"
|
3150 |
-
msgstr ""
|
3151 |
-
|
3152 |
-
#: views/tools/diagnostics/inc.settings.php:213
|
3153 |
-
msgid "Note: This value is the physical servers hard-drive allocation."
|
3154 |
-
msgstr ""
|
3155 |
-
|
3156 |
-
#: views/tools/diagnostics/inc.settings.php:214
|
3157 |
-
msgid "On shared hosts check your control panel for the 'TRUE' disk space quota value."
|
3158 |
-
msgstr ""
|
3159 |
-
|
3160 |
-
#: views/tools/diagnostics/inc.validator.php:16
|
3161 |
-
msgid "Run Validator"
|
3162 |
-
msgstr ""
|
3163 |
-
|
3164 |
-
#: views/tools/diagnostics/inc.validator.php:17
|
3165 |
-
msgid "This will run the scan validation check. This may take several minutes. Do you want to Continue?"
|
3166 |
-
msgstr ""
|
3167 |
-
|
3168 |
-
#: views/tools/diagnostics/inc.validator.php:28
|
3169 |
-
msgid "Scan Validator"
|
3170 |
-
msgstr ""
|
3171 |
-
|
3172 |
-
#: views/tools/diagnostics/inc.validator.php:33
|
3173 |
-
msgid "This utility will help to find unreadable files and sys-links in your environment that can lead to issues during the scan process. "
|
3174 |
-
msgstr ""
|
3175 |
-
|
3176 |
-
#: views/tools/diagnostics/inc.validator.php:34
|
3177 |
-
msgid "The utility will also shows how many files and directories you have in your system. This process may take several minutes to run. "
|
3178 |
-
msgstr ""
|
3179 |
-
|
3180 |
-
#: views/tools/diagnostics/inc.validator.php:35
|
3181 |
-
msgid "If there is a recursive loop on your system then the process has a built in check to stop after a large set of files and directories have been scanned. "
|
3182 |
-
msgstr ""
|
3183 |
-
|
3184 |
-
#: views/tools/diagnostics/inc.validator.php:36
|
3185 |
-
msgid "A message will show indicated that that a scan depth has been reached. If you have issues with the package scanner (step 2) during the build process then try to add The paths below to your file filters to allow the scanner to finish."
|
3186 |
-
msgstr ""
|
3187 |
-
|
3188 |
-
#: views/tools/diagnostics/inc.validator.php:43
|
3189 |
-
#: views/tools/diagnostics/inc.validator.php:153
|
3190 |
-
msgid "Run Scan Integrity Validation"
|
3191 |
-
msgstr ""
|
3192 |
-
|
3193 |
-
#: views/tools/diagnostics/inc.validator.php:77
|
3194 |
-
msgid "Note: Symlinks are not discoverable on Windows OS with PHP"
|
3195 |
-
msgstr ""
|
3196 |
-
|
3197 |
-
#: views/tools/diagnostics/inc.validator.php:122
|
3198 |
-
msgid "Scanning Environment... This may take a few minutes."
|
3199 |
-
msgstr ""
|
3200 |
-
|
3201 |
-
#: views/tools/diagnostics/information.php:25
|
3202 |
-
msgid "File Found: Unable to remove"
|
3203 |
-
msgstr ""
|
3204 |
-
|
3205 |
-
#: views/tools/diagnostics/information.php:26
|
3206 |
-
msgid "Removed"
|
3207 |
-
msgstr ""
|
3208 |
-
|
3209 |
-
#: views/tools/diagnostics/information.php:44
|
3210 |
-
msgid "Installer file cleanup ran!"
|
3211 |
-
msgstr ""
|
3212 |
-
|
3213 |
-
#: views/tools/diagnostics/information.php:48
|
3214 |
-
msgid "Build cache removed."
|
3215 |
-
msgstr ""
|
3216 |
-
|
3217 |
-
#: views/tools/diagnostics/information.php:125
|
3218 |
-
msgid "No Duplicator installer files found on this WordPress Site."
|
3219 |
-
msgstr ""
|
3220 |
-
|
3221 |
-
#: views/tools/diagnostics/information.php:132
|
3222 |
-
msgid "Security Notes"
|
3223 |
-
msgstr ""
|
3224 |
-
|
3225 |
-
#: views/tools/diagnostics/information.php:133
|
3226 |
-
msgid "If the installer files do not successfully get removed with this action, then they WILL need to be removed manually through your hosts control panel or FTP. Please remove all installer files to avoid any security issues on this site. For more details please visit the FAQ link <a href=\"https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-295-q\" target=\"_blank\">Which files need to be removed after an install?</a>"
|
3227 |
-
msgstr ""
|
3228 |
-
|
3229 |
-
#: views/tools/diagnostics/information.php:140
|
3230 |
-
msgid "Some of the installer files did not get removed, "
|
3231 |
-
msgstr ""
|
3232 |
-
|
3233 |
-
#: views/tools/diagnostics/information.php:142
|
3234 |
-
msgid "please retry the installer cleanup process"
|
3235 |
-
msgstr ""
|
3236 |
-
|
3237 |
-
#: views/tools/diagnostics/information.php:144
|
3238 |
-
msgid " If this process continues please see the previous FAQ link."
|
3239 |
-
msgstr ""
|
3240 |
-
|
3241 |
-
#: views/tools/diagnostics/information.php:148
|
3242 |
-
msgid "Help Support Duplicator"
|
3243 |
-
msgstr ""
|
3244 |
-
|
3245 |
-
#: views/tools/diagnostics/information.php:149
|
3246 |
-
msgid "The Duplicator team has worked many years to make moving a WordPress site a much easier process. Show your support with a <a href=\"https://wordpress.org/support/plugin/duplicator/reviews/?filter=5\" target=\"_blank\">5 star review</a>! We would be thrilled if you could!"
|
3247 |
-
msgstr ""
|
3248 |
-
|
3249 |
-
#: views/tools/diagnostics/information.php:159
|
3250 |
-
msgid "Please test the entire site to validate the migration process!"
|
3251 |
-
msgstr ""
|
3252 |
-
|
3253 |
-
#: views/tools/diagnostics/information.php:165
|
3254 |
-
msgid "NOTICE: Safe mode (Basic) was enabled during install, be sure to re-enable all your plugins."
|
3255 |
-
msgstr ""
|
3256 |
-
|
3257 |
-
#: views/tools/diagnostics/information.php:170
|
3258 |
-
msgid "NOTICE: Safe mode (Advanced) was enabled during install, be sure to re-enable all your plugins."
|
3259 |
-
msgstr ""
|
3260 |
-
|
3261 |
-
#: views/tools/diagnostics/information.php:212
|
3262 |
-
msgid "Plugin settings reset."
|
3263 |
-
msgstr ""
|
3264 |
-
|
3265 |
-
#: views/tools/diagnostics/information.php:213
|
3266 |
-
msgid "View state settings reset."
|
3267 |
-
msgstr ""
|
3268 |
-
|
3269 |
-
#: views/tools/diagnostics/information.php:214
|
3270 |
-
msgid "Active package settings reset."
|
3271 |
-
msgstr ""
|
3272 |
-
|
3273 |
-
#: views/tools/diagnostics/logging.php:166
|
3274 |
-
msgid "Log file not found or unreadable"
|
3275 |
-
msgstr ""
|
3276 |
-
|
3277 |
-
#: views/tools/diagnostics/logging.php:167
|
3278 |
-
msgid "Try to create a package, since no log files were found in the snapshots directory with the extension *.log"
|
3279 |
-
msgstr ""
|
3280 |
-
|
3281 |
-
#: views/tools/diagnostics/logging.php:168
|
3282 |
-
msgid "Reasons for log file not showing"
|
3283 |
-
msgstr ""
|
3284 |
-
|
3285 |
-
#: views/tools/diagnostics/logging.php:169
|
3286 |
-
msgid "The web server does not support returning .log file extentions"
|
3287 |
-
msgstr ""
|
3288 |
-
|
3289 |
-
#: views/tools/diagnostics/logging.php:170
|
3290 |
-
msgid "The snapshots directory does not have the correct permissions to write files. Try setting the permissions to 755"
|
3291 |
-
msgstr ""
|
3292 |
-
|
3293 |
-
#: views/tools/diagnostics/logging.php:171
|
3294 |
-
msgid "The process that PHP runs under does not have enough permissions to create files. Please contact your hosting provider for more details"
|
3295 |
-
msgstr ""
|
3296 |
-
|
3297 |
-
#: views/tools/diagnostics/logging.php:185
|
3298 |
-
msgid "Consider our recommended"
|
3299 |
-
msgstr ""
|
3300 |
-
|
3301 |
-
#: views/tools/diagnostics/logging.php:187
|
3302 |
-
msgid "if you’re unhappy with your current provider"
|
3303 |
-
msgstr ""
|
3304 |
-
|
3305 |
-
#: views/tools/diagnostics/logging.php:191
|
3306 |
-
#: views/tools/diagnostics/logging.php:196
|
3307 |
-
msgid "Options"
|
3308 |
-
msgstr ""
|
3309 |
-
|
3310 |
-
#: views/tools/diagnostics/logging.php:198
|
3311 |
-
msgid "Refresh"
|
3312 |
-
msgstr ""
|
3313 |
-
|
3314 |
-
#: views/tools/diagnostics/logging.php:201
|
3315 |
-
msgid "Auto Refresh"
|
3316 |
-
msgstr ""
|
3317 |
-
|
3318 |
-
#: views/tools/diagnostics/logging.php:207
|
3319 |
-
msgid "Package Logs"
|
3320 |
-
msgstr ""
|
3321 |
-
|
3322 |
-
#: views/tools/diagnostics/logging.php:208
|
3323 |
-
msgid "Top 20"
|
3324 |
-
msgstr ""
|
3325 |
-
|
3326 |
-
#: views/tools/diagnostics/main.php:43
|
3327 |
-
msgid "Information"
|
3328 |
-
msgstr ""
|
3329 |
-
|
3330 |
-
#: views/tools/diagnostics/main.php:44
|
3331 |
-
msgid "Logs"
|
3332 |
-
msgstr ""
|
3333 |
-
|
3334 |
-
#: views/tools/diagnostics/support.php:32
|
3335 |
-
msgid "Migrating WordPress is a complex process and the logic to make all the magic happen smoothly may not work quickly with every site. With over 30,000 plugins and a very complex server eco-system some migrations may run into issues. This is why the Duplicator includes a detailed knowledgebase that can help with many common issues. Resources to additional support, approved hosting, and alternatives to fit your needs can be found below."
|
3336 |
-
msgstr ""
|
3337 |
-
|
3338 |
-
#: views/tools/diagnostics/support.php:44
|
3339 |
-
msgid "Knowledgebase"
|
3340 |
-
msgstr ""
|
3341 |
-
|
3342 |
-
#: views/tools/diagnostics/support.php:47
|
3343 |
-
msgid "Complete Online Documentation"
|
3344 |
-
msgstr ""
|
3345 |
-
|
3346 |
-
#: views/tools/diagnostics/support.php:49
|
3347 |
-
msgid "Choose A Section"
|
3348 |
-
msgstr ""
|
3349 |
-
|
3350 |
-
#: views/tools/diagnostics/support.php:50
|
3351 |
-
msgid "Quick Start"
|
3352 |
-
msgstr ""
|
3353 |
-
|
3354 |
-
#: views/tools/diagnostics/support.php:52
|
3355 |
-
msgid "User Guide"
|
3356 |
-
msgstr ""
|
3357 |
-
|
3358 |
-
#: views/tools/diagnostics/support.php:54
|
3359 |
-
msgid "FAQs"
|
3360 |
-
msgstr ""
|
3361 |
-
|
3362 |
-
#: views/tools/diagnostics/support.php:56
|
3363 |
-
msgid "Change Log"
|
3364 |
-
msgstr ""
|
3365 |
-
|
3366 |
-
#: views/tools/diagnostics/support.php:66
|
3367 |
-
msgid "Online Support"
|
3368 |
-
msgstr ""
|
3369 |
-
|
3370 |
-
#: views/tools/diagnostics/support.php:69
|
3371 |
-
msgid "Get Help From IT Professionals"
|
3372 |
-
msgstr ""
|
3373 |
-
|
3374 |
-
#: views/tools/diagnostics/support.php:73
|
3375 |
-
msgid "Get Support!"
|
3376 |
-
msgstr ""
|
3377 |
-
|
3378 |
-
#: views/tools/diagnostics/support.php:87
|
3379 |
-
msgid "Approved Hosting"
|
3380 |
-
msgstr ""
|
3381 |
-
|
3382 |
-
#: views/tools/diagnostics/support.php:90
|
3383 |
-
msgid "Servers That Work With Duplicator"
|
3384 |
-
msgstr ""
|
3385 |
-
|
3386 |
-
#: views/tools/diagnostics/support.php:93
|
3387 |
-
msgid "Trusted Providers!"
|
3388 |
-
msgstr ""
|
3389 |
-
|
3390 |
-
#: views/tools/diagnostics/support.php:104
|
3391 |
-
msgid "Alternatives"
|
3392 |
-
msgstr ""
|
3393 |
-
|
3394 |
-
#: views/tools/diagnostics/support.php:107
|
3395 |
-
msgid "Other Commercial Resources"
|
3396 |
-
msgstr ""
|
3397 |
-
|
3398 |
-
#: views/tools/diagnostics/support.php:110
|
3399 |
-
msgid "Pro Solutions!"
|
3400 |
-
msgstr ""
|
3401 |
-
|
3402 |
-
#: views/tools/templates.php:16
|
3403 |
-
msgid "Templates allow you to customize what you want to include in your site and store it as a re-usable profile."
|
3404 |
-
msgstr ""
|
3405 |
-
|
3406 |
-
#: views/tools/templates.php:18
|
3407 |
-
msgid "Save time and create a template that can be applied to a schedule or a custom package setup."
|
3408 |
-
msgstr ""
|
1 |
+
# Copyright (C) 2019 Snap Creek
|
2 |
+
# This file is distributed under the same license as the Duplicator plugin.
|
3 |
+
#, fuzzy
|
4 |
+
msgid ""
|
5 |
+
msgstr ""
|
6 |
+
"Project-Id-Version: Duplicator 1.3.7\n"
|
7 |
+
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/duplicator\n"
|
8 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
9 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"POT-Creation-Date: 2019-09-02 12:30+0530\n"
|
14 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
15 |
+
"X-Generator: Poedit 2.2.3\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;_ex;esc_attr_e;esc_attr__\n"
|
17 |
+
"X-Poedit-Basepath: ..\n"
|
18 |
+
"X-Poedit-SearchPath-0: .\n"
|
19 |
+
|
20 |
+
#: classes/class.logging.php:141
|
21 |
+
msgid "No Log"
|
22 |
+
msgstr ""
|
23 |
+
|
24 |
+
#: classes/class.server.php:207
|
25 |
+
msgid "(directory)"
|
26 |
+
msgstr ""
|
27 |
+
|
28 |
+
#: classes/package/class.pack.database.php:663
|
29 |
+
msgid "Please contact your DataBase administrator to fix the error."
|
30 |
+
msgstr ""
|
31 |
+
|
32 |
+
#: classes/package/class.pack.installer.php:90
|
33 |
+
msgid "Error reading DupArchive mini expander"
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: classes/package/class.pack.installer.php:103
|
37 |
+
msgid "Error writing installer contents"
|
38 |
+
msgstr ""
|
39 |
+
|
40 |
+
#: classes/package/class.pack.php:309
|
41 |
+
msgid "Package name can't be empty"
|
42 |
+
msgstr ""
|
43 |
+
|
44 |
+
#: classes/package/class.pack.php:315
|
45 |
+
#, php-format
|
46 |
+
msgid "Directories: <b>%1$s</b> isn't a valid path"
|
47 |
+
msgstr ""
|
48 |
+
|
49 |
+
#: classes/package/class.pack.php:321
|
50 |
+
#, php-format
|
51 |
+
msgid "File extension: <b>%1$s</b> isn't a valid extension"
|
52 |
+
msgstr ""
|
53 |
+
|
54 |
+
#: classes/package/class.pack.php:327
|
55 |
+
#, php-format
|
56 |
+
msgid "Files: <b>%1$s</b> isn't a valid file name"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: classes/package/class.pack.php:335
|
60 |
+
#, php-format
|
61 |
+
msgid "MySQL Server Host: <b>%1$s</b> isn't a valid host"
|
62 |
+
msgstr ""
|
63 |
+
|
64 |
+
#: classes/package/class.pack.php:346
|
65 |
+
#, php-format
|
66 |
+
msgid "MySQL Server Port: <b>%1$s</b> isn't a valid port"
|
67 |
+
msgstr ""
|
68 |
+
|
69 |
+
#: classes/package/class.pack.php:845
|
70 |
+
#, php-format
|
71 |
+
msgid "Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
|
72 |
+
msgstr ""
|
73 |
+
|
74 |
+
#: classes/package/class.pack.php:868
|
75 |
+
#, php-format
|
76 |
+
msgid "EXPECTED FILE/DIRECTORY COUNT: %1$s"
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: classes/package/class.pack.php:869
|
80 |
+
#, php-format
|
81 |
+
msgid "ACTUAL FILE/DIRECTORY COUNT: %1$s"
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: classes/package/class.pack.php:913
|
85 |
+
#, php-format
|
86 |
+
msgid "ERROR: Cannot open created archive. Error code = %1$s"
|
87 |
+
msgstr ""
|
88 |
+
|
89 |
+
#: classes/package/class.pack.php:918
|
90 |
+
msgid "ERROR: Archive is not valid zip archive."
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: classes/package/class.pack.php:922
|
94 |
+
msgid "ERROR: Archive doesn't pass consistency check."
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: classes/package/class.pack.php:927
|
98 |
+
msgid "ERROR: Archive checksum is bad."
|
99 |
+
msgstr ""
|
100 |
+
|
101 |
+
#: classes/package/class.pack.php:938
|
102 |
+
msgid "ARCHIVE CONSISTENCY TEST: Pass"
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:44
|
106 |
+
msgid "Package build appears stuck so marking package as failed. Is the Max Worker Time set too high?."
|
107 |
+
msgstr ""
|
108 |
+
|
109 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:45
|
110 |
+
msgid "Build Failure"
|
111 |
+
msgstr ""
|
112 |
+
|
113 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:83
|
114 |
+
msgid "Click on \"Resolve This\" button to fix the JSON settings."
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:95
|
118 |
+
#, php-format
|
119 |
+
msgid "ERROR: Can't find Scanfile %s. Please ensure there no non-English characters in the package or schedule name."
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:214
|
123 |
+
msgid "Problem adding items to archive."
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:216
|
127 |
+
msgid "Problems adding items to archive."
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: classes/package/duparchive/class.pack.archive.duparchive.php:314
|
131 |
+
msgid "Critical failure present in validation"
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: classes/ui/class.ui.dialog.php:95
|
135 |
+
msgid "Processing please wait..."
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: classes/ui/class.ui.dialog.php:98
|
139 |
+
msgid "OK"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: classes/ui/class.ui.dialog.php:99 deactivation.php:135
|
143 |
+
msgid "Cancel"
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: classes/ui/class.ui.notice.php:47
|
147 |
+
msgid "Safe Mode:"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: classes/ui/class.ui.notice.php:48
|
151 |
+
msgid "During the install safe mode was enabled deactivating all plugins.<br/> Please be sure to "
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: classes/ui/class.ui.notice.php:49
|
155 |
+
msgid "re-activate the plugins"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: classes/ui/class.ui.notice.php:56
|
159 |
+
#: views/tools/diagnostics/information.php:158
|
160 |
+
msgid "This site has been successfully migrated!"
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: classes/ui/class.ui.notice.php:57
|
164 |
+
msgid "Final step(s):"
|
165 |
+
msgstr ""
|
166 |
+
|
167 |
+
#: classes/ui/class.ui.notice.php:58
|
168 |
+
msgid "This message will be removed after all installer files are removed. Installer files must be removed to maintain a secure site. Click the link above or button below to remove all installer files and complete the migration."
|
169 |
+
msgstr ""
|
170 |
+
|
171 |
+
#: classes/ui/class.ui.notice.php:62
|
172 |
+
msgid "Remove Installation Files Now!"
|
173 |
+
msgstr ""
|
174 |
+
|
175 |
+
#: classes/ui/class.ui.notice.php:63
|
176 |
+
msgid "Optionally, Review Duplicator at WordPress.org..."
|
177 |
+
msgstr ""
|
178 |
+
|
179 |
+
#: classes/ui/class.ui.notice.php:69
|
180 |
+
msgid "Migration Almost Complete!"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: classes/ui/class.ui.notice.php:70
|
184 |
+
msgid "Reserved Duplicator installation files have been detected in the root directory. Please delete these installation files to avoid security issues. <br/> Go to:Duplicator > Tools > Information >Stored Data and click the \"Remove Installation Files\" button"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: classes/ui/class.ui.notice.php:76
|
188 |
+
msgid "Take me there now!"
|
189 |
+
msgstr ""
|
190 |
+
|
191 |
+
#: classes/ui/class.ui.notice.php:91
|
192 |
+
msgid "Redirecting Please Wait..."
|
193 |
+
msgstr ""
|
194 |
+
|
195 |
+
#: classes/ui/class.ui.notice.php:94
|
196 |
+
msgid "Invalid token permissions to perform this request."
|
197 |
+
msgstr ""
|
198 |
+
|
199 |
+
#: classes/ui/class.ui.notice.php:117
|
200 |
+
#, php-format
|
201 |
+
msgid "Activate %s"
|
202 |
+
msgstr ""
|
203 |
+
|
204 |
+
#: classes/ui/class.ui.screen.base.php:44
|
205 |
+
msgid "<b>Need Help?</b> Please check out these resources first:<ul>"
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: classes/ui/class.ui.screen.base.php:52 views/settings/gopro.php:218
|
209 |
+
#: views/tools/diagnostics/main.php:45
|
210 |
+
msgid "Support"
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: classes/ui/class.ui.screen.base.php:65
|
214 |
+
msgid "Resources"
|
215 |
+
msgstr ""
|
216 |
+
|
217 |
+
#: classes/ui/class.ui.screen.base.php:66
|
218 |
+
msgid "Knowledge Base"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: classes/ui/class.ui.screen.base.php:67
|
222 |
+
msgid "Full User Guide"
|
223 |
+
msgstr ""
|
224 |
+
|
225 |
+
#: classes/ui/class.ui.screen.base.php:68
|
226 |
+
msgid "Technical FAQs"
|
227 |
+
msgstr ""
|
228 |
+
|
229 |
+
#: classes/ui/class.ui.screen.base.php:69
|
230 |
+
msgid "Package Settings"
|
231 |
+
msgstr ""
|
232 |
+
|
233 |
+
#: classes/utilities/class.u.php:64
|
234 |
+
msgid "32-bit"
|
235 |
+
msgstr ""
|
236 |
+
|
237 |
+
#: classes/utilities/class.u.php:67
|
238 |
+
msgid "64-bit"
|
239 |
+
msgstr ""
|
240 |
+
|
241 |
+
#: classes/utilities/class.u.php:70
|
242 |
+
msgid "Unknown"
|
243 |
+
msgstr ""
|
244 |
+
|
245 |
+
#: classes/utilities/class.u.php:496
|
246 |
+
msgid "You do not have sufficient permissions to access this page."
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: ctrls/ctrl.package.php:175
|
250 |
+
msgid "Error building DupArchive package"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: ctrls/ctrl.package.php:303
|
254 |
+
msgid "An unathorized security request was made to this page. Please try again!"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: ctrls/ctrl.package.php:325
|
258 |
+
msgid "Active package object error"
|
259 |
+
msgstr ""
|
260 |
+
|
261 |
+
#: ctrls/ctrl.package.php:488 ctrls/ctrl.package.php:506
|
262 |
+
msgid "Couldn't find a local copy of the file requested."
|
263 |
+
msgstr ""
|
264 |
+
|
265 |
+
#: deactivation.php:48
|
266 |
+
msgid "Need help? We are ready to answer your questions."
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: deactivation.php:48
|
270 |
+
msgid "Contact Support"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: deactivation.php:53
|
274 |
+
msgid "It's not working on my server."
|
275 |
+
msgstr ""
|
276 |
+
|
277 |
+
#: deactivation.php:55
|
278 |
+
msgid "Kindly share what didn't work so we can fix it in future updates..."
|
279 |
+
msgstr ""
|
280 |
+
|
281 |
+
#: deactivation.php:60
|
282 |
+
msgid "It's too confusing to understand."
|
283 |
+
msgstr ""
|
284 |
+
|
285 |
+
#: deactivation.php:62
|
286 |
+
msgid "Please tell us what is not clear so that we can improve it."
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
+
#: deactivation.php:67
|
290 |
+
msgid "I found a different plugin that I like better."
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: deactivation.php:69
|
294 |
+
msgid "What's the plugin name?"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: deactivation.php:73
|
298 |
+
msgid "It does not do what I need."
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: deactivation.php:75
|
302 |
+
msgid "What does it need to do?"
|
303 |
+
msgstr ""
|
304 |
+
|
305 |
+
#: deactivation.php:79
|
306 |
+
msgid "It's a temporary deactivation, I use the plugin all the time."
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: deactivation.php:85
|
310 |
+
#, php-format
|
311 |
+
msgid "I'm switching over to the %s"
|
312 |
+
msgstr ""
|
313 |
+
|
314 |
+
#: deactivation.php:85
|
315 |
+
msgid "Pro version"
|
316 |
+
msgstr ""
|
317 |
+
|
318 |
+
#: deactivation.php:128
|
319 |
+
msgid "Quick Feedback"
|
320 |
+
msgstr ""
|
321 |
+
|
322 |
+
#: deactivation.php:129
|
323 |
+
msgid "If you have a moment, please let us know why you are deactivating"
|
324 |
+
msgstr ""
|
325 |
+
|
326 |
+
#: deactivation.php:136 deactivation.php:344
|
327 |
+
msgid "Skip & Deactivate"
|
328 |
+
msgstr ""
|
329 |
+
|
330 |
+
#: deactivation.php:137
|
331 |
+
msgid "Send & Deactivate"
|
332 |
+
msgstr ""
|
333 |
+
|
334 |
+
#: deactivation.php:140
|
335 |
+
msgid "Your response is sent anonymously."
|
336 |
+
msgstr ""
|
337 |
+
|
338 |
+
#: deactivation.php:235 deactivation.php:236
|
339 |
+
msgid "Processing"
|
340 |
+
msgstr ""
|
341 |
+
|
342 |
+
#: deactivation.php:283
|
343 |
+
msgid "Please tell us the reason so we can improve it."
|
344 |
+
msgstr ""
|
345 |
+
|
346 |
+
#: duplicator.php:398 views/packages/details/controller.php:48
|
347 |
+
#: views/packages/main/packages.php:88 views/packages/main/s1.setup1.php:72
|
348 |
+
#: views/packages/main/s2.scan1.php:185 views/packages/main/s3.build.php:90
|
349 |
+
#: views/settings/controller.php:23
|
350 |
+
msgid "Packages"
|
351 |
+
msgstr ""
|
352 |
+
|
353 |
+
#: duplicator.php:404 views/tools/controller.php:19
|
354 |
+
msgid "Tools"
|
355 |
+
msgstr ""
|
356 |
+
|
357 |
+
#: duplicator.php:409 views/packages/main/packages.php:85
|
358 |
+
#: views/settings/controller.php:19 views/settings/general.php:179
|
359 |
+
msgid "Settings"
|
360 |
+
msgstr ""
|
361 |
+
|
362 |
+
#: duplicator.php:413
|
363 |
+
msgid "Go Pro!"
|
364 |
+
msgstr ""
|
365 |
+
|
366 |
+
#: duplicator.php:481 views/settings/license.php:8
|
367 |
+
msgid "Manage"
|
368 |
+
msgstr ""
|
369 |
+
|
370 |
+
#: duplicator.php:498 views/packages/main/packages.php:82
|
371 |
+
msgid "Get Help"
|
372 |
+
msgstr ""
|
373 |
+
|
374 |
+
#: duplicator.php:498
|
375 |
+
msgid "Go Pro"
|
376 |
+
msgstr ""
|
377 |
+
|
378 |
+
#: views/packages/details/controller.php:13
|
379 |
+
msgid "package log"
|
380 |
+
msgstr ""
|
381 |
+
|
382 |
+
#: views/packages/details/controller.php:14
|
383 |
+
msgid "FAQ"
|
384 |
+
msgstr ""
|
385 |
+
|
386 |
+
#: views/packages/details/controller.php:15
|
387 |
+
msgid "resources page"
|
388 |
+
msgstr ""
|
389 |
+
|
390 |
+
#: views/packages/details/controller.php:34
|
391 |
+
msgid "This package contains an error. Please review the "
|
392 |
+
msgstr ""
|
393 |
+
|
394 |
+
#: views/packages/details/controller.php:34
|
395 |
+
msgid " for details."
|
396 |
+
msgstr ""
|
397 |
+
|
398 |
+
#: views/packages/details/controller.php:35
|
399 |
+
msgid "For help visit the "
|
400 |
+
msgstr ""
|
401 |
+
|
402 |
+
#: views/packages/details/controller.php:35
|
403 |
+
msgid " and "
|
404 |
+
msgstr ""
|
405 |
+
|
406 |
+
#: views/packages/details/controller.php:42
|
407 |
+
msgid "Details"
|
408 |
+
msgstr ""
|
409 |
+
|
410 |
+
#: views/packages/details/controller.php:45
|
411 |
+
msgid "Transfer"
|
412 |
+
msgstr ""
|
413 |
+
|
414 |
+
#: views/packages/details/detail.php:63
|
415 |
+
msgid "Invalid Package ID request. Please try again!"
|
416 |
+
msgstr ""
|
417 |
+
|
418 |
+
#: views/packages/details/detail.php:75 views/settings/controller.php:22
|
419 |
+
#: views/tools/diagnostics/inc.settings.php:29
|
420 |
+
msgid "General"
|
421 |
+
msgstr ""
|
422 |
+
|
423 |
+
#: views/packages/details/detail.php:81 views/packages/details/detail.php:184
|
424 |
+
#: views/packages/main/packages.php:138 views/packages/main/s1.setup2.php:73
|
425 |
+
#: views/packages/main/s1.setup2.php:99 views/packages/main/s2.scan3.php:529
|
426 |
+
#: views/packages/main/s3.build.php:133
|
427 |
+
msgid "Name"
|
428 |
+
msgstr ""
|
429 |
+
|
430 |
+
#: views/packages/details/detail.php:85
|
431 |
+
msgid "ID"
|
432 |
+
msgstr ""
|
433 |
+
|
434 |
+
#: views/packages/details/detail.php:86
|
435 |
+
msgid "Hash"
|
436 |
+
msgstr ""
|
437 |
+
|
438 |
+
#: views/packages/details/detail.php:87
|
439 |
+
msgid "Full Name"
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: views/packages/details/detail.php:92 views/packages/main/s1.setup2.php:82
|
443 |
+
#: views/packages/main/s2.scan3.php:530
|
444 |
+
msgid "Notes"
|
445 |
+
msgstr ""
|
446 |
+
|
447 |
+
#: views/packages/details/detail.php:93
|
448 |
+
msgid "- no notes -"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: views/packages/details/detail.php:96
|
452 |
+
msgid "Versions"
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: views/packages/details/detail.php:100 views/packages/main/s2.scan2.php:106
|
456 |
+
msgid "WordPress"
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: views/packages/details/detail.php:100 views/packages/details/detail.php:101
|
460 |
+
#: views/packages/details/detail.php:103 views/packages/details/detail.php:104
|
461 |
+
#: views/packages/details/detail.php:118
|
462 |
+
msgid "- unknown -"
|
463 |
+
msgstr ""
|
464 |
+
|
465 |
+
#: views/packages/details/detail.php:101
|
466 |
+
msgid "PHP"
|
467 |
+
msgstr ""
|
468 |
+
|
469 |
+
#: views/packages/details/detail.php:102
|
470 |
+
msgid "Mysql"
|
471 |
+
msgstr ""
|
472 |
+
|
473 |
+
#: views/packages/details/detail.php:109
|
474 |
+
msgid "Runtime"
|
475 |
+
msgstr ""
|
476 |
+
|
477 |
+
#: views/packages/details/detail.php:110
|
478 |
+
msgid "error running"
|
479 |
+
msgstr ""
|
480 |
+
|
481 |
+
#: views/packages/details/detail.php:113
|
482 |
+
msgid "Status"
|
483 |
+
msgstr ""
|
484 |
+
|
485 |
+
#: views/packages/details/detail.php:114
|
486 |
+
msgid "completed"
|
487 |
+
msgstr ""
|
488 |
+
|
489 |
+
#: views/packages/details/detail.php:114
|
490 |
+
msgid "in-complete"
|
491 |
+
msgstr ""
|
492 |
+
|
493 |
+
#: views/packages/details/detail.php:117 views/packages/details/detail.php:366
|
494 |
+
#: views/packages/main/s1.setup2.php:472
|
495 |
+
#: views/tools/diagnostics/inc.settings.php:118
|
496 |
+
msgid "User"
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: views/packages/details/detail.php:121 views/packages/details/detail.php:269
|
500 |
+
#: views/packages/main/s1.setup2.php:158 views/packages/main/s2.scan3.php:28
|
501 |
+
#: views/packages/main/s2.scan3.php:586 views/packages/main/s2.scan3.php:638
|
502 |
+
msgid "Files"
|
503 |
+
msgstr ""
|
504 |
+
|
505 |
+
#: views/packages/details/detail.php:129
|
506 |
+
msgid "Log"
|
507 |
+
msgstr ""
|
508 |
+
|
509 |
+
#: views/packages/details/detail.php:130
|
510 |
+
msgid "Share"
|
511 |
+
msgstr ""
|
512 |
+
|
513 |
+
#: views/packages/details/detail.php:138 views/packages/details/detail.php:226
|
514 |
+
#: views/packages/main/packages.php:208 views/packages/main/s1.setup2.php:142
|
515 |
+
#: views/packages/main/s2.scan3.php:21 views/packages/main/s3.build.php:146
|
516 |
+
#: views/settings/packages.php:204
|
517 |
+
msgid "Archive"
|
518 |
+
msgstr ""
|
519 |
+
|
520 |
+
#: views/packages/details/detail.php:142 views/packages/details/detail.php:325
|
521 |
+
#: views/packages/main/packages.php:205 views/packages/main/s1.setup2.php:381
|
522 |
+
#: views/packages/main/s3.build.php:143
|
523 |
+
msgid "Installer"
|
524 |
+
msgstr ""
|
525 |
+
|
526 |
+
#: views/packages/details/detail.php:146 views/packages/details/detail.php:362
|
527 |
+
#: views/packages/main/s1.setup2.php:159 views/packages/main/s1.setup2.php:468
|
528 |
+
#: views/packages/main/s2.scan3.php:365 views/packages/main/s2.scan3.php:535
|
529 |
+
#: views/settings/packages.php:70
|
530 |
+
msgid "Database"
|
531 |
+
msgstr ""
|
532 |
+
|
533 |
+
#: views/packages/details/detail.php:160
|
534 |
+
msgid "Download Links"
|
535 |
+
msgstr ""
|
536 |
+
|
537 |
+
#: views/packages/details/detail.php:163
|
538 |
+
msgid "The following links contain sensitive data. Please share with caution!"
|
539 |
+
msgstr ""
|
540 |
+
|
541 |
+
#: views/packages/details/detail.php:169
|
542 |
+
msgid "The database SQL script is a quick link to your database backup script. An exact copy is also stored in the package."
|
543 |
+
msgstr ""
|
544 |
+
|
545 |
+
#: views/packages/details/detail.php:177 views/packages/main/s1.setup2.php:92
|
546 |
+
#: views/settings/controller.php:25 views/settings/general.php:110
|
547 |
+
msgid "Storage"
|
548 |
+
msgstr ""
|
549 |
+
|
550 |
+
#: views/packages/details/detail.php:185 views/packages/details/detail.php:286
|
551 |
+
#: views/packages/main/s1.setup2.php:100 views/settings/license.php:12
|
552 |
+
msgid "Type"
|
553 |
+
msgstr ""
|
554 |
+
|
555 |
+
#: views/packages/details/detail.php:186 views/packages/main/s1.setup2.php:101
|
556 |
+
msgid "Location"
|
557 |
+
msgstr ""
|
558 |
+
|
559 |
+
#: views/packages/details/detail.php:191 views/packages/main/s1.setup2.php:106
|
560 |
+
msgid "Default"
|
561 |
+
msgstr ""
|
562 |
+
|
563 |
+
#: views/packages/details/detail.php:192 views/packages/main/s1.setup2.php:107
|
564 |
+
msgid "Local"
|
565 |
+
msgstr ""
|
566 |
+
|
567 |
+
#: views/packages/details/detail.php:203 views/packages/main/s1.setup2.php:119
|
568 |
+
#, php-format
|
569 |
+
msgid "%1$s, %2$s, %3$s, %4$s, %5$s and other storage options available in"
|
570 |
+
msgstr ""
|
571 |
+
|
572 |
+
#: views/packages/details/detail.php:204 views/packages/main/s1.setup2.php:120
|
573 |
+
#: views/packages/main/s2.scan3.php:485 views/packages/main/s2.scan3.php:497
|
574 |
+
#: views/packages/main/s3.build.php:21
|
575 |
+
msgid "Duplicator Pro"
|
576 |
+
msgstr ""
|
577 |
+
|
578 |
+
#: views/packages/details/detail.php:206 views/packages/main/s1.setup2.php:122
|
579 |
+
msgid "Additional Storage:"
|
580 |
+
msgstr ""
|
581 |
+
|
582 |
+
#: views/packages/details/detail.php:207 views/packages/main/s1.setup2.php:123
|
583 |
+
msgid "Duplicator Pro allows you to create a package and then store it at a custom location on this server or to a cloud based location such as Google Drive, Amazon, Dropbox or FTP."
|
584 |
+
msgstr ""
|
585 |
+
|
586 |
+
#: views/packages/details/detail.php:234 views/packages/details/detail.php:290
|
587 |
+
#: views/packages/main/s1.setup2.php:260
|
588 |
+
msgid "Build Mode"
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: views/packages/details/detail.php:241
|
592 |
+
msgid "Database Mode"
|
593 |
+
msgstr ""
|
594 |
+
|
595 |
+
#: views/packages/details/detail.php:242
|
596 |
+
msgid "Archive Database Only Enabled"
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: views/packages/details/detail.php:246 views/packages/details/detail.php:303
|
600 |
+
msgid "Filters"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: views/packages/details/detail.php:250 views/packages/main/s2.scan3.php:564
|
604 |
+
#: views/packages/main/s2.scan3.php:629
|
605 |
+
msgid "Directories"
|
606 |
+
msgstr ""
|
607 |
+
|
608 |
+
#: views/packages/details/detail.php:254 views/packages/details/detail.php:264
|
609 |
+
#: views/packages/details/detail.php:273 views/packages/details/detail.php:312
|
610 |
+
msgid "- no filters -"
|
611 |
+
msgstr ""
|
612 |
+
|
613 |
+
#: views/packages/details/detail.php:260 views/packages/main/s2.scan3.php:575
|
614 |
+
msgid "Extensions"
|
615 |
+
msgstr ""
|
616 |
+
|
617 |
+
#: views/packages/details/detail.php:283 views/packages/details/detail.php:395
|
618 |
+
msgid "DATABASE"
|
619 |
+
msgstr ""
|
620 |
+
|
621 |
+
#: views/packages/details/detail.php:296 views/packages/main/s2.scan3.php:546
|
622 |
+
msgid "MySQL Compatibility Mode Enabled"
|
623 |
+
msgstr ""
|
624 |
+
|
625 |
+
#: views/packages/details/detail.php:297 views/packages/main/s1.setup2.php:336
|
626 |
+
#: views/packages/main/s2.scan2.php:76 views/packages/main/s2.scan2.php:87
|
627 |
+
#: views/packages/main/s2.scan2.php:94 views/packages/main/s2.scan3.php:547
|
628 |
+
msgid "details"
|
629 |
+
msgstr ""
|
630 |
+
|
631 |
+
#: views/packages/details/detail.php:307 views/packages/main/s2.scan3.php:393
|
632 |
+
msgid "Tables"
|
633 |
+
msgstr ""
|
634 |
+
|
635 |
+
#: views/packages/details/detail.php:332
|
636 |
+
msgid " Security"
|
637 |
+
msgstr ""
|
638 |
+
|
639 |
+
#: views/packages/details/detail.php:336
|
640 |
+
msgid "Password Protection"
|
641 |
+
msgstr ""
|
642 |
+
|
643 |
+
#: views/packages/details/detail.php:345 views/packages/main/s1.setup2.php:431
|
644 |
+
msgid "Show/Hide Password"
|
645 |
+
msgstr ""
|
646 |
+
|
647 |
+
#: views/packages/details/detail.php:355 views/packages/main/s1.setup2.php:457
|
648 |
+
msgid " MySQL Server"
|
649 |
+
msgstr ""
|
650 |
+
|
651 |
+
#: views/packages/details/detail.php:358 views/packages/main/s1.setup2.php:460
|
652 |
+
msgid "Host"
|
653 |
+
msgstr ""
|
654 |
+
|
655 |
+
#: views/packages/details/detail.php:359 views/packages/details/detail.php:363
|
656 |
+
#: views/packages/details/detail.php:367
|
657 |
+
msgid "- not set -"
|
658 |
+
msgstr ""
|
659 |
+
|
660 |
+
#: views/packages/details/detail.php:375
|
661 |
+
msgid "View Package Object"
|
662 |
+
msgstr ""
|
663 |
+
|
664 |
+
#: views/packages/details/detail.php:392
|
665 |
+
msgid "Package File Links"
|
666 |
+
msgstr ""
|
667 |
+
|
668 |
+
#: views/packages/details/detail.php:396
|
669 |
+
msgid "PACKAGE"
|
670 |
+
msgstr ""
|
671 |
+
|
672 |
+
#: views/packages/details/detail.php:397
|
673 |
+
msgid "INSTALLER"
|
674 |
+
msgstr ""
|
675 |
+
|
676 |
+
#: views/packages/details/detail.php:398
|
677 |
+
msgid "LOG"
|
678 |
+
msgstr ""
|
679 |
+
|
680 |
+
#: views/packages/details/transfer.php:15
|
681 |
+
msgid "Transfer your packages to multiple locations with Duplicator Pro"
|
682 |
+
msgstr ""
|
683 |
+
|
684 |
+
#: views/packages/details/transfer.php:20 views/settings/storage.php:19
|
685 |
+
msgid "Amazon S3"
|
686 |
+
msgstr ""
|
687 |
+
|
688 |
+
#: views/packages/details/transfer.php:21
|
689 |
+
msgid "Dropbox"
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: views/packages/details/transfer.php:22 views/settings/storage.php:21
|
693 |
+
msgid "Google Drive"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: views/packages/details/transfer.php:23 views/settings/storage.php:22
|
697 |
+
msgid "One Drive"
|
698 |
+
msgstr ""
|
699 |
+
|
700 |
+
#: views/packages/details/transfer.php:24 views/settings/storage.php:23
|
701 |
+
msgid "FTP & SFTP"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: views/packages/details/transfer.php:25 views/settings/storage.php:24
|
705 |
+
msgid "Custom Directory"
|
706 |
+
msgstr ""
|
707 |
+
|
708 |
+
#: views/packages/details/transfer.php:29
|
709 |
+
msgid "Set up a one-time storage location and automatically push the package to your destination."
|
710 |
+
msgstr ""
|
711 |
+
|
712 |
+
#: views/packages/details/transfer.php:35 views/settings/schedule.php:22
|
713 |
+
#: views/settings/storage.php:34 views/tools/templates.php:23
|
714 |
+
msgid "Learn More"
|
715 |
+
msgstr ""
|
716 |
+
|
717 |
+
#: views/packages/main/controller.php:9
|
718 |
+
msgid "An invalid request was made to this page."
|
719 |
+
msgstr ""
|
720 |
+
|
721 |
+
#: views/packages/main/controller.php:10
|
722 |
+
msgid "Please retry by going to the"
|
723 |
+
msgstr ""
|
724 |
+
|
725 |
+
#: views/packages/main/controller.php:11
|
726 |
+
msgid "Packages Screen"
|
727 |
+
msgstr ""
|
728 |
+
|
729 |
+
#: views/packages/main/controller.php:59
|
730 |
+
msgid "Packages » All"
|
731 |
+
msgstr ""
|
732 |
+
|
733 |
+
#: views/packages/main/controller.php:63 views/packages/main/controller.php:67
|
734 |
+
#: views/packages/main/controller.php:71
|
735 |
+
msgid "Packages » New"
|
736 |
+
msgstr ""
|
737 |
+
|
738 |
+
#: views/packages/main/packages.php:77
|
739 |
+
msgid "Bulk Actions"
|
740 |
+
msgstr ""
|
741 |
+
|
742 |
+
#: views/packages/main/packages.php:78
|
743 |
+
msgid "Delete selected package(s)"
|
744 |
+
msgstr ""
|
745 |
+
|
746 |
+
#: views/packages/main/packages.php:78
|
747 |
+
msgid "Delete"
|
748 |
+
msgstr ""
|
749 |
+
|
750 |
+
#: views/packages/main/packages.php:80
|
751 |
+
msgid "Apply"
|
752 |
+
msgstr ""
|
753 |
+
|
754 |
+
#: views/packages/main/packages.php:98 views/packages/main/s1.setup1.php:73
|
755 |
+
#: views/packages/main/s2.scan1.php:186 views/packages/main/s3.build.php:101
|
756 |
+
msgid "Create New"
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: views/packages/main/packages.php:114 views/packages/main/packages.php:148
|
760 |
+
msgid "No Packages Found."
|
761 |
+
msgstr ""
|
762 |
+
|
763 |
+
#: views/packages/main/packages.php:115 views/packages/main/packages.php:149
|
764 |
+
msgid "Click the 'Create New' button to build a package."
|
765 |
+
msgstr ""
|
766 |
+
|
767 |
+
#: views/packages/main/packages.php:117 views/packages/main/packages.php:151
|
768 |
+
msgid "New to Duplicator?"
|
769 |
+
msgstr ""
|
770 |
+
|
771 |
+
#: views/packages/main/packages.php:119 views/packages/main/packages.php:153
|
772 |
+
msgid "Check out the 'Quick Start' guide!"
|
773 |
+
msgstr ""
|
774 |
+
|
775 |
+
#: views/packages/main/packages.php:135
|
776 |
+
msgid "Select all packages"
|
777 |
+
msgstr ""
|
778 |
+
|
779 |
+
#: views/packages/main/packages.php:136
|
780 |
+
msgid "Created"
|
781 |
+
msgstr ""
|
782 |
+
|
783 |
+
#: views/packages/main/packages.php:137 views/packages/main/s2.scan3.php:88
|
784 |
+
#: views/packages/main/s2.scan3.php:392
|
785 |
+
msgid "Size"
|
786 |
+
msgstr ""
|
787 |
+
|
788 |
+
#: views/packages/main/packages.php:140 views/packages/main/s2.scan3.php:528
|
789 |
+
msgid "Package"
|
790 |
+
msgstr ""
|
791 |
+
|
792 |
+
#: views/packages/main/packages.php:189
|
793 |
+
msgid "Archive created as zip file"
|
794 |
+
msgstr ""
|
795 |
+
|
796 |
+
#: views/packages/main/packages.php:190
|
797 |
+
msgid "Archive created as daf file"
|
798 |
+
msgstr ""
|
799 |
+
|
800 |
+
#: views/packages/main/packages.php:195 views/packages/main/s1.setup2.php:148
|
801 |
+
#: views/packages/main/s2.scan3.php:35
|
802 |
+
msgid "Database Only"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: views/packages/main/packages.php:199
|
806 |
+
msgid "Package Build Running"
|
807 |
+
msgstr ""
|
808 |
+
|
809 |
+
#: views/packages/main/packages.php:200
|
810 |
+
msgid "To stop or reset this package build goto Settings > Advanced > Reset Packages"
|
811 |
+
msgstr ""
|
812 |
+
|
813 |
+
#: views/packages/main/packages.php:210 views/packages/main/packages.php:228
|
814 |
+
msgid "Package Details"
|
815 |
+
msgstr ""
|
816 |
+
|
817 |
+
#: views/packages/main/packages.php:226
|
818 |
+
msgid "Error Processing"
|
819 |
+
msgstr ""
|
820 |
+
|
821 |
+
#: views/packages/main/packages.php:246
|
822 |
+
msgid "Current Server Time"
|
823 |
+
msgstr ""
|
824 |
+
|
825 |
+
#: views/packages/main/packages.php:249 views/packages/main/s3.build.php:321
|
826 |
+
msgid "Time"
|
827 |
+
msgstr ""
|
828 |
+
|
829 |
+
#: views/packages/main/packages.php:258
|
830 |
+
msgid "Items"
|
831 |
+
msgstr ""
|
832 |
+
|
833 |
+
#: views/packages/main/packages.php:268
|
834 |
+
msgid "Bulk Action Required"
|
835 |
+
msgstr ""
|
836 |
+
|
837 |
+
#: views/packages/main/packages.php:270
|
838 |
+
msgid "No selections made! Please select an action from the \"Bulk Actions\" drop down menu."
|
839 |
+
msgstr ""
|
840 |
+
|
841 |
+
#: views/packages/main/packages.php:274
|
842 |
+
msgid "Selection Required"
|
843 |
+
msgstr ""
|
844 |
+
|
845 |
+
#: views/packages/main/packages.php:276
|
846 |
+
msgid "No selections made! Please select at least one package to delete."
|
847 |
+
msgstr ""
|
848 |
+
|
849 |
+
#: views/packages/main/packages.php:280
|
850 |
+
msgid "Delete Packages?"
|
851 |
+
msgstr ""
|
852 |
+
|
853 |
+
#: views/packages/main/packages.php:281
|
854 |
+
msgid "Are you sure you want to delete the selected package(s)?"
|
855 |
+
msgstr ""
|
856 |
+
|
857 |
+
#: views/packages/main/packages.php:282
|
858 |
+
msgid "Removing Packages, Please Wait..."
|
859 |
+
msgstr ""
|
860 |
+
|
861 |
+
#: views/packages/main/packages.php:289
|
862 |
+
msgid "Duplicator Help"
|
863 |
+
msgstr ""
|
864 |
+
|
865 |
+
#: views/packages/main/packages.php:294
|
866 |
+
msgid "Alert!"
|
867 |
+
msgstr ""
|
868 |
+
|
869 |
+
#: views/packages/main/packages.php:295
|
870 |
+
msgid "A package is being processed. Retry later."
|
871 |
+
msgstr ""
|
872 |
+
|
873 |
+
#: views/packages/main/packages.php:302
|
874 |
+
msgid "Common Questions:"
|
875 |
+
msgstr ""
|
876 |
+
|
877 |
+
#: views/packages/main/packages.php:303
|
878 |
+
msgid "How do I create a package"
|
879 |
+
msgstr ""
|
880 |
+
|
881 |
+
#: views/packages/main/packages.php:304
|
882 |
+
msgid "How do I install a package?"
|
883 |
+
msgstr ""
|
884 |
+
|
885 |
+
#: views/packages/main/packages.php:305
|
886 |
+
msgid "Frequently Asked Questions!"
|
887 |
+
msgstr ""
|
888 |
+
|
889 |
+
#: views/packages/main/packages.php:308
|
890 |
+
msgid "Other Resources:"
|
891 |
+
msgstr ""
|
892 |
+
|
893 |
+
#: views/packages/main/packages.php:309
|
894 |
+
msgid "Need help with the plugin?"
|
895 |
+
msgstr ""
|
896 |
+
|
897 |
+
#: views/packages/main/packages.php:310
|
898 |
+
msgid "Have an idea for the plugin?"
|
899 |
+
msgstr ""
|
900 |
+
|
901 |
+
#: views/packages/main/packages.php:312
|
902 |
+
msgid "Help review the plugin!"
|
903 |
+
msgstr ""
|
904 |
+
|
905 |
+
#: views/packages/main/s1.setup1.php:12
|
906 |
+
msgid "Package settings have been reset."
|
907 |
+
msgstr ""
|
908 |
+
|
909 |
+
#: views/packages/main/s1.setup1.php:62 views/packages/main/s1.setup2.php:401
|
910 |
+
#: views/packages/main/s2.scan1.php:175 views/packages/main/s2.scan2.php:56
|
911 |
+
#: views/packages/main/s3.build.php:79
|
912 |
+
msgid "Setup"
|
913 |
+
msgstr ""
|
914 |
+
|
915 |
+
#: views/packages/main/s1.setup1.php:63 views/packages/main/s2.scan1.php:176
|
916 |
+
#: views/packages/main/s3.build.php:80
|
917 |
+
msgid "Scan"
|
918 |
+
msgstr ""
|
919 |
+
|
920 |
+
#: views/packages/main/s1.setup1.php:64 views/packages/main/s2.scan1.php:177
|
921 |
+
#: views/packages/main/s2.scan1.php:269 views/packages/main/s3.build.php:81
|
922 |
+
msgid "Build"
|
923 |
+
msgstr ""
|
924 |
+
|
925 |
+
#: views/packages/main/s1.setup1.php:67
|
926 |
+
msgid "Step 1: Package Setup"
|
927 |
+
msgstr ""
|
928 |
+
|
929 |
+
#: views/packages/main/s1.setup1.php:90
|
930 |
+
msgid "Requirements:"
|
931 |
+
msgstr ""
|
932 |
+
|
933 |
+
#: views/packages/main/s1.setup1.php:99
|
934 |
+
msgid "System requirements must pass for the Duplicator to work properly. Click each link for details."
|
935 |
+
msgstr ""
|
936 |
+
|
937 |
+
#: views/packages/main/s1.setup1.php:105
|
938 |
+
msgid "PHP Support"
|
939 |
+
msgstr ""
|
940 |
+
|
941 |
+
#: views/packages/main/s1.setup1.php:111 views/packages/main/s2.scan2.php:68
|
942 |
+
msgid "PHP Version"
|
943 |
+
msgstr ""
|
944 |
+
|
945 |
+
#: views/packages/main/s1.setup1.php:113
|
946 |
+
msgid "PHP versions 5.2.9+ or higher is required."
|
947 |
+
msgstr ""
|
948 |
+
|
949 |
+
#: views/packages/main/s1.setup1.php:117
|
950 |
+
msgid "Zip Archive Enabled"
|
951 |
+
msgstr ""
|
952 |
+
|
953 |
+
#: views/packages/main/s1.setup1.php:121
|
954 |
+
msgid "ZipArchive extension is required or"
|
955 |
+
msgstr ""
|
956 |
+
|
957 |
+
#: views/packages/main/s1.setup1.php:122
|
958 |
+
msgid "Switch to DupArchive"
|
959 |
+
msgstr ""
|
960 |
+
|
961 |
+
#: views/packages/main/s1.setup1.php:123
|
962 |
+
msgid "to by-pass this requirement."
|
963 |
+
msgstr ""
|
964 |
+
|
965 |
+
#: views/packages/main/s1.setup1.php:129
|
966 |
+
msgid "Safe Mode Off"
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
+
#: views/packages/main/s1.setup1.php:131
|
970 |
+
msgid "Safe Mode should be set to Off in you php.ini file and is deprecated as of PHP 5.3.0."
|
971 |
+
msgstr ""
|
972 |
+
|
973 |
+
#: views/packages/main/s1.setup1.php:134 views/packages/main/s1.setup1.php:139
|
974 |
+
#: views/packages/main/s1.setup1.php:144
|
975 |
+
msgid "Function"
|
976 |
+
msgstr ""
|
977 |
+
|
978 |
+
#: views/packages/main/s1.setup1.php:150
|
979 |
+
msgid "For any issues in this section please contact your hosting provider or server administrator. For additional information see our online documentation."
|
980 |
+
msgstr ""
|
981 |
+
|
982 |
+
#: views/packages/main/s1.setup1.php:158
|
983 |
+
msgid "Required Paths"
|
984 |
+
msgstr ""
|
985 |
+
|
986 |
+
#: views/packages/main/s1.setup1.php:178
|
987 |
+
msgid "If the root WordPress path is not writable by PHP on some systems this can cause issues."
|
988 |
+
msgstr ""
|
989 |
+
|
990 |
+
#: views/packages/main/s1.setup1.php:181
|
991 |
+
msgid "If Duplicator does not have enough permissions then you will need to manually create the paths above. "
|
992 |
+
msgstr ""
|
993 |
+
|
994 |
+
#: views/packages/main/s1.setup1.php:190
|
995 |
+
msgid "Server Support"
|
996 |
+
msgstr ""
|
997 |
+
|
998 |
+
#: views/packages/main/s1.setup1.php:196
|
999 |
+
msgid "MySQL Version"
|
1000 |
+
msgstr ""
|
1001 |
+
|
1002 |
+
#: views/packages/main/s1.setup1.php:200
|
1003 |
+
msgid "MySQLi Support"
|
1004 |
+
msgstr ""
|
1005 |
+
|
1006 |
+
#: views/packages/main/s1.setup1.php:206
|
1007 |
+
msgid "MySQL version 5.0+ or better is required and the PHP MySQLi extension (note the trailing 'i') is also required. Contact your server administrator and request that mysqli extension and MySQL Server 5.0+ be installed."
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: views/packages/main/s1.setup1.php:207
|
1011 |
+
#: views/tools/diagnostics/inc.data.php:26
|
1012 |
+
msgid "more info"
|
1013 |
+
msgstr ""
|
1014 |
+
|
1015 |
+
#: views/packages/main/s1.setup1.php:216
|
1016 |
+
msgid "Reserved Files"
|
1017 |
+
msgstr ""
|
1018 |
+
|
1019 |
+
#: views/packages/main/s1.setup1.php:221
|
1020 |
+
msgid "None of the reserved files where found from a previous install. This means you are clear to create a new package."
|
1021 |
+
msgstr ""
|
1022 |
+
|
1023 |
+
#: views/packages/main/s1.setup1.php:229
|
1024 |
+
msgid "WordPress Root Path:"
|
1025 |
+
msgstr ""
|
1026 |
+
|
1027 |
+
#: views/packages/main/s1.setup1.php:231
|
1028 |
+
msgid "Remove Files Now"
|
1029 |
+
msgstr ""
|
1030 |
+
|
1031 |
+
#: views/packages/main/s1.setup2.php:76
|
1032 |
+
msgid "Add Notes"
|
1033 |
+
msgstr ""
|
1034 |
+
|
1035 |
+
#: views/packages/main/s1.setup2.php:79
|
1036 |
+
msgid "Toggle a default name"
|
1037 |
+
msgstr ""
|
1038 |
+
|
1039 |
+
#: views/packages/main/s1.setup2.php:146
|
1040 |
+
msgid "File filter enabled"
|
1041 |
+
msgstr ""
|
1042 |
+
|
1043 |
+
#: views/packages/main/s1.setup2.php:147
|
1044 |
+
msgid "Database filter enabled"
|
1045 |
+
msgstr ""
|
1046 |
+
|
1047 |
+
#: views/packages/main/s1.setup2.php:148 views/packages/main/s1.setup2.php:173
|
1048 |
+
msgid "Archive Only the Database"
|
1049 |
+
msgstr ""
|
1050 |
+
|
1051 |
+
#: views/packages/main/s1.setup2.php:177
|
1052 |
+
msgid "Enable File Filters"
|
1053 |
+
msgstr ""
|
1054 |
+
|
1055 |
+
#: views/packages/main/s1.setup2.php:179
|
1056 |
+
msgid "File Filters:"
|
1057 |
+
msgstr ""
|
1058 |
+
|
1059 |
+
#: views/packages/main/s1.setup2.php:180
|
1060 |
+
msgid "File filters allow you to ignore directories and file extensions. When creating a package only include the data you want and need. This helps to improve the overall archive build time and keep your backups simple and clean."
|
1061 |
+
msgstr ""
|
1062 |
+
|
1063 |
+
#: views/packages/main/s1.setup2.php:185 views/packages/main/s1.setup2.php:199
|
1064 |
+
#: views/packages/main/s1.setup2.php:207
|
1065 |
+
msgid "Separate all filters by semicolon"
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: views/packages/main/s1.setup2.php:187
|
1069 |
+
msgid "Directories:"
|
1070 |
+
msgstr ""
|
1071 |
+
|
1072 |
+
#: views/packages/main/s1.setup2.php:188
|
1073 |
+
msgid "Number of directories filtered"
|
1074 |
+
msgstr ""
|
1075 |
+
|
1076 |
+
#: views/packages/main/s1.setup2.php:192
|
1077 |
+
msgid "root path"
|
1078 |
+
msgstr ""
|
1079 |
+
|
1080 |
+
#: views/packages/main/s1.setup2.php:193
|
1081 |
+
msgid "wp-uploads"
|
1082 |
+
msgstr ""
|
1083 |
+
|
1084 |
+
#: views/packages/main/s1.setup2.php:194
|
1085 |
+
msgid "cache"
|
1086 |
+
msgstr ""
|
1087 |
+
|
1088 |
+
#: views/packages/main/s1.setup2.php:195 views/packages/main/s1.setup2.php:203
|
1089 |
+
#: views/packages/main/s1.setup2.php:215
|
1090 |
+
msgid "(clear)"
|
1091 |
+
msgstr ""
|
1092 |
+
|
1093 |
+
#: views/packages/main/s1.setup2.php:199
|
1094 |
+
msgid "File extensions"
|
1095 |
+
msgstr ""
|
1096 |
+
|
1097 |
+
#: views/packages/main/s1.setup2.php:201
|
1098 |
+
msgid "media"
|
1099 |
+
msgstr ""
|
1100 |
+
|
1101 |
+
#: views/packages/main/s1.setup2.php:202
|
1102 |
+
msgid "archive"
|
1103 |
+
msgstr ""
|
1104 |
+
|
1105 |
+
#: views/packages/main/s1.setup2.php:209
|
1106 |
+
msgid "Files:"
|
1107 |
+
msgstr ""
|
1108 |
+
|
1109 |
+
#: views/packages/main/s1.setup2.php:210
|
1110 |
+
msgid "Number of files filtered"
|
1111 |
+
msgstr ""
|
1112 |
+
|
1113 |
+
#: views/packages/main/s1.setup2.php:214
|
1114 |
+
msgid "(file path)"
|
1115 |
+
msgstr ""
|
1116 |
+
|
1117 |
+
#: views/packages/main/s1.setup2.php:220
|
1118 |
+
msgid "The directory, file and extensions paths above will be excluded from the archive file if enabled is checked."
|
1119 |
+
msgstr ""
|
1120 |
+
|
1121 |
+
#: views/packages/main/s1.setup2.php:221
|
1122 |
+
msgid "Use the full path for directories and files with semicolons to separate all paths."
|
1123 |
+
msgstr ""
|
1124 |
+
|
1125 |
+
#: views/packages/main/s1.setup2.php:231
|
1126 |
+
msgid "This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the "
|
1127 |
+
msgstr ""
|
1128 |
+
|
1129 |
+
#: views/packages/main/s1.setup2.php:234 views/packages/main/s3.build.php:279
|
1130 |
+
msgid "Quick Start Two-Part Install Instructions"
|
1131 |
+
msgstr ""
|
1132 |
+
|
1133 |
+
#: views/packages/main/s1.setup2.php:238
|
1134 |
+
msgid "<b>Overview:</b><br/> This advanced option excludes all files from the archive. Only the database and a copy of the installer.php will be included in the archive.zip file. The option can be used for backing up and moving only the database."
|
1135 |
+
msgstr ""
|
1136 |
+
|
1137 |
+
#: views/packages/main/s1.setup2.php:243
|
1138 |
+
msgid "<b><i class='fa fa-exclamation-circle'></i> Notice:</b><br/>"
|
1139 |
+
msgstr ""
|
1140 |
+
|
1141 |
+
#: views/packages/main/s1.setup2.php:245
|
1142 |
+
msgid "Please use caution when installing only the database over an existing site and be sure the correct files correspond with the database. For example, if WordPress 4.6 is on this site and you copy the database to a host that has WordPress 4.8 files then the source code of the files will not be in sync with the database causing possible errors. If you’re immediately moving the source files with the database then you can ignore this notice. Please use this advanced feature with caution!"
|
1143 |
+
msgstr ""
|
1144 |
+
|
1145 |
+
#: views/packages/main/s1.setup2.php:267
|
1146 |
+
msgid "Enable Table Filters"
|
1147 |
+
msgstr ""
|
1148 |
+
|
1149 |
+
#: views/packages/main/s1.setup2.php:269
|
1150 |
+
msgid "Enable Table Filters:"
|
1151 |
+
msgstr ""
|
1152 |
+
|
1153 |
+
#: views/packages/main/s1.setup2.php:270
|
1154 |
+
msgid "Checked tables will not be added to the database script. Excluding certain tables can possibly cause your site or plugins to not work correctly after install!"
|
1155 |
+
msgstr ""
|
1156 |
+
|
1157 |
+
#: views/packages/main/s1.setup2.php:276
|
1158 |
+
msgid "Include All"
|
1159 |
+
msgstr ""
|
1160 |
+
|
1161 |
+
#: views/packages/main/s1.setup2.php:277
|
1162 |
+
msgid "Exclude All"
|
1163 |
+
msgstr ""
|
1164 |
+
|
1165 |
+
#: views/packages/main/s1.setup2.php:321
|
1166 |
+
msgid "Checked tables will be <u>excluded</u> from the database script. "
|
1167 |
+
msgstr ""
|
1168 |
+
|
1169 |
+
#: views/packages/main/s1.setup2.php:322
|
1170 |
+
msgid "Excluding certain tables can cause your site or plugins to not work correctly after install!<br/>"
|
1171 |
+
msgstr ""
|
1172 |
+
|
1173 |
+
#: views/packages/main/s1.setup2.php:323
|
1174 |
+
msgid "<i class='core-table-info'> Use caution when excluding tables! It is highly recommended to not exclude WordPress core tables*, unless you know the impact.</i>"
|
1175 |
+
msgstr ""
|
1176 |
+
|
1177 |
+
#: views/packages/main/s1.setup2.php:328
|
1178 |
+
msgid "Compatibility Mode"
|
1179 |
+
msgstr ""
|
1180 |
+
|
1181 |
+
#: views/packages/main/s1.setup2.php:330
|
1182 |
+
msgid "Compatibility Mode:"
|
1183 |
+
msgstr ""
|
1184 |
+
|
1185 |
+
#: views/packages/main/s1.setup2.php:331
|
1186 |
+
msgid "This is an advanced database backwards compatibility feature that should ONLY be used if having problems installing packages. If the database server version is lower than the version where the package was built then these options may help generate a script that is more compliant with the older database server. It is recommended to try each option separately starting with mysql40."
|
1187 |
+
msgstr ""
|
1188 |
+
|
1189 |
+
#: views/packages/main/s1.setup2.php:352
|
1190 |
+
msgid "mysql40"
|
1191 |
+
msgstr ""
|
1192 |
+
|
1193 |
+
#: views/packages/main/s1.setup2.php:356
|
1194 |
+
msgid "no_table_options"
|
1195 |
+
msgstr ""
|
1196 |
+
|
1197 |
+
#: views/packages/main/s1.setup2.php:360
|
1198 |
+
msgid "no_key_options"
|
1199 |
+
msgstr ""
|
1200 |
+
|
1201 |
+
#: views/packages/main/s1.setup2.php:364
|
1202 |
+
msgid "no_field_options"
|
1203 |
+
msgstr ""
|
1204 |
+
|
1205 |
+
#: views/packages/main/s1.setup2.php:369
|
1206 |
+
msgid "This option is only available with mysqldump mode."
|
1207 |
+
msgstr ""
|
1208 |
+
|
1209 |
+
#: views/packages/main/s1.setup2.php:382
|
1210 |
+
msgid "Installer password protection is on"
|
1211 |
+
msgstr ""
|
1212 |
+
|
1213 |
+
#: views/packages/main/s1.setup2.php:383
|
1214 |
+
msgid "Installer password protection is off"
|
1215 |
+
msgstr ""
|
1216 |
+
|
1217 |
+
#: views/packages/main/s1.setup2.php:390
|
1218 |
+
msgid "All values in this section are"
|
1219 |
+
msgstr ""
|
1220 |
+
|
1221 |
+
#: views/packages/main/s1.setup2.php:390
|
1222 |
+
msgid "optional"
|
1223 |
+
msgstr ""
|
1224 |
+
|
1225 |
+
#: views/packages/main/s1.setup2.php:392
|
1226 |
+
msgid "Setup/Prefills"
|
1227 |
+
msgstr ""
|
1228 |
+
|
1229 |
+
#: views/packages/main/s1.setup2.php:393
|
1230 |
+
msgid "All values in this section are OPTIONAL! If you know ahead of time the database input fields the installer will use, then you can optionally enter them here and they will be prefilled at install time. Otherwise you can just enter them in at install time and ignore all these options in the Installer section."
|
1231 |
+
msgstr ""
|
1232 |
+
|
1233 |
+
#: views/packages/main/s1.setup2.php:404 views/packages/main/s1.setup2.php:409
|
1234 |
+
msgid "Branding"
|
1235 |
+
msgstr ""
|
1236 |
+
|
1237 |
+
#: views/packages/main/s1.setup2.php:407
|
1238 |
+
msgid "Available with Duplicator Pro - Freelancer!"
|
1239 |
+
msgstr ""
|
1240 |
+
|
1241 |
+
#: views/packages/main/s1.setup2.php:410
|
1242 |
+
msgid "Branding is a way to customize the installer look and feel. With branding you can create multiple brands of installers."
|
1243 |
+
msgstr ""
|
1244 |
+
|
1245 |
+
#: views/packages/main/s1.setup2.php:415
|
1246 |
+
msgid "Security"
|
1247 |
+
msgstr ""
|
1248 |
+
|
1249 |
+
#: views/packages/main/s1.setup2.php:422
|
1250 |
+
msgid "Enable Password Protection"
|
1251 |
+
msgstr ""
|
1252 |
+
|
1253 |
+
#: views/packages/main/s1.setup2.php:424
|
1254 |
+
msgid "Security:"
|
1255 |
+
msgstr ""
|
1256 |
+
|
1257 |
+
#: views/packages/main/s1.setup2.php:425
|
1258 |
+
msgid "Enabling this option will allow for basic password protection on the installer. Before running the installer the password below must be entered before proceeding with an install. This password is a general deterrent and should not be substituted for properly keeping your files secure. Be sure to remove all installer files when the install process is completed."
|
1259 |
+
msgstr ""
|
1260 |
+
|
1261 |
+
#: views/packages/main/s1.setup2.php:440
|
1262 |
+
msgid "Prefills"
|
1263 |
+
msgstr ""
|
1264 |
+
|
1265 |
+
#: views/packages/main/s1.setup2.php:448
|
1266 |
+
msgid "Basic"
|
1267 |
+
msgstr ""
|
1268 |
+
|
1269 |
+
#: views/packages/main/s1.setup2.php:449 views/settings/gopro.php:176
|
1270 |
+
msgid "cPanel"
|
1271 |
+
msgstr ""
|
1272 |
+
|
1273 |
+
#: views/packages/main/s1.setup2.php:461
|
1274 |
+
msgid "example: localhost (value is optional)"
|
1275 |
+
msgstr ""
|
1276 |
+
|
1277 |
+
#: views/packages/main/s1.setup2.php:464
|
1278 |
+
msgid "Host Port"
|
1279 |
+
msgstr ""
|
1280 |
+
|
1281 |
+
#: views/packages/main/s1.setup2.php:465
|
1282 |
+
msgid "example: 3306 (value is optional)"
|
1283 |
+
msgstr ""
|
1284 |
+
|
1285 |
+
#: views/packages/main/s1.setup2.php:469
|
1286 |
+
msgid "example: DatabaseName (value is optional)"
|
1287 |
+
msgstr ""
|
1288 |
+
|
1289 |
+
#: views/packages/main/s1.setup2.php:473
|
1290 |
+
msgid "example: DatabaseUserName (value is optional)"
|
1291 |
+
msgstr ""
|
1292 |
+
|
1293 |
+
#: views/packages/main/s1.setup2.php:483
|
1294 |
+
msgid "Create the database and database user at install time without leaving the installer!"
|
1295 |
+
msgstr ""
|
1296 |
+
|
1297 |
+
#: views/packages/main/s1.setup2.php:484
|
1298 |
+
msgid "This feature is only availble in "
|
1299 |
+
msgstr ""
|
1300 |
+
|
1301 |
+
#: views/packages/main/s1.setup2.php:485
|
1302 |
+
msgid "Duplicator Pro!"
|
1303 |
+
msgstr ""
|
1304 |
+
|
1305 |
+
#: views/packages/main/s1.setup2.php:486
|
1306 |
+
msgid "This feature works only with hosts that support cPanel."
|
1307 |
+
msgstr ""
|
1308 |
+
|
1309 |
+
#: views/packages/main/s1.setup2.php:498
|
1310 |
+
msgid "Reset"
|
1311 |
+
msgstr ""
|
1312 |
+
|
1313 |
+
#: views/packages/main/s1.setup2.php:499
|
1314 |
+
msgid "Next"
|
1315 |
+
msgstr ""
|
1316 |
+
|
1317 |
+
#: views/packages/main/s1.setup2.php:508
|
1318 |
+
msgid "Reset Package Settings?"
|
1319 |
+
msgstr ""
|
1320 |
+
|
1321 |
+
#: views/packages/main/s1.setup2.php:509
|
1322 |
+
msgid "This will clear and reset all of the current package settings. Would you like to continue?"
|
1323 |
+
msgstr ""
|
1324 |
+
|
1325 |
+
#: views/packages/main/s2.scan1.php:148
|
1326 |
+
msgid "Input fields not valid"
|
1327 |
+
msgstr ""
|
1328 |
+
|
1329 |
+
#: views/packages/main/s2.scan1.php:149 views/packages/main/s2.scan1.php:207
|
1330 |
+
msgid "Please try again!"
|
1331 |
+
msgstr ""
|
1332 |
+
|
1333 |
+
#: views/packages/main/s2.scan1.php:151 views/packages/main/s2.scan1.php:212
|
1334 |
+
#: views/packages/main/s3.build.php:353
|
1335 |
+
msgid "Error Message:"
|
1336 |
+
msgstr ""
|
1337 |
+
|
1338 |
+
#: views/packages/main/s2.scan1.php:161 views/packages/main/s2.scan1.php:267
|
1339 |
+
msgid "Back"
|
1340 |
+
msgstr ""
|
1341 |
+
|
1342 |
+
#: views/packages/main/s2.scan1.php:180
|
1343 |
+
msgid "Step 2: System Scan"
|
1344 |
+
msgstr ""
|
1345 |
+
|
1346 |
+
#: views/packages/main/s2.scan1.php:197
|
1347 |
+
msgid "Scanning Site"
|
1348 |
+
msgstr ""
|
1349 |
+
|
1350 |
+
#: views/packages/main/s2.scan1.php:199 views/packages/main/s3.build.php:116
|
1351 |
+
msgid "Please Wait..."
|
1352 |
+
msgstr ""
|
1353 |
+
|
1354 |
+
#: views/packages/main/s2.scan1.php:200
|
1355 |
+
msgid "Keep this window open during the scan process."
|
1356 |
+
msgstr ""
|
1357 |
+
|
1358 |
+
#: views/packages/main/s2.scan1.php:201
|
1359 |
+
msgid "This can take several minutes."
|
1360 |
+
msgstr ""
|
1361 |
+
|
1362 |
+
#: views/packages/main/s2.scan1.php:206
|
1363 |
+
msgid "Scan Error"
|
1364 |
+
msgstr ""
|
1365 |
+
|
1366 |
+
#: views/packages/main/s2.scan1.php:209 views/packages/main/s3.build.php:349
|
1367 |
+
msgid "Server Status:"
|
1368 |
+
msgstr ""
|
1369 |
+
|
1370 |
+
#: views/packages/main/s2.scan1.php:221
|
1371 |
+
msgid "Scan Complete"
|
1372 |
+
msgstr ""
|
1373 |
+
|
1374 |
+
#: views/packages/main/s2.scan1.php:223
|
1375 |
+
msgid "Process Time:"
|
1376 |
+
msgstr ""
|
1377 |
+
|
1378 |
+
#: views/packages/main/s2.scan1.php:239
|
1379 |
+
msgid "A notice status has been detected, are you sure you want to continue?"
|
1380 |
+
msgstr ""
|
1381 |
+
|
1382 |
+
#: views/packages/main/s2.scan1.php:243
|
1383 |
+
msgid "Yes. Continue with the build process!"
|
1384 |
+
msgstr ""
|
1385 |
+
|
1386 |
+
#: views/packages/main/s2.scan1.php:249
|
1387 |
+
msgid "Scan checks are not required to pass, however they could cause issues on some systems."
|
1388 |
+
msgstr ""
|
1389 |
+
|
1390 |
+
#: views/packages/main/s2.scan1.php:251
|
1391 |
+
msgid "Please review the details for each section by clicking on the detail title."
|
1392 |
+
msgstr ""
|
1393 |
+
|
1394 |
+
#: views/packages/main/s2.scan1.php:258
|
1395 |
+
msgid "Do you want to continue?"
|
1396 |
+
msgstr ""
|
1397 |
+
|
1398 |
+
#: views/packages/main/s2.scan1.php:260
|
1399 |
+
msgid "At least one or more checkboxes was checked in \"Quick Filters\"."
|
1400 |
+
msgstr ""
|
1401 |
+
|
1402 |
+
#: views/packages/main/s2.scan1.php:261
|
1403 |
+
msgid "To apply a \"Quick Filter\" click the \"Add Filters & Rescan\" button"
|
1404 |
+
msgstr ""
|
1405 |
+
|
1406 |
+
#: views/packages/main/s2.scan1.php:263
|
1407 |
+
msgid "Yes. Continue without applying any file filters."
|
1408 |
+
msgstr ""
|
1409 |
+
|
1410 |
+
#: views/packages/main/s2.scan1.php:268
|
1411 |
+
msgid "Rescan"
|
1412 |
+
msgstr ""
|
1413 |
+
|
1414 |
+
#: views/packages/main/s2.scan1.php:414
|
1415 |
+
msgid "Unable to perform a full scan, please try the following actions:"
|
1416 |
+
msgstr ""
|
1417 |
+
|
1418 |
+
#: views/packages/main/s2.scan1.php:415
|
1419 |
+
msgid "1. Go back and create a root path directory filter to validate the site is scan-able."
|
1420 |
+
msgstr ""
|
1421 |
+
|
1422 |
+
#: views/packages/main/s2.scan1.php:416
|
1423 |
+
msgid "2. Continue to add/remove filters to isolate which path is causing issues."
|
1424 |
+
msgstr ""
|
1425 |
+
|
1426 |
+
#: views/packages/main/s2.scan1.php:417
|
1427 |
+
msgid "3. This message will go away once the correct filters are applied."
|
1428 |
+
msgstr ""
|
1429 |
+
|
1430 |
+
#: views/packages/main/s2.scan1.php:419
|
1431 |
+
msgid "Common Issues:"
|
1432 |
+
msgstr ""
|
1433 |
+
|
1434 |
+
#: views/packages/main/s2.scan1.php:420
|
1435 |
+
msgid "- On some budget hosts scanning over 30k files can lead to timeout/gateway issues. Consider scanning only your main WordPress site and avoid trying to backup other external directories."
|
1436 |
+
msgstr ""
|
1437 |
+
|
1438 |
+
#: views/packages/main/s2.scan1.php:421
|
1439 |
+
msgid "- Symbolic link recursion can cause timeouts. Ask your server admin if any are present in the scan path. If they are add the full path as a filter and try running the scan again."
|
1440 |
+
msgstr ""
|
1441 |
+
|
1442 |
+
#: views/packages/main/s2.scan1.php:434 views/packages/main/s2.scan3.php:57
|
1443 |
+
#: views/packages/main/s2.scan3.php:68 views/packages/main/s3.build.php:245
|
1444 |
+
msgid "Notice"
|
1445 |
+
msgstr ""
|
1446 |
+
|
1447 |
+
#: views/packages/main/s2.scan1.php:436
|
1448 |
+
msgid "Good"
|
1449 |
+
msgstr ""
|
1450 |
+
|
1451 |
+
#: views/packages/main/s2.scan1.php:437
|
1452 |
+
msgid "Fail"
|
1453 |
+
msgstr ""
|
1454 |
+
|
1455 |
+
#: views/packages/main/s2.scan2.php:7
|
1456 |
+
msgid "Server"
|
1457 |
+
msgstr ""
|
1458 |
+
|
1459 |
+
#: views/packages/main/s2.scan2.php:8
|
1460 |
+
msgid "Show Diagnostics"
|
1461 |
+
msgstr ""
|
1462 |
+
|
1463 |
+
#: views/packages/main/s2.scan2.php:63
|
1464 |
+
#: views/tools/diagnostics/inc.settings.php:51
|
1465 |
+
msgid "Web Server"
|
1466 |
+
msgstr ""
|
1467 |
+
|
1468 |
+
#: views/packages/main/s2.scan2.php:64
|
1469 |
+
msgid "Supported web servers: "
|
1470 |
+
msgstr ""
|
1471 |
+
|
1472 |
+
#: views/packages/main/s2.scan2.php:69
|
1473 |
+
msgid "The minimum PHP version supported by Duplicator is 5.2.9. It is highly recommended to use PHP 5.3+ for improved stability. For international language support please use PHP 7.0+."
|
1474 |
+
msgstr ""
|
1475 |
+
|
1476 |
+
#: views/packages/main/s2.scan2.php:74
|
1477 |
+
msgid "PHP Open Base Dir"
|
1478 |
+
msgstr ""
|
1479 |
+
|
1480 |
+
#: views/packages/main/s2.scan2.php:75
|
1481 |
+
msgid "Issues might occur when [open_basedir] is enabled. Work with your server admin to disable this value in the php.ini file if you’re having issues building a package."
|
1482 |
+
msgstr ""
|
1483 |
+
|
1484 |
+
#: views/packages/main/s2.scan2.php:80 views/packages/main/s3.build.php:328
|
1485 |
+
msgid "PHP Max Execution Time"
|
1486 |
+
msgstr ""
|
1487 |
+
|
1488 |
+
#: views/packages/main/s2.scan2.php:81
|
1489 |
+
msgid "Timeouts may occur for larger packages when [max_execution_time] time in the php.ini is too low. A value of 0 (recommended) indicates that PHP has no time limits. An attempt is made to override this value if the server allows it."
|
1490 |
+
msgstr ""
|
1491 |
+
|
1492 |
+
#: views/packages/main/s2.scan2.php:84
|
1493 |
+
msgid "Note: Timeouts can also be set at the web server layer, so if the PHP max timeout passes and you still see a build timeout messages, then your web server could be killing the process. If you are on a budget host and limited on processing time, consider using the database or file filters to shrink the size of your overall package. However use caution as excluding the wrong resources can cause your install to not work properly."
|
1494 |
+
msgstr ""
|
1495 |
+
|
1496 |
+
#: views/packages/main/s2.scan2.php:92
|
1497 |
+
msgid "Get faster builds with Duplicator Pro with access to shell_exec zip."
|
1498 |
+
msgstr ""
|
1499 |
+
|
1500 |
+
#: views/packages/main/s2.scan2.php:112
|
1501 |
+
msgid "WordPress Version"
|
1502 |
+
msgstr ""
|
1503 |
+
|
1504 |
+
#: views/packages/main/s2.scan2.php:113
|
1505 |
+
#, php-format
|
1506 |
+
msgid "It is recommended to have a version of WordPress that is greater than %1$s. Older version of WordPress can lead to migration issues and are a security risk. If possible please update your WordPress site to the latest version."
|
1507 |
+
msgstr ""
|
1508 |
+
|
1509 |
+
#: views/packages/main/s2.scan2.php:117
|
1510 |
+
msgid "Core Files"
|
1511 |
+
msgstr ""
|
1512 |
+
|
1513 |
+
#: views/packages/main/s2.scan2.php:123
|
1514 |
+
msgid "The core WordPress paths below will <u>not</u> be included in the archive. These paths are required for WordPress to function!"
|
1515 |
+
msgstr ""
|
1516 |
+
|
1517 |
+
#: views/packages/main/s2.scan2.php:134
|
1518 |
+
msgid "The core WordPress file below will <u>not</u> be included in the archive. This file is required for WordPress to function!"
|
1519 |
+
msgstr ""
|
1520 |
+
|
1521 |
+
#: views/packages/main/s2.scan2.php:147
|
1522 |
+
msgid " to the new location for the site to function properly."
|
1523 |
+
msgstr ""
|
1524 |
+
|
1525 |
+
#: views/packages/main/s2.scan2.php:153
|
1526 |
+
msgid "If the scanner is unable to locate the wp-config.php file in the root directory, then you will need to manually copy it to its new location. This check will also look for core WordPress paths that should be included in the archive for WordPress to work correctly."
|
1527 |
+
msgstr ""
|
1528 |
+
|
1529 |
+
#: views/packages/main/s2.scan2.php:172
|
1530 |
+
msgid "Multisite: Unsupported"
|
1531 |
+
msgstr ""
|
1532 |
+
|
1533 |
+
#: views/packages/main/s2.scan2.php:173
|
1534 |
+
msgid "Duplicator does not support WordPress multisite migrations. We recommend using Duplicator Pro which currently supports full multisite migrations and subsite to standalone site migrations."
|
1535 |
+
msgstr ""
|
1536 |
+
|
1537 |
+
#: views/packages/main/s2.scan2.php:177
|
1538 |
+
msgid "While it is not recommended you can still continue with the build of this package. Please note that at install time additional manual custom configurations will need to be made to finalize this multisite migration."
|
1539 |
+
msgstr ""
|
1540 |
+
|
1541 |
+
#: views/packages/main/s2.scan2.php:179 views/packages/main/s2.scan2.php:184
|
1542 |
+
msgid "upgrade to pro"
|
1543 |
+
msgstr ""
|
1544 |
+
|
1545 |
+
#: views/packages/main/s2.scan2.php:181
|
1546 |
+
msgid "Multisite: N/A"
|
1547 |
+
msgstr ""
|
1548 |
+
|
1549 |
+
#: views/packages/main/s2.scan2.php:182
|
1550 |
+
msgid "This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site."
|
1551 |
+
msgstr ""
|
1552 |
+
|
1553 |
+
#: views/packages/main/s2.scan3.php:6
|
1554 |
+
#: views/tools/diagnostics/inc.settings.php:55
|
1555 |
+
msgid "Root Path"
|
1556 |
+
msgstr ""
|
1557 |
+
|
1558 |
+
#: views/packages/main/s2.scan3.php:23
|
1559 |
+
msgid "Show Scan Details"
|
1560 |
+
msgstr ""
|
1561 |
+
|
1562 |
+
#: views/packages/main/s2.scan3.php:38 views/packages/main/s2.scan3.php:370
|
1563 |
+
#: views/packages/main/s2.scan3.php:557 views/settings/general.php:158
|
1564 |
+
#: views/tools/diagnostics/inc.settings.php:167
|
1565 |
+
msgid "Enabled"
|
1566 |
+
msgstr ""
|
1567 |
+
|
1568 |
+
#: views/packages/main/s2.scan3.php:44
|
1569 |
+
msgid "Archive Size"
|
1570 |
+
msgstr ""
|
1571 |
+
|
1572 |
+
#: views/packages/main/s2.scan3.php:45
|
1573 |
+
msgid "This size includes only files BEFORE compression is applied. It does not include the size of the database script or any applied filters. Once complete the package size will be smaller than this number."
|
1574 |
+
msgstr ""
|
1575 |
+
|
1576 |
+
#: views/packages/main/s2.scan3.php:48 views/packages/main/s2.scan3.php:380
|
1577 |
+
#: views/packages/main/s2.scan3.php:442
|
1578 |
+
msgid "uncompressed"
|
1579 |
+
msgstr ""
|
1580 |
+
|
1581 |
+
#: views/packages/main/s2.scan3.php:56
|
1582 |
+
msgid "Database only"
|
1583 |
+
msgstr ""
|
1584 |
+
|
1585 |
+
#: views/packages/main/s2.scan3.php:60
|
1586 |
+
msgid "Only the database and a copy of the installer.php will be included in the archive.zip file."
|
1587 |
+
msgstr ""
|
1588 |
+
|
1589 |
+
#: views/packages/main/s2.scan3.php:67
|
1590 |
+
msgid "Skip archive scan enabled"
|
1591 |
+
msgstr ""
|
1592 |
+
|
1593 |
+
#: views/packages/main/s2.scan3.php:71
|
1594 |
+
msgid "All file checks are skipped. This could cause problems during extraction if problematic files are included."
|
1595 |
+
msgstr ""
|
1596 |
+
|
1597 |
+
#: views/packages/main/s2.scan3.php:73
|
1598 |
+
msgid " Disable the advanced option to re-enable file controls."
|
1599 |
+
msgstr ""
|
1600 |
+
|
1601 |
+
#: views/packages/main/s2.scan3.php:84
|
1602 |
+
msgid "Size Checks"
|
1603 |
+
msgstr ""
|
1604 |
+
|
1605 |
+
#: views/packages/main/s2.scan3.php:89
|
1606 |
+
msgid "File Count"
|
1607 |
+
msgstr ""
|
1608 |
+
|
1609 |
+
#: views/packages/main/s2.scan3.php:90
|
1610 |
+
msgid "Directory Count"
|
1611 |
+
msgstr ""
|
1612 |
+
|
1613 |
+
#: views/packages/main/s2.scan3.php:92
|
1614 |
+
msgid "Compressing larger sites on <i>some budget hosts</i> may cause timeouts. "
|
1615 |
+
msgstr ""
|
1616 |
+
|
1617 |
+
#: views/packages/main/s2.scan3.php:93
|
1618 |
+
msgid "more details..."
|
1619 |
+
msgstr ""
|
1620 |
+
|
1621 |
+
#: views/packages/main/s2.scan3.php:97 views/packages/main/s2.scan3.php:387
|
1622 |
+
#: views/packages/main/s3.build.php:203 views/packages/screen.php:53
|
1623 |
+
msgid "Overview"
|
1624 |
+
msgstr ""
|
1625 |
+
|
1626 |
+
#: views/packages/main/s2.scan3.php:99
|
1627 |
+
#, php-format
|
1628 |
+
msgid "This notice is triggered at [%s] and can be ignored on most hosts. If during the build process you see a \"Host Build Interrupt\" message then this host has strict processing limits. Below are some options you can take to overcome constraints set up on this host."
|
1629 |
+
msgstr ""
|
1630 |
+
|
1631 |
+
#: views/packages/main/s2.scan3.php:103
|
1632 |
+
msgid "Timeout Options"
|
1633 |
+
msgstr ""
|
1634 |
+
|
1635 |
+
#: views/packages/main/s2.scan3.php:105
|
1636 |
+
msgid "Apply the \"Quick Filters\" below or click the back button to apply on previous page."
|
1637 |
+
msgstr ""
|
1638 |
+
|
1639 |
+
#: views/packages/main/s2.scan3.php:106
|
1640 |
+
msgid "See the FAQ link to adjust this hosts timeout limits: "
|
1641 |
+
msgstr ""
|
1642 |
+
|
1643 |
+
#: views/packages/main/s2.scan3.php:106
|
1644 |
+
msgid "What can I try for Timeout Issues?"
|
1645 |
+
msgstr ""
|
1646 |
+
|
1647 |
+
#: views/packages/main/s2.scan3.php:107
|
1648 |
+
msgid "Consider trying multi-threaded support in "
|
1649 |
+
msgstr ""
|
1650 |
+
|
1651 |
+
#: views/packages/main/s2.scan3.php:108
|
1652 |
+
msgid "Duplicator Pro."
|
1653 |
+
msgstr ""
|
1654 |
+
|
1655 |
+
#: views/packages/main/s2.scan3.php:112
|
1656 |
+
#, php-format
|
1657 |
+
msgid "Files over %1$s are listed below. Larger files such as movies or zipped content can cause timeout issues on some budget hosts. If you are having issues creating a package try excluding the directory paths below or go back to Step 1 and add them."
|
1658 |
+
msgstr ""
|
1659 |
+
|
1660 |
+
#: views/packages/main/s2.scan3.php:121 views/packages/main/s2.scan3.php:208
|
1661 |
+
#: views/packages/main/s2.scan3.php:257
|
1662 |
+
msgid "Quick Filters"
|
1663 |
+
msgstr ""
|
1664 |
+
|
1665 |
+
#: views/packages/main/s2.scan3.php:122
|
1666 |
+
msgid "Large Files"
|
1667 |
+
msgstr ""
|
1668 |
+
|
1669 |
+
#: views/packages/main/s2.scan3.php:125 views/packages/main/s2.scan3.php:260
|
1670 |
+
msgid "Hide All"
|
1671 |
+
msgstr ""
|
1672 |
+
|
1673 |
+
#: views/packages/main/s2.scan3.php:126 views/packages/main/s2.scan3.php:261
|
1674 |
+
msgid "Show All"
|
1675 |
+
msgstr ""
|
1676 |
+
|
1677 |
+
#: views/packages/main/s2.scan3.php:136 views/packages/main/s2.scan3.php:276
|
1678 |
+
msgid "Core WordPress directories should not be filtered. Use caution when excluding files."
|
1679 |
+
msgstr ""
|
1680 |
+
|
1681 |
+
#: views/packages/main/s2.scan3.php:156
|
1682 |
+
msgid "No large files found during this scan."
|
1683 |
+
msgstr ""
|
1684 |
+
|
1685 |
+
#: views/packages/main/s2.scan3.php:159
|
1686 |
+
msgid "No large files found during this scan. If you're having issues building a package click the back button and try adding a file filter to non-essential files paths like wp-content/uploads. These excluded files can then be manually moved to the new location after you have ran the migration installer."
|
1687 |
+
msgstr ""
|
1688 |
+
|
1689 |
+
#: views/packages/main/s2.scan3.php:172 views/packages/main/s2.scan3.php:302
|
1690 |
+
msgid "*Checking a directory will exclude all items recursively from that path down. Please use caution when filtering directories."
|
1691 |
+
msgstr ""
|
1692 |
+
|
1693 |
+
#: views/packages/main/s2.scan3.php:175 views/packages/main/s2.scan3.php:231
|
1694 |
+
#: views/packages/main/s2.scan3.php:305
|
1695 |
+
msgid "Add Filters & Rescan"
|
1696 |
+
msgstr ""
|
1697 |
+
|
1698 |
+
#: views/packages/main/s2.scan3.php:177 views/packages/main/s2.scan3.php:307
|
1699 |
+
msgid "Copy Paths to Clipboard"
|
1700 |
+
msgstr ""
|
1701 |
+
|
1702 |
+
#: views/packages/main/s2.scan3.php:193
|
1703 |
+
msgid "Addon Sites"
|
1704 |
+
msgstr ""
|
1705 |
+
|
1706 |
+
#: views/packages/main/s2.scan3.php:199
|
1707 |
+
msgid "An \"Addon Site\" is a separate WordPress site(s) residing in subdirectories within this site. If you confirm these to be separate sites, then it is recommended that you exclude them by checking the corresponding boxes below and clicking the 'Add Filters & Rescan' button. To backup the other sites install the plugin on the sites needing to be backed-up."
|
1708 |
+
msgstr ""
|
1709 |
+
|
1710 |
+
#: views/packages/main/s2.scan3.php:222
|
1711 |
+
msgid "No add on sites found."
|
1712 |
+
msgstr ""
|
1713 |
+
|
1714 |
+
#: views/packages/main/s2.scan3.php:228
|
1715 |
+
msgid "*Checking a directory will exclude all items in that path recursively."
|
1716 |
+
msgstr ""
|
1717 |
+
|
1718 |
+
#: views/packages/main/s2.scan3.php:244 views/packages/main/s2.scan3.php:258
|
1719 |
+
msgid "Name Checks"
|
1720 |
+
msgstr ""
|
1721 |
+
|
1722 |
+
#: views/packages/main/s2.scan3.php:249
|
1723 |
+
msgid "Unicode and special characters such as \"*?><:/\\|\", can be problematic on some hosts."
|
1724 |
+
msgstr ""
|
1725 |
+
|
1726 |
+
#: views/packages/main/s2.scan3.php:250
|
1727 |
+
msgid " Only consider using this filter if the package build is failing. Select files that are not important to your site or you can migrate manually."
|
1728 |
+
msgstr ""
|
1729 |
+
|
1730 |
+
#: views/packages/main/s2.scan3.php:251
|
1731 |
+
msgid "If this environment/system and the system where it will be installed are set up to support Unicode and long paths then these filters can be ignored. If you run into issues with creating or installing a package, then is recommended to filter these paths."
|
1732 |
+
msgstr ""
|
1733 |
+
|
1734 |
+
#: views/packages/main/s2.scan3.php:296
|
1735 |
+
msgid "No file/directory name warnings found."
|
1736 |
+
msgstr ""
|
1737 |
+
|
1738 |
+
#: views/packages/main/s2.scan3.php:319
|
1739 |
+
msgid "Read Checks"
|
1740 |
+
msgstr ""
|
1741 |
+
|
1742 |
+
#: views/packages/main/s2.scan3.php:324
|
1743 |
+
msgid "PHP is unable to read the following items and they will NOT be included in the package. Please work with your host to adjust the permissions or resolve the symbolic-link(s) shown in the lists below. If these items are not needed then this notice can be ignored."
|
1744 |
+
msgstr ""
|
1745 |
+
|
1746 |
+
#: views/packages/main/s2.scan3.php:330
|
1747 |
+
msgid "Unreadable Items:"
|
1748 |
+
msgstr ""
|
1749 |
+
|
1750 |
+
#: views/packages/main/s2.scan3.php:337
|
1751 |
+
msgid "No unreadable items found."
|
1752 |
+
msgstr ""
|
1753 |
+
|
1754 |
+
#: views/packages/main/s2.scan3.php:341
|
1755 |
+
msgid "Recursive Links:"
|
1756 |
+
msgstr ""
|
1757 |
+
|
1758 |
+
#: views/packages/main/s2.scan3.php:348
|
1759 |
+
msgid "No recursive sym-links found."
|
1760 |
+
msgstr ""
|
1761 |
+
|
1762 |
+
#: views/packages/main/s2.scan3.php:376
|
1763 |
+
msgid "Database Size:"
|
1764 |
+
msgstr ""
|
1765 |
+
|
1766 |
+
#: views/packages/main/s2.scan3.php:377
|
1767 |
+
msgid "The database size represents only the included tables. The process for gathering the size uses the query SHOW TABLE STATUS. The overall size of the database file can impact the final size of the package."
|
1768 |
+
msgstr ""
|
1769 |
+
|
1770 |
+
#: views/packages/main/s2.scan3.php:391
|
1771 |
+
msgid "TOTAL SIZE"
|
1772 |
+
msgstr ""
|
1773 |
+
|
1774 |
+
#: views/packages/main/s2.scan3.php:394
|
1775 |
+
msgid "Records"
|
1776 |
+
msgstr ""
|
1777 |
+
|
1778 |
+
#: views/packages/main/s2.scan3.php:397
|
1779 |
+
#, php-format
|
1780 |
+
msgid "Total size and row counts are approximate values. The thresholds that trigger notices are %1$s records total for the entire database. Larger databases take more time to process. On some budget hosts that have cpu/memory/timeout limits this may cause issues."
|
1781 |
+
msgstr ""
|
1782 |
+
|
1783 |
+
#: views/packages/main/s2.scan3.php:402
|
1784 |
+
msgid "TABLE DETAILS:"
|
1785 |
+
msgstr ""
|
1786 |
+
|
1787 |
+
#: views/packages/main/s2.scan3.php:404
|
1788 |
+
#, php-format
|
1789 |
+
msgid "The notices for tables are %1$s records or names with upper-case characters. Individual tables will not trigger a notice message, but can help narrow down issues if they occur later on."
|
1790 |
+
msgstr ""
|
1791 |
+
|
1792 |
+
#: views/packages/main/s2.scan3.php:411 views/packages/main/s2.scan3.php:463
|
1793 |
+
msgid "RECOMMENDATIONS:"
|
1794 |
+
msgstr ""
|
1795 |
+
|
1796 |
+
#: views/packages/main/s2.scan3.php:414
|
1797 |
+
msgid "repair and optimization"
|
1798 |
+
msgstr ""
|
1799 |
+
|
1800 |
+
#: views/packages/main/s2.scan3.php:415
|
1801 |
+
#, php-format
|
1802 |
+
msgid "1. Run a %1$s on the table to improve the overall size and performance."
|
1803 |
+
msgstr ""
|
1804 |
+
|
1805 |
+
#: views/packages/main/s2.scan3.php:417
|
1806 |
+
msgid "2. Remove post revisions and stale data from tables. Tables such as logs, statistical or other non-critical data should be cleared."
|
1807 |
+
msgstr ""
|
1808 |
+
|
1809 |
+
#: views/packages/main/s2.scan3.php:419
|
1810 |
+
msgid "Enable mysqldump"
|
1811 |
+
msgstr ""
|
1812 |
+
|
1813 |
+
#: views/packages/main/s2.scan3.php:420
|
1814 |
+
#, php-format
|
1815 |
+
msgid "3. %1$s if this host supports the option."
|
1816 |
+
msgstr ""
|
1817 |
+
|
1818 |
+
#: views/packages/main/s2.scan3.php:422
|
1819 |
+
msgid "lower_case_table_names"
|
1820 |
+
msgstr ""
|
1821 |
+
|
1822 |
+
#: views/packages/main/s2.scan3.php:423
|
1823 |
+
#, php-format
|
1824 |
+
msgid "4. For table name case sensitivity issues either rename the table with lower case characters or be prepared to work with the %1$s system variable setting."
|
1825 |
+
msgstr ""
|
1826 |
+
|
1827 |
+
#: views/packages/main/s2.scan3.php:434
|
1828 |
+
msgid "Total Size"
|
1829 |
+
msgstr ""
|
1830 |
+
|
1831 |
+
#: views/packages/main/s2.scan3.php:439
|
1832 |
+
msgid "Total Size:"
|
1833 |
+
msgstr ""
|
1834 |
+
|
1835 |
+
#: views/packages/main/s2.scan3.php:440
|
1836 |
+
msgid "The total size of the site (files plus database)."
|
1837 |
+
msgstr ""
|
1838 |
+
|
1839 |
+
#: views/packages/main/s2.scan3.php:450
|
1840 |
+
#, php-format
|
1841 |
+
msgid "The build can't continue because the total size of files and the database exceeds the %s limit that can be processed when creating a DupArchive package. "
|
1842 |
+
msgstr ""
|
1843 |
+
|
1844 |
+
#: views/packages/main/s2.scan3.php:451
|
1845 |
+
msgid "<a href=\"javascript:void(0)\" onclick=\"jQuery('#data-ll-status-recommendations').toggle()\">Click for recommendations.</a>"
|
1846 |
+
msgstr ""
|
1847 |
+
|
1848 |
+
#: views/packages/main/s2.scan3.php:457 views/packages/main/s2.scan3.php:531
|
1849 |
+
#: views/settings/packages.php:208
|
1850 |
+
msgid "Archive Engine"
|
1851 |
+
msgstr ""
|
1852 |
+
|
1853 |
+
#: views/packages/main/s2.scan3.php:459
|
1854 |
+
#, php-format
|
1855 |
+
msgid " With DupArchive, Duplicator is restricted to processing sites up to %s. To process larger sites, consider these recommendations. "
|
1856 |
+
msgstr ""
|
1857 |
+
|
1858 |
+
#: views/packages/main/s2.scan3.php:468
|
1859 |
+
msgid "Step 1"
|
1860 |
+
msgstr ""
|
1861 |
+
|
1862 |
+
#: views/packages/main/s2.scan3.php:469
|
1863 |
+
#, php-format
|
1864 |
+
msgid "- Add data filters to get the package size under %s: "
|
1865 |
+
msgstr ""
|
1866 |
+
|
1867 |
+
#: views/packages/main/s2.scan3.php:471
|
1868 |
+
msgid "- In the 'Size Checks' section above consider adding filters (if notice is shown)."
|
1869 |
+
msgstr ""
|
1870 |
+
|
1871 |
+
#: views/packages/main/s2.scan3.php:473
|
1872 |
+
#, php-format
|
1873 |
+
msgid "- In %s consider adding file/directory or database table filters."
|
1874 |
+
msgstr ""
|
1875 |
+
|
1876 |
+
#: views/packages/main/s2.scan3.php:477
|
1877 |
+
msgid "covered here."
|
1878 |
+
msgstr ""
|
1879 |
+
|
1880 |
+
#: views/packages/main/s2.scan3.php:478
|
1881 |
+
#, php-format
|
1882 |
+
msgid "- Perform a two part install %s"
|
1883 |
+
msgstr ""
|
1884 |
+
|
1885 |
+
#: views/packages/main/s2.scan3.php:481
|
1886 |
+
msgid "ZipArchive Engine"
|
1887 |
+
msgstr ""
|
1888 |
+
|
1889 |
+
#: views/packages/main/s2.scan3.php:482
|
1890 |
+
#, php-format
|
1891 |
+
msgid "- Switch to the %s which requires a capable hosting provider (VPS recommended)."
|
1892 |
+
msgstr ""
|
1893 |
+
|
1894 |
+
#: views/packages/main/s2.scan3.php:486
|
1895 |
+
#, php-format
|
1896 |
+
msgid "- Consider upgrading to %s for large site support. (unlimited)"
|
1897 |
+
msgstr ""
|
1898 |
+
|
1899 |
+
#: views/packages/main/s2.scan3.php:496
|
1900 |
+
msgid "Migrate large, multi-gig sites with"
|
1901 |
+
msgstr ""
|
1902 |
+
|
1903 |
+
#: views/packages/main/s2.scan3.php:511
|
1904 |
+
msgid "Scan Details"
|
1905 |
+
msgstr ""
|
1906 |
+
|
1907 |
+
#: views/packages/main/s2.scan3.php:518
|
1908 |
+
msgid "Copy Quick Filter Paths"
|
1909 |
+
msgstr ""
|
1910 |
+
|
1911 |
+
#: views/packages/main/s2.scan3.php:537
|
1912 |
+
msgid "Name:"
|
1913 |
+
msgstr ""
|
1914 |
+
|
1915 |
+
#: views/packages/main/s2.scan3.php:538
|
1916 |
+
msgid "Host:"
|
1917 |
+
msgstr ""
|
1918 |
+
|
1919 |
+
#: views/packages/main/s2.scan3.php:540
|
1920 |
+
msgid "Build Mode:"
|
1921 |
+
msgstr ""
|
1922 |
+
|
1923 |
+
#: views/packages/main/s2.scan3.php:556 views/settings/gopro.php:55
|
1924 |
+
msgid "File Filters"
|
1925 |
+
msgstr ""
|
1926 |
+
|
1927 |
+
#: views/packages/main/s2.scan3.php:557
|
1928 |
+
#: views/tools/diagnostics/inc.settings.php:167
|
1929 |
+
msgid "Disabled"
|
1930 |
+
msgstr ""
|
1931 |
+
|
1932 |
+
#: views/packages/main/s2.scan3.php:571
|
1933 |
+
msgid "No custom directory filters set."
|
1934 |
+
msgstr ""
|
1935 |
+
|
1936 |
+
#: views/packages/main/s2.scan3.php:581
|
1937 |
+
msgid "No file extension filters have been set."
|
1938 |
+
msgstr ""
|
1939 |
+
|
1940 |
+
#: views/packages/main/s2.scan3.php:593
|
1941 |
+
msgid "No custom file filters set."
|
1942 |
+
msgstr ""
|
1943 |
+
|
1944 |
+
#: views/packages/main/s2.scan3.php:597
|
1945 |
+
msgid "Auto Directory Filters"
|
1946 |
+
msgstr ""
|
1947 |
+
|
1948 |
+
#: views/packages/main/s2.scan3.php:603
|
1949 |
+
msgid "Auto File Filters"
|
1950 |
+
msgstr ""
|
1951 |
+
|
1952 |
+
#: views/packages/main/s2.scan3.php:616
|
1953 |
+
msgid "Path filters will be skipped during the archive process when enabled."
|
1954 |
+
msgstr ""
|
1955 |
+
|
1956 |
+
#: views/packages/main/s2.scan3.php:618
|
1957 |
+
msgid "[view json result report]"
|
1958 |
+
msgstr ""
|
1959 |
+
|
1960 |
+
#: views/packages/main/s2.scan3.php:621
|
1961 |
+
msgid "Auto filters are applied to prevent archiving other backup sets."
|
1962 |
+
msgstr ""
|
1963 |
+
|
1964 |
+
#: views/packages/main/s2.scan3.php:632 views/packages/main/s2.scan3.php:641
|
1965 |
+
msgid "Click to Copy"
|
1966 |
+
msgstr ""
|
1967 |
+
|
1968 |
+
#: views/packages/main/s2.scan3.php:646
|
1969 |
+
msgid "Copy the paths above and apply them as needed on Step 1 > Archive > Files section."
|
1970 |
+
msgstr ""
|
1971 |
+
|
1972 |
+
#: views/packages/main/s2.scan3.php:663
|
1973 |
+
msgid "Directory applied filter set."
|
1974 |
+
msgstr ""
|
1975 |
+
|
1976 |
+
#: views/packages/main/s2.scan3.php:690
|
1977 |
+
msgid "No directories have been selected!"
|
1978 |
+
msgstr ""
|
1979 |
+
|
1980 |
+
#: views/packages/main/s2.scan3.php:694
|
1981 |
+
msgid "No files have been selected!"
|
1982 |
+
msgstr ""
|
1983 |
+
|
1984 |
+
#: views/packages/main/s2.scan3.php:732
|
1985 |
+
msgid "Copied to Clipboard!"
|
1986 |
+
msgstr ""
|
1987 |
+
|
1988 |
+
#: views/packages/main/s2.scan3.php:734
|
1989 |
+
msgid "Manual copy of selected text required on this browser."
|
1990 |
+
msgstr ""
|
1991 |
+
|
1992 |
+
#: views/packages/main/s2.scan3.php:741
|
1993 |
+
msgid "Initializing Please Wait..."
|
1994 |
+
msgstr ""
|
1995 |
+
|
1996 |
+
#: views/packages/main/s2.scan3.php:784 views/packages/main/s2.scan3.php:791
|
1997 |
+
msgid "Error applying filters. Please go back to Step 1 to add filter manually!"
|
1998 |
+
msgstr ""
|
1999 |
+
|
2000 |
+
#: views/packages/main/s2.scan3.php:867
|
2001 |
+
msgid "Unable to report on any tables"
|
2002 |
+
msgstr ""
|
2003 |
+
|
2004 |
+
#: views/packages/main/s2.scan3.php:893
|
2005 |
+
msgid "Unable to report on database stats"
|
2006 |
+
msgstr ""
|
2007 |
+
|
2008 |
+
#: views/packages/main/s3.build.php:16
|
2009 |
+
msgid "Help review the plugin"
|
2010 |
+
msgstr ""
|
2011 |
+
|
2012 |
+
#: views/packages/main/s3.build.php:19
|
2013 |
+
msgid "Want more power? Try"
|
2014 |
+
msgstr ""
|
2015 |
+
|
2016 |
+
#: views/packages/main/s3.build.php:84
|
2017 |
+
msgid "Step 3: Build Package"
|
2018 |
+
msgstr ""
|
2019 |
+
|
2020 |
+
#: views/packages/main/s3.build.php:114
|
2021 |
+
msgid "Building Package"
|
2022 |
+
msgstr ""
|
2023 |
+
|
2024 |
+
#: views/packages/main/s3.build.php:117
|
2025 |
+
msgid "Keep this window open and do not close during the build process."
|
2026 |
+
msgstr ""
|
2027 |
+
|
2028 |
+
#: views/packages/main/s3.build.php:118
|
2029 |
+
msgid "This may take several minutes to complete."
|
2030 |
+
msgstr ""
|
2031 |
+
|
2032 |
+
#: views/packages/main/s3.build.php:122
|
2033 |
+
msgid "Build Status"
|
2034 |
+
msgstr ""
|
2035 |
+
|
2036 |
+
#: views/packages/main/s3.build.php:129
|
2037 |
+
msgid "Package Completed"
|
2038 |
+
msgstr ""
|
2039 |
+
|
2040 |
+
#: views/packages/main/s3.build.php:134
|
2041 |
+
msgid "Process Time"
|
2042 |
+
msgstr ""
|
2043 |
+
|
2044 |
+
#: views/packages/main/s3.build.php:140
|
2045 |
+
msgid "Download Files"
|
2046 |
+
msgstr ""
|
2047 |
+
|
2048 |
+
#: views/packages/main/s3.build.php:142
|
2049 |
+
msgid "Click to download installer file"
|
2050 |
+
msgstr ""
|
2051 |
+
|
2052 |
+
#: views/packages/main/s3.build.php:145
|
2053 |
+
msgid "Click to download archive file"
|
2054 |
+
msgstr ""
|
2055 |
+
|
2056 |
+
#: views/packages/main/s3.build.php:151
|
2057 |
+
msgid "Click to download both files"
|
2058 |
+
msgstr ""
|
2059 |
+
|
2060 |
+
#: views/packages/main/s3.build.php:152
|
2061 |
+
msgid "One-Click Download"
|
2062 |
+
msgstr ""
|
2063 |
+
|
2064 |
+
#: views/packages/main/s3.build.php:155
|
2065 |
+
msgid "One Click:"
|
2066 |
+
msgstr ""
|
2067 |
+
|
2068 |
+
#: views/packages/main/s3.build.php:156
|
2069 |
+
msgid "Clicking this link will open both the installer and archive download prompts at the same time. On some browsers you may have to disable pop-up warnings on this domain for this to work correctly."
|
2070 |
+
msgstr ""
|
2071 |
+
|
2072 |
+
#: views/packages/main/s3.build.php:164
|
2073 |
+
msgid "How do I install this Package?"
|
2074 |
+
msgstr ""
|
2075 |
+
|
2076 |
+
#: views/packages/main/s3.build.php:176
|
2077 |
+
msgid "Host Build Interrupt"
|
2078 |
+
msgstr ""
|
2079 |
+
|
2080 |
+
#: views/packages/main/s3.build.php:177
|
2081 |
+
msgid "This server cannot complete the build due to host setup constraints."
|
2082 |
+
msgstr ""
|
2083 |
+
|
2084 |
+
#: views/packages/main/s3.build.php:178
|
2085 |
+
msgid "To get past this hosts limitation consider the options below by clicking each section."
|
2086 |
+
msgstr ""
|
2087 |
+
|
2088 |
+
#: views/packages/main/s3.build.php:184
|
2089 |
+
msgid "Option 1: Try DupArchive"
|
2090 |
+
msgstr ""
|
2091 |
+
|
2092 |
+
#: views/packages/main/s3.build.php:188
|
2093 |
+
msgid "OPTION 1:"
|
2094 |
+
msgstr ""
|
2095 |
+
|
2096 |
+
#: views/packages/main/s3.build.php:190
|
2097 |
+
msgid "Enable the DupArchive format which is specific to Duplicator and designed to perform better on constrained budget hosts."
|
2098 |
+
msgstr ""
|
2099 |
+
|
2100 |
+
#: views/packages/main/s3.build.php:194
|
2101 |
+
msgid "Note: DupArchive on Duplicator only supports sites up to 500MB. If your site is over 500MB then use a file filter on step 1 to get the size below 500MB or try the other options mentioned below. Alternatively, you may want to consider"
|
2102 |
+
msgstr ""
|
2103 |
+
|
2104 |
+
#: views/packages/main/s3.build.php:200
|
2105 |
+
msgid " which is capable of migrating sites much larger than 500MB."
|
2106 |
+
msgstr ""
|
2107 |
+
|
2108 |
+
#: views/packages/main/s3.build.php:204 views/packages/main/s3.build.php:271
|
2109 |
+
msgid "Please follow these steps:"
|
2110 |
+
msgstr ""
|
2111 |
+
|
2112 |
+
#: views/packages/main/s3.build.php:206
|
2113 |
+
msgid "On the scanner step check to make sure your package is under 500MB. If not see additional options below."
|
2114 |
+
msgstr ""
|
2115 |
+
|
2116 |
+
#: views/packages/main/s3.build.php:208
|
2117 |
+
msgid "Go to Duplicator > Settings > Packages Tab > Archive Engine >"
|
2118 |
+
msgstr ""
|
2119 |
+
|
2120 |
+
#: views/packages/main/s3.build.php:209
|
2121 |
+
msgid "Enable DupArchive"
|
2122 |
+
msgstr ""
|
2123 |
+
|
2124 |
+
#: views/packages/main/s3.build.php:211
|
2125 |
+
msgid "Build a new package using the new engine format."
|
2126 |
+
msgstr ""
|
2127 |
+
|
2128 |
+
#: views/packages/main/s3.build.php:215
|
2129 |
+
msgid "Note: The DupArchive engine will generate an archive.daf file. This file is very similar to a .zip except that it can only be extracted by the installer.php file or the"
|
2130 |
+
msgstr ""
|
2131 |
+
|
2132 |
+
#: views/packages/main/s3.build.php:217
|
2133 |
+
msgid "commandline extraction tool"
|
2134 |
+
msgstr ""
|
2135 |
+
|
2136 |
+
#: views/packages/main/s3.build.php:225
|
2137 |
+
msgid "Option 2: File Filters"
|
2138 |
+
msgstr ""
|
2139 |
+
|
2140 |
+
#: views/packages/main/s3.build.php:229
|
2141 |
+
msgid "OPTION 2:"
|
2142 |
+
msgstr ""
|
2143 |
+
|
2144 |
+
#: views/packages/main/s3.build.php:231
|
2145 |
+
msgid "The first pass for reading files on some budget hosts maybe slow and have conflicts with strict timeout settings setup by the hosting provider. In these cases, it is recommended to retry the build by adding file filters to larger files/directories."
|
2146 |
+
msgstr ""
|
2147 |
+
|
2148 |
+
#: views/packages/main/s3.build.php:236
|
2149 |
+
msgid "For example, you could filter out the \"/wp-content/uploads/\" folder to create the package then move the files from that directory over manually. If this work-flow is not desired or does not work please check-out the other options below."
|
2150 |
+
msgstr ""
|
2151 |
+
|
2152 |
+
#: views/packages/main/s3.build.php:241
|
2153 |
+
msgid "Retry Build With Filters"
|
2154 |
+
msgstr ""
|
2155 |
+
|
2156 |
+
#: views/packages/main/s3.build.php:247
|
2157 |
+
msgid "Build Folder:"
|
2158 |
+
msgstr ""
|
2159 |
+
|
2160 |
+
#: views/packages/main/s3.build.php:248
|
2161 |
+
msgid "On some servers the build will continue to run in the background. To validate if a build is still running; open the 'tmp' folder above and see if the archive file is growing in size or check the main packages screen to see if the package completed. If it is not then your server has strict timeout constraints."
|
2162 |
+
msgstr ""
|
2163 |
+
|
2164 |
+
#: views/packages/main/s3.build.php:260
|
2165 |
+
msgid "Option 3: Two-Part Install"
|
2166 |
+
msgstr ""
|
2167 |
+
|
2168 |
+
#: views/packages/main/s3.build.php:264
|
2169 |
+
msgid "OPTION 3:"
|
2170 |
+
msgstr ""
|
2171 |
+
|
2172 |
+
#: views/packages/main/s3.build.php:266
|
2173 |
+
msgid "A two-part install minimizes server load and can avoid I/O and CPU issues encountered on some budget hosts. With this procedure you simply build a 'database-only' archive, manually move the website files, and then run the installer to complete the process."
|
2174 |
+
msgstr ""
|
2175 |
+
|
2176 |
+
#: views/packages/main/s3.build.php:270
|
2177 |
+
msgid " Overview"
|
2178 |
+
msgstr ""
|
2179 |
+
|
2180 |
+
#: views/packages/main/s3.build.php:273
|
2181 |
+
msgid "Click the button below to go back to Step 1."
|
2182 |
+
msgstr ""
|
2183 |
+
|
2184 |
+
#: views/packages/main/s3.build.php:274
|
2185 |
+
msgid "On Step 1 the \"Archive Only the Database\" checkbox will be auto checked."
|
2186 |
+
msgstr ""
|
2187 |
+
|
2188 |
+
#: views/packages/main/s3.build.php:276
|
2189 |
+
msgid "Complete the package build and follow the "
|
2190 |
+
msgstr ""
|
2191 |
+
|
2192 |
+
#: views/packages/main/s3.build.php:286
|
2193 |
+
msgid "Yes. I have read the above overview and would like to continue!"
|
2194 |
+
msgstr ""
|
2195 |
+
|
2196 |
+
#: views/packages/main/s3.build.php:288
|
2197 |
+
msgid "Start Two-Part Install Process"
|
2198 |
+
msgstr ""
|
2199 |
+
|
2200 |
+
#: views/packages/main/s3.build.php:297
|
2201 |
+
msgid "Option 4: Configure Server"
|
2202 |
+
msgstr ""
|
2203 |
+
|
2204 |
+
#: views/packages/main/s3.build.php:301
|
2205 |
+
msgid "OPTION 4:"
|
2206 |
+
msgstr ""
|
2207 |
+
|
2208 |
+
#: views/packages/main/s3.build.php:302
|
2209 |
+
msgid "This option is available on some hosts that allow for users to adjust server configurations. With this option you will be directed to an FAQ page that will show various recommendations you can take to improve/unlock constraints set up on this server."
|
2210 |
+
msgstr ""
|
2211 |
+
|
2212 |
+
#: views/packages/main/s3.build.php:308
|
2213 |
+
msgid "Diagnose Server Setup"
|
2214 |
+
msgstr ""
|
2215 |
+
|
2216 |
+
#: views/packages/main/s3.build.php:312
|
2217 |
+
msgid "RUNTIME DETAILS"
|
2218 |
+
msgstr ""
|
2219 |
+
|
2220 |
+
#: views/packages/main/s3.build.php:315
|
2221 |
+
msgid "Allowed Runtime:"
|
2222 |
+
msgstr ""
|
2223 |
+
|
2224 |
+
#: views/packages/main/s3.build.php:319
|
2225 |
+
msgid "PHP Max Execution"
|
2226 |
+
msgstr ""
|
2227 |
+
|
2228 |
+
#: views/packages/main/s3.build.php:329
|
2229 |
+
msgid "This value is represented in seconds. A value of 0 means no timeout limit is set for PHP."
|
2230 |
+
msgstr ""
|
2231 |
+
|
2232 |
+
#: views/packages/main/s3.build.php:333 views/settings/packages.php:167
|
2233 |
+
msgid "Mode"
|
2234 |
+
msgstr ""
|
2235 |
+
|
2236 |
+
#: views/packages/main/s3.build.php:339
|
2237 |
+
msgid "PHP Max Execution Mode"
|
2238 |
+
msgstr ""
|
2239 |
+
|
2240 |
+
#: views/packages/main/s3.build.php:341
|
2241 |
+
msgid "If the value is [dynamic] then its possible for PHP to run longer than the default. If the value is [fixed] then PHP will not be allowed to run longer than the default. <br/><br/> If this value is larger than the [Allowed Runtime] above then the web server has been enabled with a timeout cap and is overriding the PHP max time setting."
|
2242 |
+
msgstr ""
|
2243 |
+
|
2244 |
+
#: views/packages/main/s3.build.php:362
|
2245 |
+
msgid "Read Package Log File"
|
2246 |
+
msgstr ""
|
2247 |
+
|
2248 |
+
#: views/packages/screen.php:64
|
2249 |
+
msgid "<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/><b><i class='fa fa-download'></i> Downloads</b><br/>To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/><b><i class='far fa-file-archive'></i> Archive Types</b><br/>An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for 'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
|
2250 |
+
msgstr ""
|
2251 |
+
|
2252 |
+
#: views/packages/screen.php:85
|
2253 |
+
msgid "<b>Packages New » 1 Setup</b> <br/>The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not required. <br/><br/>"
|
2254 |
+
msgstr ""
|
2255 |
+
|
2256 |
+
#: views/packages/screen.php:97
|
2257 |
+
msgid "<b>Packages » 2 Scan</b> <br/>The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>"
|
2258 |
+
msgstr ""
|
2259 |
+
|
2260 |
+
#: views/packages/screen.php:105
|
2261 |
+
msgid ""
|
2262 |
+
"<b>Packages » 3 Build</b> <br/>The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: <ol><li>Download the installer.php and archive.zip files to your local computer.</li><li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li><li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li></ol>For complete instructions see:<br/>\n"
|
2263 |
+
"\t\t\t\t\t<a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help&utm_campaign=duplicator_free#quick-040-q' target='_blank'>\n"
|
2264 |
+
"\t\t\t\t\tHow do I install this Package?</a><br/><br/>"
|
2265 |
+
msgstr ""
|
2266 |
+
|
2267 |
+
#: views/packages/screen.php:122
|
2268 |
+
msgid "<b>Packages » Details</b> <br/>The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>"
|
2269 |
+
msgstr ""
|
2270 |
+
|
2271 |
+
#: views/settings/about-info.php:49
|
2272 |
+
msgid "Duplicator can streamline your workflow and quickly clone/migrate a WordPress site. The plugin helps admins, designers and developers speed up the migration process of moving a WordPress site. Please help us continue development by giving the plugin a 5 star."
|
2273 |
+
msgstr ""
|
2274 |
+
|
2275 |
+
#: views/settings/about-info.php:58
|
2276 |
+
msgid "Rate Duplicator"
|
2277 |
+
msgstr ""
|
2278 |
+
|
2279 |
+
#: views/settings/about-info.php:69
|
2280 |
+
msgid "Support Duplicator"
|
2281 |
+
msgstr ""
|
2282 |
+
|
2283 |
+
#: views/settings/about-info.php:71
|
2284 |
+
msgid "with a 5 star review!"
|
2285 |
+
msgstr ""
|
2286 |
+
|
2287 |
+
#: views/settings/about-info.php:85
|
2288 |
+
msgid "Spread the Word"
|
2289 |
+
msgstr ""
|
2290 |
+
|
2291 |
+
#: views/settings/about-info.php:92
|
2292 |
+
msgid "Facebook"
|
2293 |
+
msgstr ""
|
2294 |
+
|
2295 |
+
#: views/settings/about-info.php:95
|
2296 |
+
msgid "Twitter"
|
2297 |
+
msgstr ""
|
2298 |
+
|
2299 |
+
#: views/settings/about-info.php:98
|
2300 |
+
msgid "LinkedIn"
|
2301 |
+
msgstr ""
|
2302 |
+
|
2303 |
+
#: views/settings/about-info.php:101
|
2304 |
+
msgid "Google+"
|
2305 |
+
msgstr ""
|
2306 |
+
|
2307 |
+
#: views/settings/about-info.php:120
|
2308 |
+
msgid "Stay in the Loop"
|
2309 |
+
msgstr ""
|
2310 |
+
|
2311 |
+
#: views/settings/about-info.php:130
|
2312 |
+
msgid "Subscribe to the Duplicator newsletter and stay on top of great ideas, tutorials, and better ways to improve your workflows"
|
2313 |
+
msgstr ""
|
2314 |
+
|
2315 |
+
#: views/settings/controller.php:24
|
2316 |
+
msgid "Schedules"
|
2317 |
+
msgstr ""
|
2318 |
+
|
2319 |
+
#: views/settings/controller.php:26
|
2320 |
+
msgid "License"
|
2321 |
+
msgstr ""
|
2322 |
+
|
2323 |
+
#: views/settings/controller.php:27
|
2324 |
+
msgid "About"
|
2325 |
+
msgstr ""
|
2326 |
+
|
2327 |
+
#: views/settings/general.php:8
|
2328 |
+
msgid "General Settings Saved"
|
2329 |
+
msgstr ""
|
2330 |
+
|
2331 |
+
#: views/settings/general.php:88
|
2332 |
+
msgid "Plugin"
|
2333 |
+
msgstr ""
|
2334 |
+
|
2335 |
+
#: views/settings/general.php:92 views/tools/diagnostics/inc.settings.php:91
|
2336 |
+
#: views/tools/diagnostics/inc.settings.php:110
|
2337 |
+
#: views/tools/diagnostics/inc.settings.php:183
|
2338 |
+
msgid "Version"
|
2339 |
+
msgstr ""
|
2340 |
+
|
2341 |
+
#: views/settings/general.php:99
|
2342 |
+
msgid "Uninstall"
|
2343 |
+
msgstr ""
|
2344 |
+
|
2345 |
+
#: views/settings/general.php:102
|
2346 |
+
msgid "Delete Plugin Settings"
|
2347 |
+
msgstr ""
|
2348 |
+
|
2349 |
+
#: views/settings/general.php:105
|
2350 |
+
msgid "Delete Entire Storage Directory"
|
2351 |
+
msgstr ""
|
2352 |
+
|
2353 |
+
#: views/settings/general.php:112
|
2354 |
+
msgid "Full Path"
|
2355 |
+
msgstr ""
|
2356 |
+
|
2357 |
+
#: views/settings/general.php:115
|
2358 |
+
msgid "Disable .htaccess File In Storage Directory"
|
2359 |
+
msgstr ""
|
2360 |
+
|
2361 |
+
#: views/settings/general.php:117
|
2362 |
+
msgid "Disable if issues occur when downloading installer/archive files."
|
2363 |
+
msgstr ""
|
2364 |
+
|
2365 |
+
#: views/settings/general.php:122
|
2366 |
+
msgid "Custom Roles"
|
2367 |
+
msgstr ""
|
2368 |
+
|
2369 |
+
#: views/settings/general.php:125
|
2370 |
+
msgid "Enable User Role Editor Plugin Integration"
|
2371 |
+
msgstr ""
|
2372 |
+
|
2373 |
+
#: views/settings/general.php:130
|
2374 |
+
msgid "The User Role Editor Plugin"
|
2375 |
+
msgstr ""
|
2376 |
+
|
2377 |
+
#: views/settings/general.php:131 views/settings/gopro.php:46
|
2378 |
+
msgid "Free"
|
2379 |
+
msgstr ""
|
2380 |
+
|
2381 |
+
#: views/settings/general.php:132
|
2382 |
+
msgid "or"
|
2383 |
+
msgstr ""
|
2384 |
+
|
2385 |
+
#: views/settings/general.php:133 views/settings/gopro.php:47
|
2386 |
+
msgid "Professional"
|
2387 |
+
msgstr ""
|
2388 |
+
|
2389 |
+
#: views/settings/general.php:134
|
2390 |
+
msgid "must be installed to use"
|
2391 |
+
msgstr ""
|
2392 |
+
|
2393 |
+
#: views/settings/general.php:135
|
2394 |
+
msgid "this feature."
|
2395 |
+
msgstr ""
|
2396 |
+
|
2397 |
+
#: views/settings/general.php:144
|
2398 |
+
msgid "Debug"
|
2399 |
+
msgstr ""
|
2400 |
+
|
2401 |
+
#: views/settings/general.php:148
|
2402 |
+
msgid "Debugging"
|
2403 |
+
msgstr ""
|
2404 |
+
|
2405 |
+
#: views/settings/general.php:151
|
2406 |
+
msgid "Enable debug options throughout user interface"
|
2407 |
+
msgstr ""
|
2408 |
+
|
2409 |
+
#: views/settings/general.php:155
|
2410 |
+
msgid "Trace Log"
|
2411 |
+
msgstr ""
|
2412 |
+
|
2413 |
+
#: views/settings/general.php:161
|
2414 |
+
msgid "Turns on detailed operation logging. Logging will occur in both PHP error and local trace logs."
|
2415 |
+
msgstr ""
|
2416 |
+
|
2417 |
+
#: views/settings/general.php:163
|
2418 |
+
msgid "WARNING: Only turn on this setting when asked to by support as tracing will impact performance."
|
2419 |
+
msgstr ""
|
2420 |
+
|
2421 |
+
#: views/settings/general.php:167
|
2422 |
+
msgid "Download Trace Log"
|
2423 |
+
msgstr ""
|
2424 |
+
|
2425 |
+
#: views/settings/general.php:175
|
2426 |
+
msgid "Advanced"
|
2427 |
+
msgstr ""
|
2428 |
+
|
2429 |
+
#: views/settings/general.php:182
|
2430 |
+
msgid "Reset Packages"
|
2431 |
+
msgstr ""
|
2432 |
+
|
2433 |
+
#: views/settings/general.php:185
|
2434 |
+
msgid "This process will reset all packages by deleting those without a completed status, reset the active package id and perform a cleanup of the build tmp file."
|
2435 |
+
msgstr ""
|
2436 |
+
|
2437 |
+
#: views/settings/general.php:188
|
2438 |
+
msgid "Reset Settings"
|
2439 |
+
msgstr ""
|
2440 |
+
|
2441 |
+
#: views/settings/general.php:189
|
2442 |
+
msgid "This action should only be used if the packages screen is having issues or a build is stuck."
|
2443 |
+
msgstr ""
|
2444 |
+
|
2445 |
+
#: views/settings/general.php:194
|
2446 |
+
msgid "Archive scan"
|
2447 |
+
msgstr ""
|
2448 |
+
|
2449 |
+
#: views/settings/general.php:197
|
2450 |
+
msgid "Skip"
|
2451 |
+
msgstr ""
|
2452 |
+
|
2453 |
+
#: views/settings/general.php:199
|
2454 |
+
msgid "If enabled all files check on scan will be skipped before package creation. In some cases, this option can be beneficial if the scan process is having issues running or returning errors."
|
2455 |
+
msgstr ""
|
2456 |
+
|
2457 |
+
#: views/settings/general.php:205
|
2458 |
+
msgid "Other Plugins/Themes JS"
|
2459 |
+
msgstr ""
|
2460 |
+
|
2461 |
+
#: views/settings/general.php:208 views/settings/general.php:224
|
2462 |
+
msgid "Unhook them on Duplicator pages"
|
2463 |
+
msgstr ""
|
2464 |
+
|
2465 |
+
#: views/settings/general.php:211
|
2466 |
+
msgid "Check this option if other plugins/themes JavaScript files are conflicting with Duplicator."
|
2467 |
+
msgstr ""
|
2468 |
+
|
2469 |
+
#: views/settings/general.php:215 views/settings/general.php:231
|
2470 |
+
msgid "Do not modify this setting unless you know the expected result or have talked to support."
|
2471 |
+
msgstr ""
|
2472 |
+
|
2473 |
+
#: views/settings/general.php:221
|
2474 |
+
msgid "Other Plugins/Themes CSS"
|
2475 |
+
msgstr ""
|
2476 |
+
|
2477 |
+
#: views/settings/general.php:227
|
2478 |
+
msgid "Check this option if other plugins/themes CSS files are conflicting with Duplicator."
|
2479 |
+
msgstr ""
|
2480 |
+
|
2481 |
+
#: views/settings/general.php:240
|
2482 |
+
msgid "Save General Settings"
|
2483 |
+
msgstr ""
|
2484 |
+
|
2485 |
+
#: views/settings/general.php:249
|
2486 |
+
msgid "Reset Packages ?"
|
2487 |
+
msgstr ""
|
2488 |
+
|
2489 |
+
#: views/settings/general.php:250
|
2490 |
+
msgid "This will clear and reset all of the current temporary packages. Would you like to continue?"
|
2491 |
+
msgstr ""
|
2492 |
+
|
2493 |
+
#: views/settings/general.php:251
|
2494 |
+
msgid "Resetting settings, Please Wait..."
|
2495 |
+
msgstr ""
|
2496 |
+
|
2497 |
+
#: views/settings/general.php:254
|
2498 |
+
msgid "Yes"
|
2499 |
+
msgstr ""
|
2500 |
+
|
2501 |
+
#: views/settings/general.php:255
|
2502 |
+
msgid "No"
|
2503 |
+
msgstr ""
|
2504 |
+
|
2505 |
+
#: views/settings/general.php:259
|
2506 |
+
msgid "AJAX ERROR!"
|
2507 |
+
msgstr ""
|
2508 |
+
|
2509 |
+
#: views/settings/general.php:259
|
2510 |
+
msgid "Ajax request error"
|
2511 |
+
msgstr ""
|
2512 |
+
|
2513 |
+
#: views/settings/general.php:264 views/settings/general.php:317
|
2514 |
+
msgid "RESPONSE ERROR!"
|
2515 |
+
msgstr ""
|
2516 |
+
|
2517 |
+
#: views/settings/general.php:307
|
2518 |
+
msgid "Packages successfully reset"
|
2519 |
+
msgstr ""
|
2520 |
+
|
2521 |
+
#: views/settings/gopro.php:39
|
2522 |
+
msgid "The simplicity of Duplicator"
|
2523 |
+
msgstr ""
|
2524 |
+
|
2525 |
+
#: views/settings/gopro.php:40
|
2526 |
+
msgid "with power for everyone."
|
2527 |
+
msgstr ""
|
2528 |
+
|
2529 |
+
#: views/settings/gopro.php:45
|
2530 |
+
msgid "Feature"
|
2531 |
+
msgstr ""
|
2532 |
+
|
2533 |
+
#: views/settings/gopro.php:50
|
2534 |
+
msgid "Backup Files & Database"
|
2535 |
+
msgstr ""
|
2536 |
+
|
2537 |
+
#: views/settings/gopro.php:60
|
2538 |
+
msgid "Database Table Filters"
|
2539 |
+
msgstr ""
|
2540 |
+
|
2541 |
+
#: views/settings/gopro.php:65
|
2542 |
+
msgid "Migration Wizard"
|
2543 |
+
msgstr ""
|
2544 |
+
|
2545 |
+
#: views/settings/gopro.php:70
|
2546 |
+
msgid "Scheduled Backups"
|
2547 |
+
msgstr ""
|
2548 |
+
|
2549 |
+
#: views/settings/gopro.php:77
|
2550 |
+
msgid "Amazon S3 Storage"
|
2551 |
+
msgstr ""
|
2552 |
+
|
2553 |
+
#: views/settings/gopro.php:85
|
2554 |
+
msgid "Dropbox Storage "
|
2555 |
+
msgstr ""
|
2556 |
+
|
2557 |
+
#: views/settings/gopro.php:93
|
2558 |
+
msgid "Google Drive Storage"
|
2559 |
+
msgstr ""
|
2560 |
+
|
2561 |
+
#: views/settings/gopro.php:101
|
2562 |
+
msgid "Microsoft One Drive Storage"
|
2563 |
+
msgstr ""
|
2564 |
+
|
2565 |
+
#: views/settings/gopro.php:109
|
2566 |
+
msgid "Remote FTP/SFTP Storage"
|
2567 |
+
msgstr ""
|
2568 |
+
|
2569 |
+
#: views/settings/gopro.php:115
|
2570 |
+
msgid "Overwrite Live Site"
|
2571 |
+
msgstr ""
|
2572 |
+
|
2573 |
+
#: views/settings/gopro.php:117
|
2574 |
+
msgid "Overwrite Existing Site"
|
2575 |
+
msgstr ""
|
2576 |
+
|
2577 |
+
#: views/settings/gopro.php:118
|
2578 |
+
msgid "Overwrite a live site. Makes installing super-fast!"
|
2579 |
+
msgstr ""
|
2580 |
+
|
2581 |
+
#: views/settings/gopro.php:124 views/settings/gopro.php:126
|
2582 |
+
msgid "Large Site Support"
|
2583 |
+
msgstr ""
|
2584 |
+
|
2585 |
+
#: views/settings/gopro.php:127
|
2586 |
+
msgid "Advanced archive engine processes multi-gig sites - even on stubborn budget hosts!"
|
2587 |
+
msgstr ""
|
2588 |
+
|
2589 |
+
#: views/settings/gopro.php:133
|
2590 |
+
msgid "Multiple Archive Engines"
|
2591 |
+
msgstr ""
|
2592 |
+
|
2593 |
+
#: views/settings/gopro.php:138
|
2594 |
+
msgid "Server Throttling"
|
2595 |
+
msgstr ""
|
2596 |
+
|
2597 |
+
#: views/settings/gopro.php:143
|
2598 |
+
msgid "Background Processing"
|
2599 |
+
msgstr ""
|
2600 |
+
|
2601 |
+
#: views/settings/gopro.php:148
|
2602 |
+
msgid "Installer Passwords"
|
2603 |
+
msgstr ""
|
2604 |
+
|
2605 |
+
#: views/settings/gopro.php:153
|
2606 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|