33 Star 69 Fork 0

lianZH / gitman-web

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
adminer.php 16.44 KB
一键复制 编辑 原始数据 按行查看 历史
ken.xu 提交于 2018-03-24 21:44 . [feat]: 恢复误删除代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
<?php
require __DIR__ . '/lib/G.class.php';
G::$configs = include(__DIR__ . '/config.php');
G::app_init();
function checkAuthorize(){
$authorize = G::$configs['adminer']['authorize'];
$oval = G::val($_GET, $authorize['id'], '');
if ($oval !== $authorize['val'])
{
G::diestr('authorize failed!');
}
}
function adminer_url($q, $params=array(), $anchor=''){
$params = (array) $params;
$params['q'] = trim($q);
$authorize = G::$configs['adminer']['authorize'];
$params[$authorize['id']] = G::val($_GET, $authorize['id'], '');
$url = 'adminer.php?' . http_build_query($params);
if (!empty($anchor))
{
$url .= '#' . trim($anchor);
}
return $url;
}
function app_init(){
checkAuthorize();
G::$tpl->assign('sitetitle', G::$configs['title']);
G::$tpl->assign('tplPath', G::$configs['template_dir'] . '/adminer');
}
function app_index(){
G::$tpl->assign('error', '');
// 待执行(显示最新的20条),执行中(显示20条),执行失败(显示20条),已完成(显示20条)
// 过滤到未启用的部署分支
$repositorys = Sql::assistant( G::$ds )->select('gitman_repository', array());
$repositoryIds = array();
foreach ($repositorys as $repository)
{
$repositoryIds[] = $repository['id'];
}
$deploys = Sql::assistant( G::$ds )->select('gitman_deploy', array(
'xstatus' => GitWebhook::XSTATUS_ENABLE,
));
$deployIds = array();
foreach ($deploys as $deploy)
{
$deployIds[] = $deploy['id'];
}
if (empty($repositoryIds)) $repositoryIds = [-1];
if (empty($deployIds)) $deployIds = [-1];
$nostarts = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_NO,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('nostarts', $nostarts);
$executings = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_START,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('executings', $executings);
$ends = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_END,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('ends', $ends);
$faileds = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_FAILED,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('faileds', $faileds);
$ignores = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_IGNORE,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('ignores', $ignores);
$invalids = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_INVALID,
'repository_id' => array( $repositoryIds ),
'deploy_id' => array( $deployIds ),
), '*', 'created_at DESC', 20, true);
G::$tpl->assign('invalids', $invalids);
G::$tpl->assign('repositorys', Arrays::hashmap($repositorys, 'id') );
G::$tpl->assign('deploys', Arrays::hashmap($deploys, 'id') );
G::$tpl->display('adminer/dashboard.php');
}
function app_repository_list(){
G::$tpl->assign('error', '');
$repositorys = Sql::assistant( G::$ds )->select('gitman_repository', array());
G::$tpl->assign('rows', $repositorys);
G::$tpl->display('adminer/repository/list.php');
}
function app_repository_new(){
G::$tpl->assign('error', '');
G::$tpl->assign('repository', array());
G::$tpl->display('adminer/repository/edit.php');
}
function app_repository_edit(){
G::$tpl->assign('error', '');
$id = G::val($_REQUEST, 'id', 0);
if ($id)
{
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $id,
));
if (!empty($repository))
{
G::$tpl->assign('repository', $repository);
$deploys = Sql::assistant( G::$ds )->select('gitman_deploy', array(
'repository_id' => $repository['id']
));
G::$tpl->assign('deploys', $deploys);
return G::$tpl->display('adminer/repository/edit.php');
}
}
G::diestr("无效id: " . $id);
}
function app_repository_save(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
$repository = (array) G::val($_REQUEST, 'repository', array());
$repository['created_at'] = time();
$rules = array(
'name' => array(
array('not_empty', '名称不能为空'),
),
'url' => array(
array('not_empty', 'url不能为空'),
array('is_url', 'url格式不正确'),
),
'platform' => array(
array('not_null', 'platform不能为空'),
array('is_int', 'platform必须是整数'),
),
);
if (empty($repository['id']))
{
// do add
if (Form::assert_arr($repository, $rules, $failed))
{
Sql::assistant( G::$ds )->insert('gitman_repository', $repository);
G::redirect(adminer_url('repository.list'));
}
else
{
$error = current($failed);
}
}
else
{
// do edit
if (Form::assert_arr($repository, $rules, $failed))
{
Sql::assistant( G::$ds )->update('gitman_repository', $repository, array(
'id' => $repository['id'],
));
G::redirect(adminer_url('repository.list'));
}
else
{
$error = current($failed);
}
}
G::$tpl->assign('repository', $repository);
G::$tpl->assign('error', $error);
G::$tpl->display('adminer/repository/edit.php');
}
function app_repository_deploy_new(){
G::$tpl->assign('error', '');
$repository_id = G::val($_REQUEST, 'repository_id', 0);
if ($repository_id)
{
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $repository_id,
));
G::$tpl->assign('repository', $repository);
G::$tpl->assign('deploy', array());
return G::$tpl->display('adminer/repository/deploy/edit.php');
}
G::diestr("无效repository_id: " . $repository_id);
}
function app_repository_deploy_edit(){
G::$tpl->assign('error', '');
$id = G::val($_REQUEST, 'id', 0);
if ($id)
{
$deploy = Sql::assistant( G::$ds )->select_row('gitman_deploy', array(
'id' => $id,
));
if (!empty($deploy))
{
G::$tpl->assign('deploy', $deploy);
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $deploy['repository_id']
));
G::$tpl->assign('repository', $repository);
$hookrecords = array('total'=>0,'rows'=>array());
if (GitWebhook::REPO_PLATFORM_SELF == $repository['platform']){
$hookrecords = Sql::assistant( G::$ds )->select('gitman_hookrecord', array(
'repository_id' => $deploy['repository_id'],
'deploy_id' => $deploy['id'],
), '*', 'created_at DESC', 20, true);
}
G::$tpl->assign('hookrecords', $hookrecords);
return G::$tpl->display('adminer/repository/deploy/edit.php');
}
}
G::diestr("无效id: " . $id);
}
function app_repository_deploy_save(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
$deploy = (array) G::val($_REQUEST, 'deploy', array());
$deploy['created_at'] = time();
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $deploy['repository_id']
));
if (empty($repository))
{
G::diestr("无效repository_id: " . $deploy['repository_id']);
}
$rules = array(
'name' => array(
array('not_empty', '名称不能为空'),
),
'webhook_branch_ref' => array(
array('not_empty', 'webhook_branch_ref 不能为空'),
),
'branch_origin' => array(
array('not_empty', 'branch_origin 不能为空'),
),
'code_dir' => array(
array('not_empty', 'code_dir 不能为空'),
),
'mode' => array(
array('not_null', 'mode 不能为空'),
array('is_int', 'mode 必须是整数'),
),
'xstatus' => array(
array('not_null', 'xstatus 不能为空'),
array('is_int', 'xstatus 必须是整数'),
),
);
if (empty($deploy['id']))
{
// do add
if (Form::assert_arr($deploy, $rules, $failed))
{
Sql::assistant( G::$ds )->insert('gitman_deploy', $deploy);
G::redirect(adminer_url('repository.edit',array('id' => $deploy['repository_id'])));
}
else
{
$error = current($failed);
}
}
else
{
// do edit
if (Form::assert_arr($deploy, $rules, $failed))
{
Sql::assistant( G::$ds )->update('gitman_deploy', $deploy, array(
'id' => $deploy['id'],
));
G::redirect(adminer_url('repository.edit',array('id' => $deploy['repository_id'])));
}
else
{
$error = current($failed);
}
}
G::$tpl->assign('deploy', $deploy);
G::$tpl->assign('repository', $repository);
G::$tpl->assign('error', $error);
G::$tpl->display('adminer/repository/edit.php');
}
function app_repository_hookrecord_self_new(){
G::$tpl->assign('error', '');
$repository_id = G::val($_REQUEST, 'repository_id', 0);
$deploy_id = G::val($_REQUEST, 'deploy_id', 0);
$deploy = Sql::assistant( G::$ds )->select_row('gitman_deploy', array(
'repository_id' => $repository_id,
'id' => $deploy_id,
'xstatus' => GitWebhook::XSTATUS_ENABLE,
));
if (!empty($deploy))
{
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $repository_id,
));
G::$tpl->assign('repository', $repository);
G::$tpl->assign('deploy', $deploy);
G::$tpl->assign('hookrecord', array());
return G::$tpl->display('adminer/repository/hookrecord/self/edit.php');
}
G::diestr("无效参数!");
}
function app_repository_hookrecord_self_save(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
$hookrecord = (array) G::val($_REQUEST, 'hookrecord', array());
if (empty($hookrecord['deploy_id']))
{
G::diestr("无效deploy_id");
}
$deploy = Sql::assistant( G::$ds )->select_row('gitman_deploy', array(
'id' => $hookrecord['deploy_id']
));
if (empty($deploy))
{
G::diestr("无效deploy_id: " . $hookrecord['deploy_id']);
}
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $hookrecord['repository_id'],
));
if (empty($repository))
{
G::diestr("无效repository_id: " . $hookrecord['repository_id']);
}
$rules = array(
'commit_id' => array(
array('not_empty', 'commit_id不能为空'),
),
'commit_author' => array(
array('not_empty', 'commit_author 不能为空'),
),
'commit_msg' => array(
array('not_empty', 'commit_msg 不能为空'),
),
'commit_date' => array(
array('not_empty', 'commit_date 不能为空'),
array('is_datetime', 'commit_date 必须是 datetime 格式'),
),
);
if (empty($hookrecord['id']))
{
// do add
if (Form::assert_arr($hookrecord, $rules, $failed))
{
$git_data = json_encode(array(
'commits' => array(
array(
'id' => $hookrecord['commit_id'],
'author' => $hookrecord['commit_author'],
'message' => $hookrecord['commit_msg'],
'timestamp' => strtotime($hookrecord['commit_date']),
),
),
));
$hhrow = array(
'created_at' => time(),
'deploy_id' => $hookrecord['deploy_id'],
'repository_id' => $hookrecord['repository_id'],
'do_status' => GitWebhook::DO_STATUS_NO,
'mode' => $deploy['mode'],
'do_at' => 0,
'do_msg' => 'push by self',
'commits_info' => $git_data,
'webhook_type' => GitWebhook::WEBHOOK_TYPE_PUSH,
'webhook_name' => 'push_hooks',
);
Sql::assistant( G::$ds )->insert('gitman_hookrecord', $hhrow);
G::redirect(adminer_url('repository.deploy.edit',array('id' => $hookrecord['deploy_id'])));
}
else
{
$error = current($failed);
}
}
G::$tpl->assign('deploy', $deploy);
G::$tpl->assign('repository', $repository);
G::$tpl->assign('hookrecord', $hookrecord);
G::$tpl->assign('error', $error);
G::$tpl->display('adminer/repository/hookrecord/self/edit.php');
}
// #### remote call api ####
function app_remote_dealone(){
$deploy_ids = G::val($_REQUEST, 'deploy_ids', '');
$deploy_ids = G::normalize($deploy_ids, '|');
$rs = array(
'code' => 0,
'data' => array(),
);
try {
if (empty($deploy_ids)) throw new Exception('参数 deploy_ids 无效!');
$record = Sql::assistant( G::$ds )->select_row('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_NO,
'mode' => GitWebhook::DEPLOY_MODE_REMOTE,
'deploy_id' => array( $deploy_ids ),
), '*', 'created_at DESC');
if (!empty($record)) {
$deploy = Sql::assistant( G::$ds )->select_row('gitman_deploy', array(
'id' => $record['deploy_id'],
));
if (empty($deploy)) {
remote_hookrecord_invalidHandler($record, '无效 deploy: ' . $record['deploy_id']);
}
if ($deploy['xstatus'] != GitWebhook::XSTATUS_ENABLE) {
remote_hookrecord_invalidHandler($record, 'deploy 被禁用: ' . $record['deploy_id']);
}
$repository = Sql::assistant( G::$ds )->select_row('gitman_repository', array(
'id' => $record['repository_id'],
));
if (empty($repository)) {
remote_hookrecord_invalidHandler($record, '无效 repository: ' . $record['repository_id']);
}
// 聚合出数据来返还给客户端
if (empty($deploy['code_dir']))
{
remote_hookrecord_doStatusHandler($record['id'], GitWebhook::DO_STATUS_FAILED, "deploy:{$record['deploy_id']}:code_dir is null", true);
}
if (empty($deploy['branch_origin']))
{
remote_hookrecord_doStatusHandler($record['id'], GitWebhook::DO_STATUS_FAILED, "deploy:{$record['deploy_id']}:branch_origin is null", true);
}
$rs['data'] = array(
'record_id' => $record['id'],
'record_created_at' => $record['created_at'],
'deploy_id' => $deploy['id'],
'deploy_name' => $deploy['name'],
'branch_origin' => $deploy['branch_origin'],
'code_dir' => $deploy['code_dir'],
'extra_commands' => $deploy['extra_commands'],
'request_time' => $_SERVER['REQUEST_TIME'],
);
// 是否 将record状态标注成 已下发(执行中)
$upstatus = G::val($_REQUEST, 'upstatus', 1);
if ($upstatus == 1) {
remote_hookrecord_doStatusHandler($record['id'], GitWebhook::DO_STATUS_START, 'start ..', false);
}
}
}
catch(Exception $ex){
$rs = array(
'code' => 1,
'msg' => $ex->getMessage(),
);
}
G::diestr(json_encode($rs));
}
function app_remote_report(){
// r客户端 执行完成之后上报其执行结果
if (!G::is_post()){
G::diestr('http method must post!');
}
$record_id = G::val($_POST, 'record_id', 0);
$do_status = G::val($_POST, 'do_status', 0);
$do_msg = G::val($_POST, 'do_msg', '');
$rs = array(
'code' => 0,
'data' => array(),
);
try {
$record = Sql::assistant( G::$ds )->select_row('gitman_hookrecord', array('id' => $record_id));
if (empty($record)) throw new Exception('参数 record_id 无效!');
// 将上报过来的数据更新到记录中
remote_hookrecord_doStatusHandler($record['id'], $do_status, $do_msg, false);
// 对其之前未执行的 hookrecod 做忽略处理
Sql::assistant( G::$ds )->update('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_IGNORE,
'do_at' => time(),
'do_msg' => "IGNORE by {$record['id']}/" . SqlHelper::timestamp($record['created_at']),
), array(
'do_status' => GitWebhook::DO_STATUS_NO,
'deploy_id' => $record['deploy_id'],
'repository_id' => $record['repository_id'],
// 不包括自身的
'id' => array($record['id'], '!='),
// 创建时间小于当前记录的
'created_at' => array($record['created_at'], '<='),
));
}
catch(Exception $ex){
$rs = array(
'code' => 1,
'msg' => $ex->getMessage(),
);
}
G::diestr(json_encode($rs));
}
function remote_hookrecord_invalidHandler(array $record, $errorMsg='invalid'){
// 将此分支对应的这一批未开始的记录都设置成无效
Sql::assistant( G::$ds )->update('gitman_hookrecord', array(
'do_status' => GitWebhook::DO_STATUS_INVALID,
'do_at' => time(),
'do_msg' => $errorMsg,
), array(
'do_status' => GitWebhook::DO_STATUS_NO,
'deploy_id' => $record['deploy_id'],
'repository_id' => $record['repository_id'],
));
throw new Exception("record: {$record['id']} invalid {$errorMsg}");
}
function remote_hookrecord_doStatusHandler($id, $do_status, $do_msg, $haderr=false){
Sql::assistant( G::$ds )->update('gitman_hookrecord', array(
'do_status' => $do_status,
'do_at' => time(),
'do_msg' => $do_msg,
), array(
'id' => $id,
));
if ($haderr) {
throw new Exception("record: {$id} invalid {$do_msg}");
}
}
PHP
1
https://gitee.com/lianzh/gitman-web.git
git@gitee.com:lianzh/gitman-web.git
lianzh
gitman-web
gitman-web
master

搜索帮助