Subversion-Projekte lars-tiefland.laravel_shop

Revision

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