Ver Fonte

Added part of WMS implemenation

Mariusz Muszyński há 10 anos atrás
pai
commit
0d0df426ae

+ 3 - 0
SE/bash_sync_perms.php

@@ -451,6 +451,9 @@ class SyncPerms {
 		}
 
 		self::sendNofity();
+
+		Lib::loadClass('Router');
+		Router::getRoute('UrlAction_WmsGenerate')->doGenerate();
 	}
 
 	public static function sendNofity() {

+ 1 - 0
SE/se-lib/Route/Cron.php

@@ -166,6 +166,7 @@ class Route_Cron extends RouteBase {
 		$routeToReinstallList[] = 'FixProjectPath';
 		$routeToReinstallList[] = 'FixCrmProcesInitIdx';
 		$routeToReinstallList[] = 'Notify';
+		$routeToReinstallList[] = 'UrlAction_WmsGenerate';
 		foreach ($routeToReinstallList as $routeName) {
 			$route = Router::getRoute($routeName);
 			$route->reinstall();

+ 161 - 0
SE/se-lib/Route/UrlAction/WmsGenerate.php

@@ -0,0 +1,161 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('FoldersConfig');
+Lib::loadClass('FileUploader');
+
+class Route_UrlAction_WmsGenerate extends RouteBase {
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			throw new HttpException('Unauthorized', 401);
+		}
+	}
+
+	private function getDirectory($id) {
+		$folderConf = FoldersConfig::getAll('WMS_LAYERS_COLUMN');
+		$record=new stdClass;
+		$record->ID=$id;
+		$uploader = new FileUploader('WMS_LAYERS_COLUMN', $record);
+		$errMsg="";
+		if (!$uploader->setConfig($folderConf, $errMsg)) throw new HttpException("Błąd danych konfiguracyjnych" . '<br>' . "\n" . $errMsg, 404);
+		$uploader->findFolder();
+		return $uploader->getDestLocalPath(true);
+	}
+
+	public function defaultAction() {
+		SE_Layout::gora();
+		SE_Layout::menu();
+		$ID_WMS_LAYERS=V::get('ID_WMS_LAYERS',0,$_GET,'int');
+		if ($ID_WMS_LAYERS<=0) die ('ID ERROR');
+
+		try {
+			$destFolderPath = $this->getDirectory($ID_WMS_LAYERS);
+			$files=array();
+			foreach (glob($destFolderPath."/*.tif",GLOB_BRACE) as $node) {
+				if (is_file($node)) $files[]=basename($node);
+			}
+			if (count($files)==0) throw new Exception('Nie znaleziono żadnego pliku tif!');
+			if (count($files)>1) throw new Exception('Znaleziono zbyt dużo plików tif!');
+
+			$validateGeoTifJson=shell_exec("/opt/local/bin/gdalinfo -json ".$destFolderPath."/*".$files[0]." 2>/dev/null");
+			$validateGeoTif=json_decode($validateGeoTifJson);
+			if (!$validateGeoTif) throw new Exception('Znaleziony plik '.$files[0].' nie jest poprawnym plikiem tif!');
+			if (!$validateGeoTif->coordinateSystem->wkt) throw new Exception('Znaleziony plik '.$files[0].' nie jest poprawnym plikiem GeoTif!');
+
+			$sqlObj = new stdClass();
+			$sqlObj->ID = $ID_WMS_LAYERS;
+			$sqlObj->FILE_STATUS='TO_GENERATE';
+			$sqlObj->FILE_STATUS_INFO='Plik oczekuje na przetworzenie';
+			$sqlObj->FILE_NAME=$files[0];
+			$affected = DB::getDB()->UPDATE_OBJ('WMS_LAYERS', $sqlObj);
+			if ($affected) SE_Layout::alert('success','Oznaczono plik '.$files[0].' do przetworzenia.');
+			else SE_Layout::alert('warning','Plik '.$files[0].' został już wcześniej oznaczony do przetworzenia.');
+
+		} catch (Exception $e) {
+			SE_Layout::alert('danger',$e->getMessage());
+		}
+
+		?>
+<div class="container">
+	<a href="<?php echo $_SERVER['HTTP_REFERER']?>" class="btn btn-primary">Powrót</a>
+</div>
+		<?php
+		SE_Layout::dol();
+	}
+
+	private function mapGenerate() {
+	}
+
+	public function doGenerate() {
+
+		try {
+			$moduleActive=DB::getPDO()->fetchall("select count(*) as cnt from CRM_CONFIG where CONF_KEY='module_WMS' and CONF_VAL='on'");
+			if (!$moduleActive[0]['cnt']) throw new Exception("Module WMS disabled/not installed.");
+
+			$layers=DB::getPDO()->fetchall("select ID,FILE_NAME from WMS_LAYERS where FILE_STATUS='IN_PROGRESS'");
+			foreach ($layers as $layer) {
+				if (!file_exists('/tmp/generate_wms-'.$layer['ID'].'.lock')) {
+					unlink('/tmp/generate_wms-'.$layer['ID'].'.sh');
+					$destFolderPath = $this->getDirectory($layer['ID']);
+					if (file_exists($destFolderPath.'/.wms/.completed')) {
+						DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'GENERATED','FILE_STATUS_INFO'=>'Plik przetworzony poprawnie'));
+						unlink($destFolderPath.'/.wms/.completed');
+					} else {
+						DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'TO_GENERATE','FILE_STATUS_INFO'=>'Wystąpił błąd prztwarzania, ale nastąpi kolejna próba jego przetworzenia'));
+					}
+				}
+				if (count($layers)) $this->mapGenerate();
+			}
+
+			$bashSchema='
+rm -rf __PATH__/.wms
+mkdir __PATH__/.wms
+lock="/tmp/generate_wms-__ID__.lock"
+touch ${lock}
+
+
+/opt/local/bin/gdal_translate -of GTiff -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=9" -co "BIGTIFF=YES" __PATH__/__FILE__ __PATH__/.wms/__FILE__ && /opt/local/bin/gdaladdo -r average __PATH__/.wms/__FILE__ 2 4 8 16 32 64 128
+rm -f ${lock}
+touch __PATH__/.wms/.completed
+echo "Successfully completed."
+';
+			$search=array('__ID__','__PATH__','__FILE__');
+
+			$layers=DB::getPDO()->fetchall("select ID,FILE_NAME from WMS_LAYERS where FILE_STATUS='TO_GENERATE'");
+			foreach ($layers as $layer) {
+				$destFolderPath = $this->getDirectory($layer['ID']);
+				if(!is_file($destFolderPath.'/'.$layer['FILE_NAME'])) {
+					DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'ERROR','FILE_STATUS_INFO'=>'Wystąpił błąd pliku tif'));
+					throw new Exception("Błąd pliku: ".$layer['FILE_NAME']);
+				}
+				DB::getDB()->UPDATE_OBJ('WMS_LAYERS',(object) array('ID'=>$layer['ID'],'FILE_STATUS'=>'IN_PROGRESS','FILE_STATUS_INFO'=>'Plik w trakcie przetwarzania'));
+				$replace = array($layer['ID'],$destFolderPath,$layer['FILE_NAME']);
+				$bash = str_replace($search,$replace,$bashSchema);
+				file_put_contents('/tmp/generate_wms-'.$layer['ID'].'.sh',$bash);
+				shell_exec('nohup /bin/sh /tmp/generate_wms-'.$layer['ID'].'.sh > /tmp/generate_wms-'.$layer['ID'].'.log 2>&1 & echo $!');
+			}
+				
+		} catch (Exception $e) {
+			echo $e->getMessage()."\n";
+		}
+	}
+
+	public function doGenerateAction() {
+		$this->doGenerate();
+//		echo "OK\n";
+	}
+
+	public function reinstallAction() {
+		$this->reinstall();
+		die('OK');
+	}
+
+/*	public function reinstall() {
+		$sqlList = array();
+		//$sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `CRM_CONFIG`";
+		$sqlList['InstallTable'] = <<<SQL
+
+CREATE TABLE IF NOT EXISTS `CRM_CONFIG` (
+	`ID` int(11) NOT NULL AUTO_INCREMENT,
+	`CONF_KEY` varchar(64) NOT NULL,
+	`CONF_VAL` text NOT NULL,
+	PRIMARY KEY (`ID`),
+	UNIQUE KEY `CONF_KEY` (`CONF_KEY`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
+
+SQL;
+		$db = DB::getDB();
+		if ($db->has_errors()) {
+			throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
+		}
+		foreach ($sqlList as $sqlName => $sql) {
+			$res = $db->query($sql);
+			if ($db->has_errors()) {
+				throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
+			}
+		}
+	}
+*/
+
+}

