Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 1236 | Zur aktuellen Revision | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

<?php

    namespace App\Http\Controllers;

    use Illuminate\Foundation\Http\FormRequest;
    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( "admin/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 = "SELECT
                            dok_domain
                        FROM
                            webs
                        WHERE
                            domain='" . $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 = $_GET["version"];
            $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 = "SELECT
                        domain,
                        dok_domain,
                        ssh_port
                    FROM
                        webs w
                    JOIN
                        web_properties wp
                    ON
                        wp.web_id=w.id
                    WHERE
                        wp.property_id=804
                    AND
                        domain!='weban.de'
                    ORDER BY
                        domain
                ";
                $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( "admin/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 );
        }


    }