Subversion-Projekte lars-tiefland.webanos.zeldi.de

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
4 lars 1
<?php
2
 
3
    namespace App\Http\Controllers;
4
 
5
    use Illuminate\Http\Request;
6
    use Illuminate\Support\Facades\DB;
7
    use Illuminate\View\View;
8
 
9
    class ToolboxController extends Controller
10
    {
11
        private string $xmlDir;
12
 
13
        public function create(): View
14
        {
15
            return view( "toolbox/index" );
16
        }
17
 
18
        public function updateShopVersion( Request $request ): void
19
        {
20
 
21
            $version = $request->version;
22
            $shop = $request->shop;
23
            $verz = $request->verz;
24
            $server = $request->serverName;
25
            $srcDir = "/usr/share/php7/webanOS/" . $version;
26
            //trigger_error( $srcDir );
27
            $dstDir = "/var/www/vhosts/" . $shop . "/" . $verz;
28
            $cmd1 = "sudo ln -sfn " . $srcDir . " " . $dstDir . "/source";
29
            $cmd2 = "sudo ln -s " . $dstDir . "/source/*.php " . $dstDir;
30
            $cmd3 = "sudo ln -s " . $dstDir . "/source/preisagentur/*.php " . $dstDir . "/preisagentur";
31
 
32
            if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" )
33
            {
34
                if ( $server )
35
                {
36
                    $dom = "webanos." . $server;
37
                    $sql = "SELECT
38
                            dok_domain
39
                        FROM
40
                            webs
41
                        WHERE
42
                            domain='" . $server . "'
43
                    ";
44
                    $res = DB::connection( 'cms' )->select( $sql );
45
                    $row = $res[0];
46
                    if ( $row->dok_domain )
47
                    {
48
                        $dom = $row->dok_domain;
49
                    }
50
                    $cmd1 = "ssh -p910 www-data@" . $dom . " " . $cmd1;
51
                    $cmd2 = "ssh -p910 www-data@" . $dom . " " . $cmd2;
52
                    $cmd3 = "ssh -p910 www-data@" . $dom . " " . $cmd3;
53
                }
54
            }
55
            exec( $cmd1, $out1, $ret1 );
56
            if ( $ret1 == 0 )
57
            {
58
                exec( $cmd2, $out2, $ret2 );
59
                exec( $cmd3, $out3, $ret3 );
60
                echo "Shop-Version wurde erfolgreich umgestellt!";
61
 
62
 
63
                if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" )
64
                {
65
                    $path = array(
66
                        "/var/www/vhosts/" . $shop . "/dev/cache/default",
67
                        "/var/www/vhosts/" . $shop . "/dev/cache/asset_compile",
68
                        "/var/www/vhosts/" . $shop . "/dev/templates_c/default",
69
                        "/var/www/vhosts/" . $shop . "/dev/templates_c/module",
70
                        "/var/www/vhosts/" . $shop . "/dev/templates_c/reiter",
71
                    );
72
 
73
                    foreach ( $path as $p )
74
                    {
75
                        $files = glob( $p . '/*' );
76
                        //print_r($files);
77
                        if ( !$files )
78
                        {
79
                            continue;
80
                        }
81
                        foreach ( $files as $file )
82
                        {
83
                            if ( is_file( $file ) )
84
                            {
85
                                unlink( $file );
86
                            }
87
                        }
88
                    }
89
                }
90
            }
91
        }
92
 
93
        public function readSVNLog( Request $request ): void
94
        {
95
            $version = $request->version;
96
            $xmlDir = "/tmp/" . env( 'shop' ) . "/webanos/svn/";
97
            $version = str_replace( "tags/", "", $version );
98
            $xmlFile = $xmlDir . $version . ".xml";
99
            $logMessage = $this->readSvnXmlFile( $xmlFile );
100
            echo $logMessage;
101
        }
102
 
103
        public function changeShopVersion(): View
104
        {
105
            $site = env( 'shop' );
106
            $site_full = "";
107
            $webs = array();
108
            $servers = array();
109
            set_time_limit( 0 );
110
            $versions = $this->getVersions();
111
 
112
            \View::share( "versions", $versions );
113
            unset( $out );
114
 
115
            $this->xmlDir = "/tmp/" . $site . "/webanos/svn/";
116
            @mkdir( $this->xmlDir, 0755, true );
117
 
118
            $sshPorts = array();
119
            $dokDomains = array();
120
            $shops = array();
121
            if ( $_SERVER["HTTP_HOST"] == "faltradxxs.lars-tiefland.de" )
122
            {
123
                $sql = "SELECT
124
                        domain,
125
                        dok_domain,
126
                        ssh_port
127
                    FROM
128
                        webs w
129
                    JOIN
130
                        web_properties wp
131
                    ON
132
                        wp.web_id=w.id
133
                    WHERE
134
                        wp.property_id=804
135
                    AND
136
                        domain!='weban.de'
137
                    ORDER BY
138
                        domain
139
                ";
140
                $rows = DB::connection( 'cms' )->select( $sql );
141
                foreach ( $rows as $row )
142
                {
143
                    $dokDomains[] = $row->dok_domain;
144
                    $servers[] = $row->domain;
145
                    $sshPorts[$row->domain] = $row->ssh_port;
146
                }
147
                foreach ( $servers as $i => $server )
148
                {
149
                    //trigger_error( $server );
150
 
151
                    unset( $out );
152
                    $port = $sshPorts[$server];
153
                    $dom = "webanos." . $server;
154
                    if ( $dokDomains[$i] )
155
                    {
156
                        $dom = $dokDomains[$i];
157
                    }
158
                    if ( $port > 22 )
159
                    {
160
                        $dom .= " -p" . $port;
161
                    }
162
                    $cmd = "ssh www-data@" . $dom . " sudo find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";
163
                    /*if ( $site_full != $site )
164
                    {
165
                        $cmd = "find -L /var/www/vhosts/" . $server . " -maxdepth 3 -name source";
166
                    }*/
167
                    exec( $cmd, $out, $ret );
168
                    if ( $ret )
169
                    {
170
                        continue;
171
                        //trigger_error( $dom );
172
                    }
173
                    sort( $out );
174
                    //trigger_error( var_export( $ret, true ) );
175
                    foreach ( $out as $id => $line )
176
                    {
177
                        $ex = explode( "/", $line );
178
                        $ex2 = $ex;
179
                        unset( $ex2[count( $ex ) - 1] );
180
                        $sLine = implode( "/", $ex2 );
181
                        $cmd = "ssh www-data@" . $dom . " file --mime-type " . $sLine . "|grep symlink -v";
182
                        if ( $site != $site_full )
183
                        {
184
                            //$cmd = "file --mime-type " . $sLine . "|grep symlink -v";
185
                        }
186
                        exec( $cmd, $out2, $ret2 );
187
                        unset( $out2 );
188
                        if ( $ret2 == 1 )
189
                        {
190
                            continue;
191
                        }
192
                        $name = $ex[4];
193
                        $dir = $ex[5];
194
                        $cmd2 = "ssh www-data@" . $dom . " readlink -n " . $line;
195
                        if ( $site_full != $site )
196
                        {
197
                            //$cmd2 = "readlink -n " . $line;
198
                        }
199
                        exec( $cmd2, $out2, $ret2 );
200
                        $link = $out2[0];
201
                        $version = trim( $link, "/" );
202
                        $ex = explode( "/", $version );
203
                        //trigger_error( count( $ex ) );
204
                        //trigger_error( $link );
205
                        $shops[$name][$dir] = $this->getShopVer( $link, $ex, $server );
206
                        unset( $out2 );
207
                    }
208
                }
209
            }
210
            else
211
            {
212
                $cmd = "sudo find -L /var/www/vhosts/" . $site . " -maxdepth 3 -name source";
213
                exec( $cmd, $out, $ret );
214
                sort( $out );
215
                foreach ( $out as $id => $line )
216
                {
217
                    $ex = explode( "/", $line );
218
                    $ex2 = $ex;
219
                    unset( $ex2[count( $ex ) - 1] );
220
                    $sLine = implode( "/", $ex2 );
221
                    if ( @is_link( $sLine ) && $site == $site_full )
222
                    {
223
                        continue;
224
                    }
225
                    $name = $ex[4];
226
                    $dir = $ex[5];
227
                    exec( "readlink " . $line, $ret );
228
                    $link = $ret[0];
229
                    unset( $ret );
230
                    $version = trim( $link, "/" );
231
                    $ex = explode( "/", $version );
232
                    $shops[$name][$dir] = $this->getShopVer( $link, $ex );
233
                }
234
            }
235
            ksort( $shops );
236
            \View::share( "shops", $shops );
237
            \View::share( "file", "common/changeShopVersion.tpl" );
238
 
239
            return view( "toolbox/changeShopVersion" );
240
        }
241
 
242
        private function getVersions(): array
243
        {
244
            $site = env( 'shop' );
245
            $versions = array();
246
            $path = "/usr/share/php7/webanOS/";
247
            $cmd = "ls " . $path . "tags/";
248
            exec( $cmd, $out, $ret );
249
            $this->xmlDir = "/tmp/" . $site . "/webanos/svn/";
250
            @mkdir( $this->xmlDir, 0755, true );
251
            foreach ( $out as $version )
252
            {
253
                list( $datum, $zeit ) = explode( "_", $version );
254
                if ( strlen( $zeit ) == 2 )
255
                {
256
                    list( $datum, $zeit ) = explode( "-", $version );
257
                    $datum = str_replace( "_", "-", $datum );
258
                    $zeit = str_replace( "_", ":", $zeit );
259
                }
260
                else
261
                {
262
                    $zeit = str_replace( "-", ":", $zeit );
263
                }
264
                $datStr = $datum . " " . $zeit;
265
                $name = strftime( "%x %H:%M", strtotime( $datStr ) );
266
                $versions["tags/" . $version] = $name;
267
                $xmlFile = $this->xmlDir . $version . ".xml";
268
                if ( !file_exists( $xmlFile ) )
269
                {
270
                    $cmd = "svn log --xml --stop-on-copy " . $path . "tags/" . $version . " > " . $xmlFile;
271
                    exec( $cmd, $svnOut, $ret );
272
                    unset( $svnOut );
273
                }
274
            }
275
            $versions["trunk"] = "trunk";
276
            $xmlFile = $this->xmlDir . "trunk.xml";
277
            $cmd = "svn log --xml " . $path . "/trunk/ -rCOMMITTED > " . $xmlFile;
278
            exec( $cmd, $svnOut, $ret );
279
            unset( $svnOut );
280
            return $versions;
281
        }
282
 
283
        private function getShopVer( $link, $ex, $server = "localhost" ): array
284
        {
285
            if ( $ex[count( $ex ) - 1] == "trunk" )
286
            {
287
                $version = "trunk";
288
                $xmlFile = $this->xmlDir . "trunk.xml";
289
            }
290
            else
291
            {
292
                $version = $ex[4] . "/" . $ex[5];
293
                $xmlFile = $this->xmlDir . $ex[5] . ".xml";
294
            }
295
            $logMessage = $this->readSvnXmlFile( $xmlFile );
296
            return array(
297
                "version"    => $version,
298
                "server"     => $server,
299
                "logmessage" => $logMessage,
300
            );
301
        }
302
 
303
        private function readSvnXmlFile( $xmlFile ): string
304
        {
305
            $logMessage = "";
306
            if ( file_exists( $xmlFile ) )
307
            {
308
                $cfg = json_decode( json_encode( simplexml_load_file( $xmlFile ) ), true );
309
                $logMessage = $cfg["logentry"]["msg"];
310
            }
311
            return nl2br( $logMessage );
312
        }
313
 
314
 
315
    }