Kaynağa Gözat

update and support WINDOWS right now

yeungalan 5 yıl önce
ebeveyn
işleme
673dd9f8b7

+ 4 - 1
SystemAOB/functions/timezone_v1/index.php

@@ -33,7 +33,7 @@
 				<select id="tz">
 				</select>
 			</div>
-			<div class="field">
+			<div id="ntpfield" class="field">
 				<label>Change NTP Server</label>
         		<div class="ts floating dropdown labeled icon button" style="padding: 0em;padding-left: 3em!important;padding-right: 0em!important;">
                     <i class="dropdown icon"></i>
@@ -90,6 +90,9 @@ function update(){
 		serverTZ = currTime["timezone"];
 		serverNTP = currTime["ntpserver"];
 		$("#ntp").val(serverNTP);
+		if(currTime["isWindows"]){
+			$("#ntpfield").html("");
+		}
 		updatelist();
 	});
 }

+ 52 - 19
SystemAOB/functions/timezone_v1/opr.php

@@ -1,4 +1,5 @@
 <?php
+
 // Read timezone DB
 	$timezone = [];
 	$file = fopen("data/timezone.csv","r");
@@ -10,65 +11,97 @@
 	fclose($file);
 // END
 
+//check the opration
 if($_GET["opr"] == "query"){
+	// if win
 	if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
-		$result["f_timezone"] = exec("tzutil /g");
+		$result["f_timezone"] = exec("tzutil /g"); //timezone name in English
+		//search timezone name and convert it to Unix timezone format
 		foreach ($timezone as $tz) {
 			if($tz[2] == $result["f_timezone"]){
 				$result["timezone"] = $tz[1];
 			}
 		}	
+		//full time by program
 		$result["fulltime"] = exec('getTime.exe');
+		//explode the y-m-d h:m:s out
 		$result["time"] =  explode(" ",exec('getTime.exe'))[1]." ".explode(" ",exec('getTime.exe'))[2];
+		//since windows had some problem on detecting the daylight, disable it
+		$result["existdaylight"] = false; //disable detecing the daylight. NOT supported
+		//it is windows
+		$result["isWindows"] = true;
+		
 	}else{
+		//get the timezone
 		$result["timezone"] = exec("cat /etc/timezone");
+		//get the ntp server
 		$result["ntpserver"] = explode("=",exec("sudo timedatectl show-timesync | grep 'ServerName='"))[1];
+		//convert it to readable name , aka Windows TZ format
 		foreach ($timezone as $tz) {
 			if($tz[1] == $result["timezone"]){
 				$result["f_timezone"] = $tz[2];
 			}
 		}
+		//get full time
 		$result["fulltime"] = exec('date +"%a %Y-%m-%d %T %Z %z"');
+		//get y-m-d h:m:s out
 		$result["time"] = exec('date +"%Y-%m-%d %T"');
+		
+		//check the Daylight saving
+		$nextDayLightSavingTZ = new DateTimeZone($result["timezone"]); //use timezone to fetch the data
+		print_r($nextDayLightSavingTZ);
+		//get next transitions
+		$nextDayLightSavingTZTransitions = $nextDayLightSavingTZ->getTransitions(time());
+		//if >1 then means had daylight saving in future
+		if(sizeOf($nextDayLightSavingTZTransitions) != 1){
+			//slice and get the first one out
+			$nextDayLightSavingTZTime = array_slice($nextDayLightSavingTZTransitions,1,1)[0];
+			//create the DateTime var by using $nextDayLightSavingTZTime
+			$nextDayLightSavingTZTimeDT = new DateTime($nextDayLightSavingTZTime["time"]);
+			//get Current time
+			$currentTimeDT = new DateTime($result["fulltime"]);
+			//Compare the difference
+			$interval = $currentTimeDT->diff($nextDayLightSavingTZTimeDT);
+			//format it to Y-m-d h:m:s, since the input is unix timestamp
+			$result["nextdaylight"] = $nextDayLightSavingTZTimeDT->format('Y-m-d H:m:s');
+			//calc the different
+			$result["nextdaylightremains"] = $interval->format('%a');
+			//dst means Day Light Saving Time
+			$result["nextdst"] = $nextDayLightSavingTZTime["isdst"];
+			$result["existdaylight"] = true;
+		}else{
+			//since <1, then no dst right now
+			$result["existdaylight"] = false;
+		}
+		//non windows, false
+		$result["isWindows"] = false;
 	}
