Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 1199 | Revision 1226 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1117 lars 1
<?php
2
 
3
    namespace App\Http\Controllers;
4
 
1176 lars 5
    use Illuminate\Support\Facades\DB;
1193 lars 6
    use Illuminate\View\View;
1176 lars 7
 
1117 lars 8
    class ToolboxController extends Controller
9
    {
1188 lars 10
        private string $xmlDir;
11
 
1193 lars 12
        public function create(): View
1117 lars 13
        {
14
            return view( "admin/toolbox/index" );
15
        }
1122 lars 16
 
1193 lars 17
        public function changeShopVersion(): View
1122 lars 18
        {
1159 lars 19
            $site = env( 'shop' );
1158 lars 20
            $site_full = "";
21
            $webs = array();
22
            $servers = array();
23
            set_time_limit( 0 );
1198 lars 24
            $versions = $this->getVersions();
1158 lars 25
 
1164 lars 26
            \View::share( "versions", $versions );
1158 lars 27
            unset( $out );
28
 
1188 lars 29
            $this->xmlDir = "/tmp/" . $site . "/webanos/svn/";
30
            @mkdir( $this->xmlDir, 0755, true );
1158 lars 31
 
32
            $sshPorts = array();
33
            $dokDomains = array();
1165 lars 34
            $shops = array();
1175 lars 35
            if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" )
1158 lars 36
            {
37
                $sql = "SELECT
38
                        domain,
39
                        dok_domain,
40
                        ssh_port
41
                    FROM
42
                        webs w
43
                    JOIN
1174 lars 44
                        web_properties wp
1158 lars 45
                    ON
1173 lars 46
                        wp.web_id=w.id
1158 lars 47
                    WHERE
1173 lars 48
                        wp.property_id=804
1158 lars 49
                    AND
50
                        domain!='weban.de'
51
                    ORDER BY
52
                        domain
53
                ";
1159 lars 54
                $rows = DB::connection( 'cms' )->select( $sql );
55
                foreach ( $rows as $row )
1158 lars 56
                {
1177 lars 57
                    $dokDomains[] = $row->dok_domain;
1178 lars 58
                    $servers[] = $row->domain;
1177 lars 59
                    $sshPorts[ $row->domain ] = $row->ssh_port;
1158 lars 60
                }
61
                foreach ( $servers as $i => $server )
62
                {
63
                    //trigger_error( $server );
64
 
65
                    unset( $out );
66
                    $port = $sshPorts[ $server ];
67
                    $dom = "webanos." . $server;
68
                    if ( $dokDomains[ $i ] )
69
                    {
70
                        $dom = $dokDomains[ $i ];
71
                    }
1169 lars 72
                    if ( $port > 22 )
1158 lars 73
                    {
74
                        $dom .= " -p" . $port;
75
                    }
76
                    $cmd = "ssh www-data@" . $dom . " sudo find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";
1170 lars 77
                    /*if ( $site_full != $site )
1158 lars 78
                    {
79
                        $cmd = "find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";
1170 lars 80
                    }*/
1158 lars 81
                    exec( $cmd, $out, $ret );
82
                    if ( $ret )
83
                    {
1179 lars 84
                        continue;
85
                        //trigger_error( $dom );
1158 lars 86
                    }
87
                    sort( $out );
88
                    //trigger_error( var_export( $ret, true ) );
89
                    foreach ( $out as $id => $line )
90
                    {
91
                        $ex = explode( "/", $line );
92
                        $ex2 = $ex;
93
                        unset( $ex2[ count( $ex ) - 1 ] );
94
                        $sLine = implode( "/", $ex2 );
1184 lars 95
                        $cmd = "ssh www-data@" . $dom . " file --mime-type " . $sLine . "|grep symlink -v";
1158 lars 96
                        if ( $site != $site_full )
97
                        {
1180 lars 98
                            //$cmd = "file --mime-type " . $sLine . "|grep symlink -v";
1158 lars 99
                        }
100
                        exec( $cmd, $out2, $ret2 );
101
                        unset( $out2 );
102
                        if ( $ret2 == 1 )
103
                        {
104
                            continue;
105
                        }
106
                        $name = $ex[4];
107
                        $dir = $ex[5];
1186 lars 108
                        $cmd2 = "ssh www-data@" . $dom . " readlink -n " . $line;
1158 lars 109
                        if ( $site_full != $site )
110
                        {
1185 lars 111
                            //$cmd2 = "readlink -n " . $line;
1158 lars 112
                        }
113
                        exec( $cmd2, $out2, $ret2 );
114
                        $link = $out2[0];
115
                        $version = trim( $link, "/" );
116
                        $ex = explode( "/", $version );
1186 lars 117
                        //trigger_error( count( $ex ) );
118
                        //trigger_error( $link );
1158 lars 119
                        $shops[ $name ][ $dir ] = $this->getShopVer( $link, $ex, $server );
120
                        unset( $out2 );
121
                    }
122
                }
123
            }
124
            else
125
            {
126
                $cmd = "sudo find -L /var/www/vhosts/" . $site . " -maxdepth 3 -name source";
127
                exec( $cmd, $out, $ret );
128
                sort( $out );
129
                foreach ( $out as $id => $line )
130
                {
131
                    $ex = explode( "/", $line );
132
                    $ex2 = $ex;
133
                    unset( $ex2[ count( $ex ) - 1 ] );
134
                    $sLine = implode( "/", $ex2 );
135
                    if ( @is_link( $sLine ) && $site == $site_full )
136
                    {
137
                        continue;
138
                    }
139
                    $name = $ex[4];
140
                    $dir = $ex[5];
141
                    exec( "readlink " . $line, $ret );
142
                    $link = $ret[0];
143
                    unset( $ret );
144
                    $version = trim( $link, "/" );
145
                    $ex = explode( "/", $version );
146
                    $shops[ $name ][ $dir ] = $this->getShopVer( $link, $ex );
147
                }
148
            }
149
            ksort( $shops );
1159 lars 150
            \View::share( "shops", $shops );
151
            \View::share( "file", "common/changeShopVersion.tpl" );
1158 lars 152
 
1161 lars 153
            return view( "admin/toolbox/changeShopVersion" );
1122 lars 154
        }
1158 lars 155
 
1193 lars 156
        private function getVersions(): array
1158 lars 157
        {
1195 lars 158
            $site = env( 'shop' );
1158 lars 159
            $versions = array();
1193 lars 160
            $path = "/usr/share/php7/webanOS/";
1158 lars 161
            $cmd = "ls " . $path . "tags/";
162
            exec( $cmd, $out, $ret );
1188 lars 163
            $this->xmlDir = "/tmp/" . $site . "/webanos/svn/";
164
            @mkdir( $this->xmlDir, 0755, true );
1158 lars 165
            foreach ( $out as $version )
166
            {
167
                list( $datum, $zeit ) = explode( "_", $version );
168
                if ( strlen( $zeit ) == 2 )
169
                {
170
                    list( $datum, $zeit ) = explode( "-", $version );
171
                    $datum = str_replace( "_", "-", $datum );
172
                    $zeit = str_replace( "_", ":", $zeit );
173
                }
174
                else
175
                {
176
                    $zeit = str_replace( "-", ":", $zeit );
177
                }
178
                $datStr = $datum . " " . $zeit;
179
                $name = strftime( "%x %H:%M", strtotime( $datStr ) );
1198 lars 180
                $versions[ "tags/" . $version ] = $name;
181
                $xmlFile = $this->xmlDir . $version . ".xml";
1158 lars 182
                if ( !file_exists( $xmlFile ) )
183
                {
184
                    $cmd = "svn log --xml --stop-on-copy " . $path . "tags/" . $version . " > " . $xmlFile;
185
                    exec( $cmd, $svnOut, $ret );
186
                    unset( $svnOut );
187
                }
188
            }
1198 lars 189
            $versions["trunk"] = "trunk";
190
            $xmlFile = $this->xmlDir . "trunk.xml";
1158 lars 191
            $cmd = "svn log --xml " . $path . "/trunk/ -rCOMMITTED > " . $xmlFile;
192
            exec( $cmd, $svnOut, $ret );
193
            unset( $svnOut );
194
            return $versions;
195
        }
196
 
197
        private function getShopVer( $link, $ex, $server = "localhost" ): array
198
        {
199
            if ( $ex[ count( $ex ) - 1 ] == "trunk" )
200
            {
1198 lars 201
                $version = "trunk";
202
                $xmlFile = $this->xmlDir . "trunk.xml";
1158 lars 203
            }
204
            else
205
            {
1198 lars 206
                $version = $ex[4] . "/" . $ex[5];
207
                $xmlFile = $this->xmlDir . $ex[5] . ".xml";
1158 lars 208
            }
1187 lars 209
            $logMessage = $this->readSvnXmlFile( $xmlFile );
1158 lars 210
            return array(
211
                "version"    => $version,
212
                "server"     => $server,
213
                "logmessage" => $logMessage,
214
            );
215
        }
216
 
1187 lars 217
        private function readSvnXmlFile( $xmlFile ): string
218
        {
1189 lars 219
            $logMessage = "";
220
            if ( file_exists( $xmlFile ) )
1187 lars 221
            {
1189 lars 222
                $cfg = json_decode( json_encode( simplexml_load_file( $xmlFile ) ), true );
223
                $logMessage = $cfg["logentry"]["msg"];
1187 lars 224
            }
225
            return nl2br( $logMessage );
226
        }
227
 
228
 
1117 lars 229
    }