Subversion-Projekte lars-tiefland.laravel_shop

Revision

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