-	$nextDayLightSavingTZ = new DateTimeZone($result["timezone"]);
-    $nextDayLightSavingTZTransitions = $nextDayLightSavingTZ->getTransitions(time());
-    if(sizeOf($nextDayLightSavingTZTransitions) != 1){
-        $nextDayLightSavingTZTime = array_slice($nextDayLightSavingTZTransitions,1,1)[0];
-        $nextDayLightSavingTZTimeDT = new DateTime($nextDayLightSavingTZTime["time"]);
-        $currentTimeDT = new DateTime($result["fulltime"]);
-        $interval = $currentTimeDT->diff($nextDayLightSavingTZTimeDT);
-        $result["nextdaylight"] = $nextDayLightSavingTZTimeDT->format('Y-m-d H:m:s');
-        $result["nextdaylightremains"] = $interval->format('%a');
-        //dst means Day Light Saving Time
-        $result["nextdst"] = $nextDayLightSavingTZTime["isdst"];
-        $result["existdaylight"] = true;
-    }else{
-        $result["existdaylight"] = false;
-    }
 	echo json_encode($result);
 }else if($_GET["opr"] == "alltimezone"){
 	echo json_encode($timezone);
 }else if($_GET["opr"] == "modify"){
 	if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
+		//convert it's timezone to Windows compitiable format
 		$tz_win = "";
 		foreach ($timezone as $tz) {
 			if($tz[1] == $_GET["tz"]){
 				$tz_win = $tz[2];
 			}
 		}
-		//for NTP
-		exec("w32TM /config /syncfromflags:manual /manualpeerlist:".$_GET["ntpserver"]);
 		
 		//for TZ
+		//change timezone
 		exec('tzutil /s "'.$tz_win.'"');
 		echo "Finish";
 	}else{
-	    //for NTP
+	    //for timesyncd.conf
+		//output it back to system
 		exec("sudo chmod -R 0777 /etc/systemd/timesyncd.conf");
 		$NTPFile = '#  This file is part of systemd.'.PHP_EOL.'#'.PHP_EOL.'#  systemd is free software; you can redistribute it and/or modify it'.PHP_EOL.'#  under the terms of the GNU Lesser General Public License as published by'.PHP_EOL.'#  the Free Software Foundation; either version 2.1 of the License, or'.PHP_EOL.'#  (at your option) any later version.'.PHP_EOL.'#'.PHP_EOL.'# Entries in this file show the compile time defaults.'.PHP_EOL.'# You can change settings by editing this file.'.PHP_EOL.'# Defaults can be restored by simply deleting this file.'.PHP_EOL.'#'.PHP_EOL.'# See timesyncd.conf(5) for details.'.PHP_EOL.'# Generated by ArOZ Online at '.date("Y-m-d H:i:s O T").PHP_EOL.PHP_EOL.'[Time]'.PHP_EOL;
 		$NTPFile = $NTPFile.'NTP='.$_GET["ntpserver"].PHP_EOL.'#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org'.PHP_EOL.'#RootDistanceMaxSec=5'.PHP_EOL.'#PollIntervalMinSec=32'.PHP_EOL.'#PollIntervalMaxSec=2048';
 		file_put_contents("/etc/systemd/timesyncd.conf",$NTPFile);
+		
+		//restart
 		exec("sudo timedatectl set-ntp true");
         //for TZ
 		exec("sudo timedatectl set-timezone '".$_GET["tz"]."'");