Passed
Pull Request — 1.11.x (#4656)
by Angel Fernando Quiroz
19:41 queued 08:27
created

ScriptHandler::generateDoctineProxies()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 10
c 1
b 0
f 0
dl 0
loc 21
rs 9.9332
cc 1
nc 1
nop 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Composer;
5
6
use Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand;
7
use Doctrine\ORM\Tools\Console\ConsoleRunner;
8
use Symfony\Component\Console\Input\ArrayInput;
9
use Symfony\Component\Console\Output\BufferedOutput;
10
use Symfony\Component\Filesystem\Filesystem;
11
12
/**
13
 * Class DumpTheme.
14
 */
15
class ScriptHandler
16
{
17
    /**
18
     * Dump files to the web/css folder.
19
     */
20
    public static function dumpCssFiles()
21
    {
22
        $fs = new Filesystem();
23
24
        $sysAssets = __DIR__.'/../../../../app/Resources/public/assets';
25
        $webAssets = __DIR__.'/../../../../web/assets';
26
        $fs->mirror($sysAssets, $webAssets, null, ['override' => true, 'delete' => true]);
27
28
        $sysCss = __DIR__.'/../../../../app/Resources/public/css';
29
        $webCss = __DIR__.'/../../../../web/css';
30
        $fs->mirror($sysCss, $webCss, null, ['override' => true]);
31
32
        if ($fs->exists(__DIR__.'/../../../../web/build')) {
33
            $fs->remove(__DIR__.'/../../../../web/build');
34
        }
35
36
        if ($fs->exists(__DIR__.'/../../../../app/cache/twig')) {
37
            $fs->remove(__DIR__.'/../../../../app/cache/twig');
38
        }
39
40
        if (function_exists('opcache_reset')) {
41
            opcache_reset();
42
        }
43
    }
44
45
    /**
46
     * Delete old Symfony folder before update (generates conflicts with composer)
47
     * This method also applies to 1.10 folders removed for 1.11.
48
     */
49
    public static function deleteOldFilesFrom19x()
50
    {
51
        $paths = self::getFoldersToDelete();
52
53
        foreach ($paths as $path) {
54
            if (is_dir($path) && is_writable($path)) {
55
                self::rmdirr($path);
56
            }
57
        }
58
59
        $files = self::getFilesToDelete();
60
61
        foreach ($files as $file) {
62
            if (is_file($file) && is_writable($file)) {
63
                unlink($file);
64
            }
65
        }
66
    }
67
68
    /**
69
     * @return array
70
     */
71
    public static function getFoldersToDelete()
72
    {
73
        $paths = [
74
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/docs',
75
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/nuget',
76
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/grunt',
77
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/test-infra',
78
            __DIR__.'/../../../../archive/',
79
            __DIR__.'/../../../../main/announcements/resources',
80
            __DIR__.'/../../../../main/conference/',
81
            __DIR__.'/../../../../main/course_notice/',
82
            __DIR__.'/../../../../main/metadata/',
83
            __DIR__.'/../../../../main/exercice/export/qti',
84
            __DIR__.'/../../../../main/glossary/resources',
85
            __DIR__.'/../../../../main/link/resources',
86
            __DIR__.'/../../../../main/notebook/resources',
87
            __DIR__.'/../../../../main/reservation/',
88
            __DIR__.'/../../../../main/inc/lib/symfony/',
89
            __DIR__.'/../../../../main/inc/entity/',
90
            __DIR__.'/../../../../main/inc/lib/phpdocx/',
91
            __DIR__.'/../../../../main/inc/lib/phpqrcode/',
92
            __DIR__.'/../../../../main/inc/lib/ezpdf',
93
            __DIR__.'/../../../../main/inc/lib/javascript/bootstrap',
94
            __DIR__.'/../../../../main/inc/lib/javascript/bxslider',
95
            __DIR__.'/../../../../main/inc/lib/javascript/fullcalendar',
96
            __DIR__.'/../../../../main/inc/lib/javascript/jquery-ui',
97
            __DIR__.'/../../../../main/inc/lib/fckeditor',
98
            __DIR__.'/../../../../main/inc/lib/mpdf/',
99
            __DIR__.'/../../../../main/inc/lib/phpmailer',
100
            __DIR__.'/../../../../main/inc/lib/nanogong/',
101
            __DIR__.'/../../../../main/inc/lib/symfony/',
102
            __DIR__.'/../../../../main/inc/lib/system/media/renderer',
103
            __DIR__.'/../../../../main/inc/lib/system/io',
104
            __DIR__.'/../../../../main/inc/lib/system/net',
105
            __DIR__.'/../../../../main/inc/lib/system/text/',
106
            __DIR__.'/../../../../main/inc/lib/icalcreator/',
107
            __DIR__.'/../../../../main/inc/lib/getid3/',
108
            __DIR__.'/../../../../main/inc/lib/tools/',
109
            __DIR__.'/../../../../main/inc/lib/pchart/',
110
            __DIR__.'/../../../../main/inc/lib/pclzip/',
111
            __DIR__.'/../../../../main/inc/lib/htmlpurifier',
112
            __DIR__.'/../../../../main/pear/excelreader/',
113
            __DIR__.'/../../../../main/resourcelinker',
114
            __DIR__.'/../../../../main/newscorm',
115
            __DIR__.'/../../../../main/exercice',
116
            __DIR__.'/../../../../plugin/ticket',
117
            __DIR__.'/../../../../plugin/skype',
118
            __DIR__.'/../../../../vendor/pclzip',
119
            __DIR__.'/../../../../web/assets/bootstrap/grunt',
120
            __DIR__.'/../../../../web/assets/bootstrap/nuget',
121
            __DIR__.'/../../../../web/assets/bootstrap/docs',
122
            __DIR__.'/../../../../web/assets/bootstrap/test-infra',
123
        ];
124
125
        return $paths;
126
    }
127
128
    /**
129
     * @return array
130
     */
131
    public static function getFilesToDelete()
132
    {
133
        $files = [
134
            __DIR__.'/../../../../main/admin/statistics/statistics.lib.php',
135
            __DIR__.'/../../../../main/admin/add_users_to_group.php',
136
            __DIR__.'/../../../../main/admin/group_add.php',
137
            __DIR__.'/../../../../main/admin/group_edit.php',
138
            __DIR__.'/../../../../main/admin/group_list.php',
139
            __DIR__.'/../../../../main/admin/admin_page.class.php',
140
            __DIR__.'/../../../../main/admin/system_management.php',
141
            __DIR__.'/../../../../main/announcements/resources/announcements.inc.php',
142
            __DIR__.'/../../../../main/announcements/resources/announcements_email.class.php',
143
            __DIR__.'/../../../../main/auth/external_login/facebook-php-sdk/src/base_facebook.php',
144
            __DIR__.'/../../../../main/auth/external_login/facebook-php-sdk/src/facebook.php',
145
            __DIR__.'/../../../../main/auth/external_login/facebook-php-sdk/src/base_facebook.php',
146
            __DIR__.'/../../../../main/course_description/ajax_controller.class.php',
147
            __DIR__.'/../../../../main/course_description/controller.class.php',
148
            __DIR__.'/../../../../main/course_description/course_description.class.php',
149
            __DIR__.'/../../../../main/course_description/course_description_form.class.php',
150
            __DIR__.'/../../../../main/course_description/course_description_repository.class.php',
151
            __DIR__.'/../../../../main/course_description/course_description_type.class.php',
152
            __DIR__.'/../../../../main/course_description/course_description_type_repository.class.php',
153
            __DIR__.'/../../../../main/course_description/course_import.class.php',
154
            __DIR__.'/../../../../main/course_description/csv_reader.class.php',
155
            __DIR__.'/../../../../main/course_description/csv_writer.class.php',
156
            __DIR__.'/../../../../main/course_description/request.class.php',
157
            __DIR__.'/../../../../main/course_description/upload_file_form.class.php',
158
            __DIR__.'/../../../../main/calendar/agenda.inc.php',
159
            __DIR__.'/../../../../main/calendar/agenda.lib.php',
160
            __DIR__.'/../../../../main/exercice/addlimits.php',
161
            __DIR__.'/../../../../main/exercice/testcategory.class.php',
162
            __DIR__.'/../../../../main/exercice/export/scorm/scorm_export.php',
163
            __DIR__.'/../../../../main/exercice/testheaderpage.php',
164
            __DIR__.'/../../../../main/inc/lib/main_api.lib.php',
165
            //__DIR__.'/../../../../main/inc/lib/nusoap/class.soapclient.php',
166
            __DIR__.'/../../../../main/inc/lib/nusoap/nusoap.php',
167
            __DIR__.'/../../../../main/inc/lib/autoload.class.php',
168
            __DIR__.'/../../../../main/inc/autoload.inc.php',
169
            __DIR__.'/../../../../main/inc/lib/uri.class.php',
170
            __DIR__.'/../../../../main/inc/lib/db.class.php',
171
            __DIR__.'/../../../../main/inc/lib/xht.lib.php',
172
            __DIR__.'/../../../../main/inc/lib/xmd.lib.php',
173
            __DIR__.'/../../../../main/inc/lib/entity.class.php',
174
            __DIR__.'/../../../../main/inc/lib/entity_repository.class.php',
175
            __DIR__.'/../../../../main/inc/lib/javascript.class.php',
176
            __DIR__.'/../../../../main/inc/lib/course.class.php',
177
            __DIR__.'/../../../../main/inc/lib/document.class.php',
178
            __DIR__.'/../../../../main/inc/lib/item_property.class.php',
179
            __DIR__.'/../../../../main/inc/lib/chamilo.class.php',
180
            __DIR__.'/../../../../main/inc/lib/events.lib.inc.php',
181
            __DIR__.'/../../../../main/inc/lib/current_user.class.php',
182
            __DIR__.'/../../../../main/inc/lib/current_course.class.php',
183
            __DIR__.'/../../../../main/inc/lib/response.class.php',
184
            __DIR__.'/../../../../main/inc/lib/result_set.class.php',
185
            __DIR__.'/../../../../main/inc/lib/session_handler.class.php',
186
            __DIR__.'/../../../../main/inc/lib/WCAG/WCAG_rendering.php',
187
            __DIR__.'/../../../../main/inc/lib/zip.class.php',
188
            __DIR__.'/../../../../main/inc/lib/student_publication.class.php',
189
            __DIR__.'/../../../../main/inc/lib/ajax_controller.class.php',
190
            __DIR__.'/../../../../main/inc/lib/system/closure_compiler.class.php',
191
            __DIR__.'/../../../../main/inc/lib/system/code_utilities.class.php',
192
            __DIR__.'/../../../../main/inc/lib/controller.class.php',
193
            __DIR__.'/../../../../main/inc/lib/system/text/converter.class.php',
194
            __DIR__.'/../../../../main/inc/lib/course_entity_repository.class.php',
195
            __DIR__.'/../../../../main/inc/lib/course_entity.class.php',
196
            __DIR__.'/../../../../main/inc/lib/cache.class.php',
197
            __DIR__.'/../../../../main/inc/lib/system/web/request_server.class.php',
198
            __DIR__.'/../../../../main/inc/lib/page.class.php',
199
            __DIR__.'/../../../../main/inc/lib/sortabletable.class.php',
200
            __DIR__.'/../../../../main/inc/lib/mail.lib.inc.php',
201
            __DIR__.'/../../../../main/install/i_database.class.php',
202
            __DIR__.'/../../../../main/install/install.class.php',
203
            __DIR__.'/../../../../main/inc/latex.php',
204
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/calendar_popup.php',
205
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/datepickerdate.php',
206
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/html_editor.php',
207
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/select_language.php',
208
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/select_theme.php',
209
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/style_button.php',
210
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/style_reset_button.php',
211
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/style_submit_button.php',
212
            __DIR__.'/../../../../main/inc/lib/formvalidator/Element/tbl_change.js.php',
213
            __DIR__.'/../../../../main/inc/lib/SequenceManager.php',
214
            __DIR__.'/../../../../main/inc/lib/SequenceResourceManager.php',
215
            __DIR__.'/../../../../main/lp/resourcelinker.php',
216
            __DIR__.'/../../../../main/lp/resourcelinker.inc.php',
217
            __DIR__.'/../../../../main/lp/learnpath_functions.inc.php',
218
            __DIR__.'/../../../../main/lp/lp_list_search.css',
219
            __DIR__.'/../../../../main/tracking/toolaccess_details.php',
220
            __DIR__.'/../../../../main/tracking/course_access_details.php',
221
            __DIR__.'/../../../../src/Chamilo/CoreBundle/Entity/GroupRelGroup.php',
222
            __DIR__.'/../../../../src/Chamilo/CoreBundle/Entity/GroupRelTag.php',
223
            __DIR__.'/../../../../src/Chamilo/CoreBundle/Entity/GroupRelUser.php',
224
            __DIR__.'/../../../../src/Chamilo/CoreBundle/Entity/Groups.php',
225
            __DIR__.'/../../../../src/Chamilo/UserBundle/Entity/Repository/UserRepository.php',
226
            __DIR__.'/../../../../src/Chamilo/CoreBundle/Entity/Manager/SequenceResourceManager.php',
227
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/Gemfile',
228
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/Gemfile.lock',
229
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/Gruntfile.js',
230
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/package.js',
231
            __DIR__.'/../../../../app/Resources/public/assets/bootstrap/package.json',
232
            __DIR__.'/../../../../web/assets/bootstrap/Gemfile',
233
            __DIR__.'/../../../../web/assets/bootstrap/Gemfile.lock',
234
            __DIR__.'/../../../../web/assets/bootstrap/Gruntfile.js',
235
            __DIR__.'/../../../../web/assets/bootstrap/package.js',
236
            __DIR__.'/../../../../web/assets/bootstrap/package.json',
237
        ];
238
239
        return $files;
240
    }
241
242
    /**
243
     * Update the basis css files.
244
     * Avoid use the ScriptHandler::dumpCssFiles.
245
     */
246
    public static function updateCss()
247
    {
248
        $appCss = __DIR__.'/../../../../app/Resources/public/css/';
249
        $newPath = __DIR__.'/../../../../web/css/';
250
        $cssFiles = [
251
            'base.css',
252
            'chat.css',
253
            'document.css',
254
            'editor_content.css',
255
            'markdown.css',
256
            'print.css',
257
            'responsive.css',
258
            'scorm.css',
259
        ];
260
261
        $fs = new Filesystem();
262
263
        foreach ($cssFiles as $file) {
264
            $fs->copy($appCss.$file, $newPath.$file, true);
265
        }
266
    }
267
268
    /**
269
     * @throws \Exception
270
     */
271
    public static function generateDoctineProxies()
272
    {
273
        $helperSet = require __DIR__.'/../../../../cli-config.php';
274
275
        $application = ConsoleRunner::createApplication(
276
            $helperSet,
277
            [
278
                new GenerateCommand(),
279
            ]
280
        );
281
282
        $application->setAutoExit(false);
283
284
        $input = new ArrayInput([
285
            'command' => 'orm:generate:proxies',
286
        ]);
287
        $output = new BufferedOutput();
288
289
        $application->run($input, $output);
290
291
        echo $output->fetch();
292
    }
293
294
    /**
295
     * Copied from chamilo rmdirr function.
296
     *
297
     * @param string     $dirname
298
     * @param bool|false $delete_only_content_in_folder
299
     * @param bool|false $strict
300
     *
301
     * @return bool
302
     */
303
    private static function rmdirr($dirname, $delete_only_content_in_folder = false, $strict = false)
304
    {
305
        $res = true;
306
307
        // A sanity check.
308
        if (!file_exists($dirname)) {
309
            return false;
310
        }
311
        // Simple delete for a file.
312
        if (is_file($dirname) || is_link($dirname)) {
313
            $res = unlink($dirname);
314
315
            return $res;
316
        }
317
318
        // Loop through the folder.
319
        $dir = dir($dirname);
320
        // A sanity check.
321
        $is_object_dir = is_object($dir);
322
        if ($is_object_dir) {
323
            while (false !== $entry = $dir->read()) {
324
                // Skip pointers.
325
                if ($entry == '.' || $entry == '..') {
326
                    continue;
327
                }
328
329
                // Recurse.
330
                if ($strict) {
331
                    $result = self::rmdirr("$dirname/$entry");
332
                    if ($result == false) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
333
                        $res = false;
334
                        break;
335
                    }
336
                } else {
337
                    self::rmdirr("$dirname/$entry");
338
                }
339
            }
340
        }
341
342
        // Clean up.
343
        if ($is_object_dir) {
344
            $dir->close();
345
        }
346
347
        if ($delete_only_content_in_folder == false) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
348
            $res = rmdir($dirname);
349
        }
350
351
        return $res;
352
    }
353
}
354