PHPIndex

This page lists files in the current directory. You can view content, get download/execute commands for Wget, Curl, or PowerShell, or filter the list using wildcards (e.g., `*.sh`).

static
index.html
wget 'https://sme10.lists2.roe3.org/kodbox/app/controller/install/static/index.html'
View Content
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link head-type='kod' href="<?php echo STATIC_PATH;?>images/icon/fav.png" rel="icon" type="image/x-icon">
	<title><?php echo LNG('common.copyright.name');?>-<?php echo LNG('common.install'); ?></title>
	<link href="<?php echo STATIC_PATH;?>style/lib/main.css" rel='stylesheet'>
	<link href="<?php echo STATIC_PATH;?>style/dist/main.css" rel='stylesheet'>
	<link href="<?php echo $installPath;?>static/index.css" rel='stylesheet'>
	<?php Hook::trigger('template.commonHeader');?>
</head>

<body>
	<div id="app">
		<div class="install-box">
			<div class="content-main-message">
				<div class="header">
					<img src="<?php echo $installPath;?>static/logo.png">
				</div>
				<div class="body">
					<div class="content-main">
						<?php $hide = $installFast ? 'hidden' : '';?>
						<div class="install-fast hidden" fast="<?php echo $installFast; ?>" auto="<?php echo $installAuto; ?>"></div>
						<div class="check-result">
							<div class="title-box"><?php echo $installFast ? LNG('admin.setting.system') : LNG('admin.install.install'); ?></div>
							<div class="progress-box">
								<!-- <div class="active"><span>使用协议</span><span class="btm-line"></span></div> -->
								<div class="active <?php echo $hide;?>" data="env"><span><?php echo LNG('common.env.check');?></span><span class="btm-line"></span></div>
								<div class="<?php echo $hide;?>" data="db"><span><?php echo LNG('admin.install.databaseSet'); ?></span><span class="btm-line"></span></div>
								<div class="<?php echo $installFast ? 'active' : '';?>" data="user">
									<span><?php echo LNG('admin.setting.account'); ?></span>
									<span class="btm-line"></span>
								</div>
							</div>
							<!-- <div class="step-box agreement">
								<div class="message-content">
									<div class=""></div>
								</div>
							</div> -->
							<div class="step-box env <?php echo $hide; ?>">
								<div class="message-content form-box">
									<div class="env-table">
										<div class="env-item-list">
											<?php foreach($envList as $key => $opt){
												echo '<p class="'.$key.'"><span class="w30 row-title">'.$opt['title'].'</span><span class="w20 row-value"></span><span class="w40 row-desc">'.$opt['text'].'</span><span class="w10 row-state"><i class="icon icon-loading"></i></span><span class="clear"></span></p>';
											} ?>
										</div>
										<div class="form-row panel-form-body clear"><hr></div>
										<div class="form-row form-target-save hidden">
											<div class="setting-title"></div>
											<div class="setting-content">
												<button class="form-save-button"><?php echo LNG('common.ok'); ?></button>
												<a class="help hidden" target="_blank" href="http://doc.kodcloud.com/v2/#/help/install"><?php echo LNG('explorer.editor.help'); ?></a>
											</div>
										</div>
									</div>
								</div>
							</div>
							<div class="step-box db hidden">
								<div class="message-content">
									<p class="info-alert info-alert-yellow hidden"><?php echo LNG('admin.install.dbWasSet'); ?></p>
									<div class="db-table"></div>
								</div>
							</div>
							<div class="step-box user <?php echo $installFast ? '' : 'hidden';?>" style="min-height:274px">
								<div class="message-content">
									<div class="user-table"></div>
								</div>
							</div>
							<div class="step-box msg hidden">
								<i class="font-icon success"></i>
								<div class="message-content">
									<div class='title'><?php echo LNG('admin.install.success'); ?></div>
									<div class='desc'></div>
								</div>
							</div>
						</div>
						<div class="link hidden"> 
							<?php echo str_replace('5s', '<em class="delay">5</em>s', sprintf(LNG('explorer.jumpAfterWhile'), 5, './')); ?>
						</div>
					</div>
				</div>
			</div>
			<div class="common-footer aero"></div>
		</div>
	</div>

	<script type="text/javascript"> 
		window.API_HOST = "<?php echo appHostGet();?>";
		window.STATIC_PATH = "<?php echo STATIC_PATH;?>";
	</script>
	<script src="<?php echo STATIC_PATH;?>app/vender/es3-profill.js"></script>
	<script src="<?php echo STATIC_PATH;?>app/dist/vendor.js"></script>
	<script src="<?php echo STATIC_PATH;?>app/dist/api.js"></script>
	<script src="<?php echo $installPath;?>index.js"></script>
	<?php Hook::trigger('templateCommonFooter');?>
