Subversion-Projekte lars-tiefland.laravel_shop

Revision

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