|  |  | @@ -1,10 +1,20 @@ | 
		
	
		
			
			|  |  |  | <?php | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 用于后台的api接口 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @version        $id:api.php 8:26 2022年11月20日 tianya $ | 
		
	
		
			
			|  |  |  | * @package        DedeBIZ.Administrator | 
		
	
		
			
			|  |  |  | * @copyright      Copyright (c) 2022 DedeBIZ.COM | 
		
	
		
			
			|  |  |  | * @license        https://www.dedebiz.com/license | 
		
	
		
			
			|  |  |  | * @link           https://www.dedebiz.com | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | define('AJAXLOGIN', TRUE); | 
		
	
		
			
			|  |  |  | define('DEDEADMIN', str_replace("\\", '/', dirname(__FILE__))); | 
		
	
		
			
			|  |  |  | require_once(DEDEADMIN.'/../system/common.inc.php'); | 
		
	
		
			
			|  |  |  | require_once(DEDEINC.'/userlogin.class.php'); | 
		
	
		
			
			|  |  |  | require_once(DEDEADMIN . '/../system/common.inc.php'); | 
		
	
		
			
			|  |  |  | require_once(DEDEINC . '/userlogin.class.php'); | 
		
	
		
			
			|  |  |  | AjaxHead(); | 
		
	
		
			
			|  |  |  | $action = isset($action) && in_array($action, array('is_need_check_code','has_new_version','get_changed_files','update_backup','get_update_versions'))? $action  : ''; | 
		
	
		
			
			|  |  |  | helper('cache'); | 
		
	
		
			
			|  |  |  | $action = isset($action) && in_array($action, array('is_need_check_code', 'has_new_version', 'get_changed_files', 'update_backup', 'get_update_versions', 'update')) ? $action  : ''; | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 登录鉴权 | 
		
	
		
			
			|  |  |  | * | 
		
	
	
		
			
				|  |  | @@ -33,27 +43,27 @@ if ($action === 'is_need_check_code') { | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } else if ($action === 'has_new_version'){ | 
		
	
		
			
			|  |  |  | require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | } else if ($action === 'has_new_version') { | 
		
	
		
			
			|  |  |  | require_once(DEDEINC . '/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | checkLogin(); | 
		
	
		
			
			|  |  |  | //是否存在更新版本 | 
		
	
		
			
			|  |  |  | $offUrl = DEDEBIZURL."/version?version={$cfg_version_detail}&formurl={$nurl}&phpver={$phpv}&os={$sp_os}&mysqlver={$mysql_ver}{$add_query}&json=1"; | 
		
	
		
			
			|  |  |  | $offUrl = DEDEBIZURL . "/version?version={$cfg_version_detail}&formurl={$nurl}&phpver={$phpv}&os={$sp_os}&mysqlver={$mysql_ver}{$add_query}&json=1"; | 
		
	
		
			
			|  |  |  | $dhd = new DedeHttpDown(); | 
		
	
		
			
			|  |  |  | $dhd->OpenUrl($offUrl); | 
		
	
		
			
			|  |  |  | $data = $dhd->GetHtml(); | 
		
	
		
			
			|  |  |  | echo $data; | 
		
	
		
			
			|  |  |  | } else if ($action === 'get_changed_files'){ | 
		
	
		
			
			|  |  |  | require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | } else if ($action === 'get_changed_files') { | 
		
	
		
			
			|  |  |  | require_once(DEDEINC . '/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | checkLogin(); | 
		
	
		
			
			|  |  |  | // 获取本地更改过的文件 | 
		
	
		
			
			|  |  |  | $hashUrl = DEDEBIZCDN.'/release/'.$cfg_version_detail.'.json'; | 
		
	
		
			
			|  |  |  | $hashUrl = DEDEBIZCDN . '/release/' . $cfg_version_detail . '.json'; | 
		
	
		
			
			|  |  |  | $dhd = new DedeHttpDown(); | 
		
	
		
			
			|  |  |  | $dhd->OpenUrl($hashUrl); | 
		
	
		
			
			|  |  |  | $data = $dhd->GetJSON(); | 
		
	
		
			
			|  |  |  | $changedFiles = array(); | 
		
	
		
			
			|  |  |  | foreach ($data as $file) { | 
		
	
		
			
			|  |  |  | $realFile = DEDEROOT. str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | if ( file_exists($realFile) && md5_file($realFile) !== $file->hash) { | 
		
	
		
			
			|  |  |  | $realFile = DEDEROOT . str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | if (file_exists($realFile) && md5_file($realFile) !== $file->hash) { | 
		
	
		
			
			|  |  |  | $changedFiles[] = $file; | 
		
	
		
			
			|  |  |  | continue; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -66,25 +76,25 @@ if ($action === 'is_need_check_code') { | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } else if($action === 'update_backup'){ | 
		
	
		
			
			|  |  |  | require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | } else if ($action === 'update_backup') { | 
		
	
		
			
			|  |  |  | require_once(DEDEINC . '/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | checkLogin(); | 
		
	
		
			
			|  |  |  | // 获取本地更改过的文件 | 
		
	
		
			
			|  |  |  | $hashUrl = DEDEBIZCDN.'/release/'.$cfg_version_detail.'.json'; | 
		
	
		
			
			|  |  |  | $hashUrl = DEDEBIZCDN . '/release/' . $cfg_version_detail . '.json'; | 
		
	
		
			
			|  |  |  | $dhd = new DedeHttpDown(); | 
		
	
		
			
			|  |  |  | $dhd->OpenUrl($hashUrl); | 
		
	
		
			
			|  |  |  | $data = $dhd->GetJSON(); | 
		
	
		
			
			|  |  |  | $changedFiles = array(); | 
		
	
		
			
			|  |  |  | $enkey = substr(md5(substr($cfg_cookie_encode, 0, 5)), 0, 10); | 
		
	
		
			
			|  |  |  | $backupPath = DEDEDATA."/backupfile_{$enkey}"; | 
		
	
		
			
			|  |  |  | $backupPath = DEDEDATA . "/backupfile_{$enkey}"; | 
		
	
		
			
			|  |  |  | RmRecurse($backupPath); | 
		
	
		
			
			|  |  |  | mkdir($backupPath); | 
		
	
		
			
			|  |  |  | foreach ($data as $file) { | 
		
	
		
			
			|  |  |  | $realFile = DEDEROOT. str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | if ( file_exists($realFile) && md5_file($realFile) !== $file->hash) { | 
		
	
		
			
			|  |  |  | $realFile = DEDEROOT . str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | if (file_exists($realFile) && md5_file($realFile) !== $file->hash) { | 
		
	
		
			
			|  |  |  | // 备份文件 | 
		
	
		
			
			|  |  |  | $dstFile = $backupPath.'/'.str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | @MkdirAll(dirname($dstFile),777); | 
		
	
		
			
			|  |  |  | $dstFile = $backupPath . '/' . str_replace("\\", '/', $file->filename); | 
		
	
		
			
			|  |  |  | @mkdir(dirname($dstFile), 0777, true); | 
		
	
		
			
			|  |  |  | copy($realFile, $dstFile); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -96,15 +106,85 @@ if ($action === 'is_need_check_code') { | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } else if($action === 'get_update_versions'){ | 
		
	
		
			
			|  |  |  | require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | } else if ($action === 'get_update_versions') { | 
		
	
		
			
			|  |  |  | require_once(DEDEINC . '/libraries/dedehttpdown.class.php'); | 
		
	
		
			
			|  |  |  | checkLogin(); | 
		
	
		
			
			|  |  |  | // 获取本地更改过的文件 | 
		
	
		
			
			|  |  |  | $offUrl = DEDEBIZURL."/versions?version={$cfg_version_detail}"; | 
		
	
		
			
			|  |  |  | //获取本地更改过的文件 | 
		
	
		
			
			|  |  |  | $offUrl = DEDEBIZURL . "/versions?version={$cfg_version_detail}"; | 
		
	
		
			
			|  |  |  | $dhd = new DedeHttpDown(); | 
		
	
		
			
			|  |  |  | $dhd->OpenUrl($offUrl); | 
		
	
		
			
			|  |  |  | $data = $dhd->GetHtml(); | 
		
	
		
			
			|  |  |  | $arr = json_decode($data); | 
		
	
		
			
			|  |  |  | SetCache('update', 'vers', $arr->result->Versions); | 
		
	
		
			
			|  |  |  | echo $data; | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } else if ($action === 'update') { | 
		
	
		
			
			|  |  |  | $row = GetCache('update', 'vers'); | 
		
	
		
			
			|  |  |  | if (count($row) === 0) { | 
		
	
		
			
			|  |  |  | echo json_encode(array( | 
		
	
		
			
			|  |  |  | "code" => -1, | 
		
	
		
			
			|  |  |  | "msg" => "请先获取版本更新记录", | 
		
	
		
			
			|  |  |  | "data" => null, | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | $enkey = substr(md5(substr($cfg_cookie_encode, 0, 5)), 0, 10); | 
		
	
		
			
			|  |  |  | $backupPath = DEDEDATA . "/updatefile_{$enkey}"; | 
		
	
		
			
			|  |  |  | mkdir($backupPath); | 
		
	
		
			
			|  |  |  | foreach ($row as $k => $ver) { | 
		
	
		
			
			|  |  |  | if ($ver->isdownload !== true) { | 
		
	
		
			
			|  |  |  | //TODO 从远程服务器下载 | 
		
	
		
			
			|  |  |  | $fileList = json_decode(file_get_contents(dirname(__FILE__) . '/../../../tools/patch-6.1.9/files.txt')); | 
		
	
		
			
			|  |  |  | $backupVerPath = $backupPath . '/' . $ver->ver; | 
		
	
		
			
			|  |  |  | RmRecurse($backupVerPath); | 
		
	
		
			
			|  |  |  | mkdir($backupVerPath); | 
		
	
		
			
			|  |  |  | foreach ($fileList as $f) { | 
		
	
		
			
			|  |  |  | if (!preg_match("/^\//", $f->filename)) { | 
		
	
		
			
			|  |  |  | //忽略src之外的目录 | 
		
	
		
			
			|  |  |  | continue; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | $fData = file_get_contents(dirname(__FILE__) . '/../../../tools/patch-6.1.9/src' . $f->filename); | 
		
	
		
			
			|  |  |  | $realFile = $backupVerPath . $f->filename; | 
		
	
		
			
			|  |  |  | @mkdir(dirname($realFile), 0777, true); | 
		
	
		
			
			|  |  |  | file_put_contents($realFile, $fData); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | $fData = file_get_contents(dirname(__FILE__) . '/../../../tools/patch-6.1.9/update.sql'); | 
		
	
		
			
			|  |  |  | $realFile = $backupVerPath . '/update.sql'; | 
		
	
		
			
			|  |  |  | file_put_contents($realFile, $fData); | 
		
	
		
			
			|  |  |  | $row[$k]->isdownload = true; | 
		
	
		
			
			|  |  |  | SetCache('update', 'vers', $row); | 
		
	
		
			
			|  |  |  | echo json_encode(array( | 
		
	
		
			
			|  |  |  | "code" => 0, | 
		
	
		
			
			|  |  |  | "msg" => "正在下载{$ver->ver}的版本更新文件", | 
		
	
		
			
			|  |  |  | "data" => array( | 
		
	
		
			
			|  |  |  | "finish"=>false, | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | foreach ($row as $k => $ver) { | 
		
	
		
			
			|  |  |  | if ($ver->ispatched !== true) { | 
		
	
		
			
			|  |  |  | //TODO 补丁应用 | 
		
	
		
			
			|  |  |  | $row[$k]->ispatched = true; | 
		
	
		
			
			|  |  |  | SetCache('update', 'vers', $row); | 
		
	
		
			
			|  |  |  | echo json_encode(array( | 
		
	
		
			
			|  |  |  | "code" => 0, | 
		
	
		
			
			|  |  |  | "msg" => "正在应用{$ver->ver}的版本补丁文件", | 
		
	
		
			
			|  |  |  | "data" => array( | 
		
	
		
			
			|  |  |  | "finish"=>false, | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | echo json_encode(array( | 
		
	
		
			
			|  |  |  | "code" => 0, | 
		
	
		
			
			|  |  |  | "msg" => "", | 
		
	
		
			
			|  |  |  | "data" => array( | 
		
	
		
			
			|  |  |  | "finish"=>true, | 
		
	
		
			
			|  |  |  | ), | 
		
	
		
			
			|  |  |  | )); | 
		
	
		
			
			|  |  |  | exit; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | ?> |