</body>
</html>
index.js
wget 'https://sme10.lists2.roe3.org/kodbox/app/controller/install/static/index.js'
View Content
(function(){
    // 比较版本号:7.1.19 >= 5.3
    var compareVers = function (ver1, ver2) {
        ver1 = ver1.toString();
        ver2 = ver2.toString();
        const pVer1 = ver1.split('.').map(Number);
        const pVer2 = ver2.split('.').map(Number);
        const mxLen = Math.max(pVer1.length, pVer2.length);
        for (var i = 0; i < mxLen; i++) {
            const v1 = pVer1[i] || 0;
            const v2 = pVer2[i] || 0;
            if (v1 > v2) return 1;
            if (v1 < v2) return -1;
        }
        return 0;
    }
    // 环境检测项赋值
    var envView = function(){
        var errList = [];
        var chkList = ['path_writable', 'php_version', 'allow_url_fopen'];  // 检查项
        var $table = $(".step-box.env .env-table");
        request('install/index/env', {}, function(result){
            tips && tips.close();
            if (!result || !result.code) {
                Tips.tips(LNG['admin.install.envReqErr'], 'warning', 3000);
                $table.find('.row-state .icon').removeClass().addClass('icon icon-warn ri-more-fill');
                return false;
            }
            var data = result.data;
            $table.find('.env-item-list>p').each(function(){
                var key = $(this).attr('class');
                var val = data[key];
                var txt = '';
                switch (key) {
                    case 'path_writable':
                        if (val !== true) {
                            txt = '<span title-timeout="100" title="sudo chmod -Rf 777 '+val+'">'+val+'</span>';
                            val = false;
                        }
                        break;
                    case 'php_version':
                        txt = val;
                        val = compareVers(val, 5.3) > 0 ? true : false;
                        break;
                    case 'php_bit':
                        txt = val;
                        val = val == 64 ? true : false;
                        break;
                    default:break;
                }
                if (txt) $(this).find('.row-value').html(txt);
                var state = val === true ? 'success' : 'error';
                $(this).find('.row-state .icon').removeClass().addClass('icon icon-'+state);
                if (val !== true) errList.push(key);
            });
            var button = errList.length ? LNG['common.skip'] : LNG['common.nextStep'];
            $table.find(".form-target-save").removeClass('hidden');
            $table.find(".form-save-button").text(button);
            // 使用帮助
            if(errList.length) $table.find("a.help").removeClass('hidden');
        });
        // 绑定点击事件
        $table.delegate('.form-save-button', 'click', function(){
            var errs = _.intersection(errList, chkList);
            if(!errs.length) return stepNext(this, 1);
            var errMsg = [LNG['admin.install.ensureNoError']];
            _.each(errs, function(value, i){
                errMsg.push((i+1)+'.'+$table.find("."+value+">span:eq(0)").text());
            });
            Tips.tips(errMsg.join('<br/>'), false, 3000);
        });
    }

    // 数据库配置提交
    var dbSave = function(FormData, update){
        var update = update || false;
        var formMaker = new kodApi.formMaker({formData:FormData });
        formMaker.renderTarget($(".step-box.db .db-table"));
        if(update) {
            $(".step-box.db .db-table").find('button,input').prop('disabled', true);
            $(".step-box.db .info-alert").removeClass('hidden');
        }
        $(".step-box.db .form-save-button").text(LNG['common.ok']);
        $(".step-box.db .form-save-button").click(function(){
            var data = formMaker.getValue();
            if(!data) return false;
            var _this = this;
            data = $.extend({}, {action: 'db'}, data);
            var tips = Tips.loadingMask($('.content-main'),false,0.2);
            request('install/index/save', data, function(result){
                tips.close();
                // 是否删除已存在数据库
                if(result.info && result.info == '10001'){
                    $.dialog.confirm(result.data,function(){
                        data.del = 1;
                        dbSaveSet(_this, data);
                    });
                    return false;
                }
                var delay = null;
                if(!result.code || (result.info && result.info == '10000')) delay = 5000;
                var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
                Tips.close(msg, result.code, delay);
                if(!result.code) return;
                stepNext(_this, 2);
            }, function(){
                tips.close();
            });
        });
    }
    /**
     * 数据库配置(删除旧数据)提交
     * @param {*} _this 
     * @param {*} data 
     */
    var dbSaveSet = function(_this, data){
        var tips = Tips.loadingMask($('.content-main'),false,0.2);
        request('install/index/save', data, function(result){
            tips.close();
            var delay = !result.code ? 5000 : null;
            var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
            Tips.close(msg, result.code, delay);
            if(!result.code) return;
            stepNext(_this, 2);
        }, function(){
            tips.close();
        });
    }

    /**
     * 管理员账号提交
     * @param {*} formMaker 
     * @returns 
     */
    var userSave = function (formMaker) {
        var data = formMaker.getValue();
        Events.trigger('install.userSetStart',data);
        if(!data || !data.name || !data.password || !data.password2) return false;
        if (data.password != data.password2) {
            formMaker.setValue('password2', '');
            Tips.tips(LNG['user.rootPwdEqual'], 'warning');
            return false;
        }
        delete data.password2;

        // var _this = this;
        var _this = '.step-box.user .form-save-button'; // 为了和旧版统一,实际没有必要
        data = $.extend({}, {action: 'user'}, data);
        var tips = Tips.loadingMask($('.content-main'),false,0.2);
        request('install/index/save', data, function(result){
            tips.close();
            var delay = !result.code ? 5000 : null;
            var msg = result.data || (LNG['explorer.error']+', '+LNG['admin.install.setPathWrt']);
            Tips.close(msg, result.code, delay);
            if(!result.code) return;
            // 显示admin账号密码
            name = data.name;
            password = data.password;
            LocalData.del('fileHistoryLastPath-1');
            var update = result.info || 0;
            stepLast(_this, update); // 安装成功,提示登录
        }, function(){
            tips.close();
        });
    }

    /**
     * 数据库、缓存配置
     */
    var dbView = function(){
        var package = './app/controller/install/static/package.html'
        requireAsync(package, function(FormData){
            // 获取json数据
            FormData = FormData.replace(/\n/g,"").replace(/\r/g,""); //去掉字符串中的换行符
            FormData = FormData.replace(/\n/g,"").replace(/\s|\xA0/g,""); //去掉字符串中的所有空格
            FormData = eval('(' + FormData + ')'); //将字符串解析成json对象
            FormData.redisMore.info.openMore.display = LNG['common.more']+' <b class="caret"></b>';
            FormData.redisMore.info.openMore.className = 'btn btn-default btn-sm';
            request('install/index/env', {db: 1}, function(result){
                if(_.isEmpty(result.data)) return dbSave(FormData);
                _.each(FormData, function(value, key){
                    if(result.data[key]) value.value = result.data[key];
                });
                dbSave(FormData, true);
            });
        });
    }

    /**
     * 管理员账号配置
     */
    var name = '';
    var password = '';
    var userView = function(fast){
        var auto = $('.install-box .install-fast').attr('auto');
        var formData = {
            "name":{
                "type":"input",
                "value":auto || 'admin',
                // "display":"<i class='font-icon ri-user-line-3'></i>",
                "display":LNG['user.account'],
                "attr":{"placeholder":LNG['user.inputName']},
                "desc":LNG['user.rootName'],
                "require":"1"
            },
            "password":{
                "type":"password",
                "value":'',
                // "display":"<i class='font-icon ri-key-line'></i>",
                "display":LNG['common.password'],
                "attr":{"placeholder":LNG['user.inputPwd']},
                "desc":LNG['user.rootPwd'],
                "require":"1"
            },
            "password2":{
                "type":"password",
                "value":'',
                // "display":"<i class='font-icon ri-key-line'></i>",
                "display":LNG['common.password'],
                "attr":{"placeholder":LNG['user.inputPwd']},
                "desc":LNG['user.rootPwdRepeat'],
                "require":"1"
            },
        };
        var formMaker = new kodApi.formMaker({formData:formData });
        formMaker.renderTarget($(".step-box.user .user-table"));
		Events.trigger('install.userSetReady',formMaker);
        tips && tips.close();
        $(".step-box.user .form-save-button").text(LNG['common.ok']);
        $('.step-box.user .form-box input').keyEnter(function(){userSave(formMaker);});
        $(".step-box.user .form-save-button").click(function(){userSave(formMaker);});
    }

    // 下一步
    var stepNext = function(_this, index){
        $(_this).parents('.check-result').find('.progress-box>div:eq('+index+')').addClass('active');
        $(_this).parents('.check-result').find('.step-box').addClass('hidden');
        $(_this).parents('.step-box').next().removeClass('hidden');
    }
    // 最后一步
    var stepLast = function(_this, update){
        $(_this).parents('.check-result').find('.title-box,.progress-box').addClass('hidden');
        $(_this).parents('.content-main').children('.link').removeClass('hidden');
        $(_this).parents('.check-result').find('.step-box').addClass('hidden');
        $(_this).parents('.step-box').next().removeClass('hidden');
        // 跳转登录
        if(update) $(".step-box.msg .title").text(LNG['admin.install.updateSuccess']);
        var text = LNG['user.account']+": "+name+"&nbsp;&nbsp;&nbsp;&nbsp;"+LNG['common.password']+": "+password;
        $(".step-box.msg .desc").html(text);
        var count = 5;
        var timer = null;
        timer = setInterval(function () {
            if (count > 0) {
                count = count - 1;
                $('.content-main .link .delay').text(count);
            } else {
                clearInterval(timer);
                window.location.href = $('.content-main .link a').attr('href');
            }
        }, 1000);
    }

    var request = function(url, data, callback, callbackError){
		// 兼容处理: https://qastack.cn/programming/26261001/warning-about-http-raw-post-data-being-deprecated 
		data = data || {};
		data._installTime = time();
        $.ajax({
            url:API_HOST + url,
            data:data,
            type: 'POST',
            dataType:'json',
            error: function (xhr, textStatus, errorThrown) {
                if(callbackError) callbackError();
                var error = xhr.responseText;
                var dialog = $.dialog.list['ajaxErrorDialog'];
                if(error && !_.trim(error)) return;// 有内容,但内容为空白则不处理;
                Tips.close(LNG['explorer.systemError'], false);
                if (xhr.status == 0 && error == '') {
                    error = LNG['explorer.networkError'];
                }
                error = '<div class="ajaxError" style="font-size:14px;padding:40px;color:#FF9800;">' + error + '</div>';
                if (!dialog) {
                    $.dialog({
                        id: 'ajaxErrorDialog',
                        padding: 0,
                        width: '60%',
                        height: '65%',
                        fixed: true,
                        resize: true,
                        title: 'Ajax Error',
                        content: ''
                    });
                }
                $.iframeHtml($(".ajaxErrorDialog .aui-content"), error);
            },
            success: function(data) {
                callback(data);
            }
        });
    }
    var tips = window.Tips ? window.Tips.loadingMask() : null;
    Events.bind('windowReady',function(){
        try {
            // 检测是否为一键安装,一键安装直接展示账号界面
            var fast = parseInt($('.install-box .install-fast').attr('fast'));
            if(!fast) {
                envView();   // 1.环境配置
                dbView();    // 2.数据库配置
            }
            userView(fast);  // 3.管理员账号配置
            new kodApi.copyright();
            $(".content-main-message .body").perfectScroll();
        } catch(e) {
            tips && tips.close();
            console.error(e);
            var msg = LNG['admin.install.pageError']+'<hr>'+e;
            Tips.notify({icon:"error",title:LNG['common.tips'],content:msg});
            _.delay(function(){
                if ($('.progress-box>.active:last').attr('data') == 'env') {
                    var $env = $(".step-box.env");
                    if (!$env.hasClass('hidden') && $env.find('.form-target-save').hasClass('hidden')) {
                        $env.find('.env-table .row-state .icon').removeClass().addClass('icon icon-warn ri-more-fill');
                    }
                }
            }, 1000);
        }
    });
})();
package.html
wget 'https://sme10.lists2.roe3.org/kodbox/app/controller/install/static/package.html'
View Content
{
	"dbType": {
		"type": "segment",
		"value": "sqlite",
		"display": LNG['admin.install.dbType'],
		"info": {
			"sqlite": "SQLite",
			"mysql": "MySQL",
			"pdo": "PDO"
		},
		"switchItem": {
			"sqlite": "dbDescSqlite",
			"mysql": "dbDescMysql,dbHost,dbUser,dbPwd,dbName,dbEngine",
			"pdo": "dbDescPDO,pdoType"
		}
	},
	"dbDescSqlite": {
		"type": "html","display": "",
		"value": LNG['admin.install.sqliteDesc']
	},
	"dbDescMysql": {
		"type": "html","display": "",
		"value": LNG['admin.install.mysqlDesc']
	},
	"dbDescPDO": {
		"type": "html","display": "",
		"value": LNG['admin.install.pdoDesc']
	},
	
	
	"pdoType": {
		"type": "segment",
		"value": "sqlite",
		"display": LNG['common.type'],
		"info": {
			"sqlite": "SQLite",
			"mysql": "MySQL"
		},
		"switchItem": {
			"sqlite": "",
			"mysql": "pdoDbHost,pdoDbUser,pdoDbPwd,pdoDbName,pdoDbEngine"
		}
	},

	"dbHost": {
		"type": "input",
		"value": "127.0.0.1",
		"attr": {
			"placeholder": "127.0.0.1"
		},
		"display": LNG['common.server'],
		"desc": '<br>'+LNG['admin.install.dbPortDesc'],
		"require": "1"
	},

	"dbUser": {
		"type": "input",
		"value": "root",
		"display": LNG['admin.install.userName'],
		"desc": "",
		"require": "1"
	},

	"dbPwd": {
		"type": "password",
		"value": "",
		"display": LNG['common.password'],
		"desc": ""
	},

	"dbName": {
		"type": "input",
		"value": "kodbox",
		"display": LNG['admin.install.database'],
		"desc": "",
		"require": "1"
	},
	
	"dbEngine": {
		"type":"select",
		"value":"innodb",
		"display":LNG['admin.install.dbEngine'],
		"info":{"innodb":"InnoDB","myisam":"MyISAM"},
	},

	"pdoDbHost": {
		"type": "input",
		"value": "127.0.0.1",
		"attr": {
			"placeholder": "127.0.0.1"
		},
		"display": LNG['common.server'],
		"desc": '<br>'+LNG['admin.install.dbPortDesc'],
		"require": "1"
	},

	"pdoDbUser": {
		"type": "input",
		"value": "root",
		"display": LNG['admin.install.userName'],
		"desc": "",
		"require": "1"
	},

	"pdoDbPwd": {
		"type": "password",
		"value": "",
		"display": LNG['common.password'],
		"desc": ""
	},

	"pdoDbName": {
		"type": "input",
		"value": "kodbox",
		"display": LNG['admin.install.dbName'],
		"require": "1"
	},
	
	"pdoDbEngine": {
		"type":"select",
		"value":"innodb",
		"display":LNG['admin.install.dbEngine'],
		"info":{"innodb":"InnoDB","myisam":"MyISAM"},
	},
	
	"step0": "<hr/>",
	"cacheType": {
		"type": "segment",
		"value": "file",
		"display": LNG['admin.install.cacheType'],
		"desc":"<br/>"+LNG['admin.install.cacheTypeDesc'],
		"info": {
			"file": LNG['admin.install.fileCache'],
			"redis": "Redis",
			"memcached": "Memcached"
		},
		"switchItem": {
			"file": "",
			"redis": "redisHost,redisMore,redisPort",
			"memcached": "memcachedHost,memcachedPort"
		}
	}, 

	"redisHost": {
		"type": "input",
		"value": "127.0.0.1",
		"attr": {
			"placeholder": "127.0.0.1"
		},
		"display": LNG['common.server'],
		"desc": '',
		"require": "1"
	},
	"redisPort": {
		"type": "input",
		"value": "6379",
		"attr": {
			"placeholder": "6379"
		},
		"display": LNG['admin.install.dbPort'],
		"desc": "",
		"require": "1"
	},
	"redisMore":{
		"type":"button",
		"info":{
			'openMore':{
				"display":LNG['common.more']+" <b class='caret'></b>",
				"className":"btn btn-default btn-sm",
			},
		},
		"switchItem":{
			'openMore':"redisAuth",
		}
	},
	"redisAuth": {
		"type": "password",
		"value": "",
		"attr": {"placeholder": LNG['common.password']},
		"desc": LNG['explorer.share.timeDesc'],
		"display": LNG['common.password'],
	},

	"memcachedHost": {
		"type": "input",
		"value": "127.0.0.1",
		"attr": {
			"placeholder": "127.0.0.1"
		},
		"display": LNG['common.server'],
		"desc": "",
		"require": "1"
	},

	"memcachedPort": {
		"type": "input",
		"value": "11211",
		"attr": {
			"placeholder": "11211"
		},
		"display": LNG['admin.install.dbPort'],
		"desc": "",
		"require": "1"
	}

}