+ 11 - 0
SE/superedit-INSTALL_SES_PROCESY_A.php

@@ -671,6 +671,7 @@ if($SERVER_VERSION=='10.11-ElCapitan') {
  $cmd[]['rsh']='which joe || port install joe';
  $cmd[]['rsh']='which gnutar || port install gnutar';
  $cmd[]['rsh']='ln -s /opt/local/bin/gnutar /usr/sbin/gnutar || echo PASSED';
+ $cmd[]['rsh']='port install mapserver';
 
 
 
@@ -1497,6 +1498,8 @@ $cmd[]['rsh']=' test -f /Library/Server/Web/Data/Sites/Default/SE/config/.cnf--d
   $cmd[]['rsh']=' touch /Library/Server/Web/Data/Sites/Default/PLIKI/'.$REMOTE_FOLDER_ROOT.'/PROBLEMS/index.html';
  $cmd[]['rsh']=' mkdir -p /Library/Server/Web/Data/Sites/Default/PLIKI/'.$REMOTE_FOLDER_ROOT.'/SKANY'; //@2014-01-18 - should be added
   $cmd[]['rsh']=' touch /Library/Server/Web/Data/Sites/Default/PLIKI/'.$REMOTE_FOLDER_ROOT.'/SKANY/index.html';
+ $cmd[]['rsh']=' mkdir -p /Library/Server/Web/Data/Sites/Default/PLIKI/'.$REMOTE_FOLDER_ROOT.'/WMS_LAYERS';
+  $cmd[]['rsh']=' touch /Library/Server/Web/Data/Sites/Default/PLIKI/'.$REMOTE_FOLDER_ROOT.'/WMS_LAYERS/index.html';
  $cmd[]['rsh']=' chmod 0755 /Library/Server/Web/Data/Sites/Default/PLIKI/';
  $cmd[]['rsh']=' chmod -R +a "_www allow writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,add_file,add_subdirectory,delete_child,list,search,file_inherit,directory_inherit" /Library/Server/Web/Data/Sites/Default/PLIKI';
 //! TODO te komendy nie działają @2013-10-15 - trzeba ruszyc recznie z GUI
@@ -1710,6 +1713,14 @@ mount_point=\"SKANY\"
 share_point=\"SKANY\"
 www_share_point=\"SKANY\"
 
+[WMS_LAYERS_COLUMN]
+mount_point=\"WMS_LAYERS\"
+share_point=\"//biuro.biall-net.pl/WMS_LAYERS\"
+www_share_point=\"WMS_LAYERS\"
+LOOKAT_FOLDER_LOOK_GLOB=\"<VARNAME>\"
+LOOKAT_FOLDER_VARNAME=\"ID\"
+DEST_FOLDER_FORMAT=\"<VARNAME1>\"
+DEST_FOLDER_VARNAME1=\"ID\"
 
 " > /Library/Server/Web/Data/Sites/Default/SE/config/.cnf--folders-'.$SERVER_ADDRESS.'.ini.php';
 $cmd[]['rsh']=' test -f /Library/Server/Web/Data/Sites/Default/SE/config/.cnf--folders-127.0.0.1.ini.php ||  ln /Library/Server/Web/Data/Sites/Default/SE/config/.cnf--folders-'.$SERVER_ADDRESS.'.ini.php /Library/Server/Web/Data/Sites/Default/SE/config/.cnf--folders-127.0.0.1.ini.php'; //aliasowanie do localhosta konfigow do testow systemu