Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Support\Facades\DB;use Illuminate\View\View;class ToolboxController extends Controller{private string $xmlDir;public function create(): View{return view( "toolbox/index" );}public function updateShopVersion( Request $request ): void{$version = $request->version;$shop = $request->shop;$verz = $request->verz;$server = $request->serverName;$srcDir = "/usr/share/php7/webanOS/" . $version;//trigger_error( $srcDir );$dstDir = "/var/www/vhosts/" . $shop . "/" . $verz;$cmd1 = "sudo ln -sfn " . $srcDir . " " . $dstDir . "/source";$cmd2 = "sudo ln -s " . $dstDir . "/source/*.php " . $dstDir;$cmd3 = "sudo ln -s " . $dstDir . "/source/preisagentur/*.php " . $dstDir . "/preisagentur";if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" ){if ( $server ){$dom = "webanos." . $server;$sql = "SELECTdok_domainFROMwebsWHEREdomain='" . $server . "'";$res = DB::connection( 'cms' )->select( $sql );$row = $res[0];if ( $row->dok_domain ){$dom = $row->dok_domain;}$cmd1 = "ssh -p910 www-data@" . $dom . " " . $cmd1;$cmd2 = "ssh -p910 www-data@" . $dom . " " . $cmd2;$cmd3 = "ssh -p910 www-data@" . $dom . " " . $cmd3;}}exec( $cmd1, $out1, $ret1 );if ( $ret1 == 0 ){exec( $cmd2, $out2, $ret2 );exec( $cmd3, $out3, $ret3 );echo "Shop-Version wurde erfolgreich umgestellt!";if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" ){$path = array("/var/www/vhosts/" . $shop . "/dev/cache/default","/var/www/vhosts/" . $shop . "/dev/cache/asset_compile","/var/www/vhosts/" . $shop . "/dev/templates_c/default","/var/www/vhosts/" . $shop . "/dev/templates_c/module","/var/www/vhosts/" . $shop . "/dev/templates_c/reiter",);foreach ( $path as $p ){$files = glob( $p . '/*' );//print_r($files);if ( !$files ){continue;}foreach ( $files as $file ){if ( is_file( $file ) ){unlink( $file );}}}}}}public function readSVNLog( Request $request ): void{$version = $request->version;$xmlDir = "/tmp/" . env( 'shop' ) . "/webanos/svn/";$version = str_replace( "tags/", "", $version );$xmlFile = $xmlDir . $version . ".xml";$logMessage = $this->readSvnXmlFile( $xmlFile );echo $logMessage;}public function changeShopVersion(): View{$site = env( 'shop' );$site_full = "";$webs = array();$servers = array();set_time_limit( 0 );$versions = $this->getVersions();\View::share( "versions", $versions );unset( $out );$this->xmlDir = "/tmp/" . $site . "/webanos/svn/";@mkdir( $this->xmlDir, 0755, true );$sshPorts = array();$dokDomains = array();$shops = array();if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" ){$sql = "SELECTdomain,dok_domain,ssh_portFROMwebs wJOINweb_properties wpONwp.web_id=w.idWHEREwp.property_id=804ANDdomain!='weban.de'ORDER BYdomain";$rows = DB::connection( 'cms' )->select( $sql );foreach ( $rows as $row ){$dokDomains[] = $row->dok_domain;$servers[] = $row->domain;$sshPorts[$row->domain] = $row->ssh_port;}foreach ( $servers as $i => $server ){//trigger_error( $server );unset( $out );$port = $sshPorts[$server];$dom = "webanos." . $server;if ( $dokDomains[$i] ){$dom = $dokDomains[$i];}if ( $port > 22 ){$dom .= " -p" . $port;}$cmd = "ssh www-data@" . $dom . " sudo find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";/*if ( $site_full != $site ){$cmd = "find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";}*/exec( $cmd, $out, $ret );if ( $ret ){continue;//trigger_error( $dom );}sort( $out );//trigger_error( var_export( $ret, true ) );foreach ( $out as $id => $line ){$ex = explode( "/", $line );$ex2 = $ex;unset( $ex2[count( $ex ) - 1] );$sLine = implode( "/", $ex2 );$cmd = "ssh www-data@" . $dom . " file --mime-type " . $sLine . "|grep symlink -v";if ( $site != $site_full ){//$cmd = "file --mime-type " . $sLine . "|grep symlink -v";}exec( $cmd, $out2, $ret2 );unset( $out2 );if ( $ret2 == 1 ){continue;}$name = $ex[4];$dir = $ex[5];$cmd2 = "ssh www-data@" . $dom . " readlink -n " . $line;if ( $site_full != $site ){//$cmd2 = "readlink -n " . $line;}exec( $cmd2, $out2, $ret2 );$link = $out2[0];$version = trim( $link, "/" );$ex = explode( "/", $version );//trigger_error( count( $ex ) );//trigger_error( $link );$shops[$name][$dir] = $this->getShopVer( $link, $ex, $server );unset( $out2 );}}}else{$cmd = "sudo find -L /var/www/vhosts/" . $site . " -maxdepth 3 -name source";exec( $cmd, $out, $ret );sort( $out );foreach ( $out as $id => $line ){$ex = explode( "/", $line );$ex2 = $ex;unset( $ex2[count( $ex ) - 1] );$sLine = implode( "/", $ex2 );if ( @is_link( $sLine ) && $site == $site_full ){continue;}$name = $ex[4];$dir = $ex[5];exec( "readlink " . $line, $ret );$link = $ret[0];unset( $ret );$version = trim( $link, "/" );$ex = explode( "/", $version );$shops[$name][$dir] = $this->getShopVer( $link, $ex );}}ksort( $shops );\View::share( "shops", $shops );\View::share( "file", "common/changeShopVersion.tpl" );return view( "toolbox/changeShopVersion" );}private function getVersions(): array{$site = env( 'shop' );$versions = array();$path = "/usr/share/php7/webanOS/";$cmd = "ls " . $path . "tags/";exec( $cmd, $out, $ret );$this->xmlDir = "/tmp/" . $site . "/webanos/svn/";@mkdir( $this->xmlDir, 0755, true );foreach ( $out as $version ){list( $datum, $zeit ) = explode( "_", $version );if ( strlen( $zeit ) == 2 ){list( $datum, $zeit ) = explode( "-", $version );$datum = str_replace( "_", "-", $datum );$zeit = str_replace( "_", ":", $zeit );}else{$zeit = str_replace( "-", ":", $zeit );}$datStr = $datum . " " . $zeit;$name = strftime( "%x %H:%M", strtotime( $datStr ) );$versions["tags/" . $version] = $name;$xmlFile = $this->xmlDir . $version . ".xml";if ( !file_exists( $xmlFile ) ){$cmd = "svn log --xml --stop-on-copy " . $path . "tags/" . $version . " > " . $xmlFile;exec( $cmd, $svnOut, $ret );unset( $svnOut );}}$versions["trunk"] = "trunk";$xmlFile = $this->xmlDir . "trunk.xml";$cmd = "svn log --xml " . $path . "/trunk/ -rCOMMITTED > " . $xmlFile;exec( $cmd, $svnOut, $ret );unset( $svnOut );return $versions;}private function getShopVer( $link, $ex, $server = "localhost" ): array{if ( $ex[count( $ex ) - 1] == "trunk" ){$version = "trunk";$xmlFile = $this->xmlDir . "trunk.xml";}else{$version = $ex[4] . "/" . $ex[5];$xmlFile = $this->xmlDir . $ex[5] . ".xml";}$logMessage = $this->readSvnXmlFile( $xmlFile );return array("version" => $version,"server" => $server,"logmessage" => $logMessage,);}private function readSvnXmlFile( $xmlFile ): string{$logMessage = "";if ( file_exists( $xmlFile ) ){$cfg = json_decode( json_encode( simplexml_load_file( $xmlFile ) ), true );$logMessage = $cfg["logentry"]["msg"];}return nl2br( $logMessage );}}