chamilo /
chamilo-lms
| 1 | <?php |
||
| 2 | /* For licensing terms, see /license.txt */ |
||
| 3 | |||
| 4 | use Chamilo\CoreBundle\Entity\ExtraField; |
||
|
0 ignored issues
–
show
|
|||
| 5 | |||
| 6 | $plugin = MigrationMoodlePlugin::create(); |
||
| 7 | |||
| 8 | try { |
||
| 9 | removeExtraField(); |
||
| 10 | removePluginTables(); |
||
| 11 | } catch (Exception $exception) { |
||
| 12 | $message = sprintf( |
||
| 13 | $plugin->get_lang('UninstallError'), |
||
| 14 | $exception->getMessage() |
||
| 15 | ); |
||
| 16 | |||
| 17 | echo Display::return_message($message, 'error'); |
||
| 18 | } |
||
| 19 | |||
| 20 | /** |
||
| 21 | * @throws \Doctrine\ORM\ORMException |
||
| 22 | * @throws \Doctrine\ORM\OptimisticLockException |
||
| 23 | */ |
||
| 24 | function removeExtraField() |
||
| 25 | { |
||
| 26 | $em = Database::getManager(); |
||
| 27 | |||
| 28 | /** @var ExtraField $extraField */ |
||
| 29 | $extraField = $em |
||
| 30 | ->getRepository(ExtraField::class) |
||
| 31 | ->findOneBy(['variable' => 'moodle_password', 'extraFieldType' => ExtraField::USER_FIELD_TYPE]); |
||
| 32 | |||
| 33 | if ($extraField) { |
||
|
0 ignored issues
–
show
|
|||
| 34 | $em |
||
| 35 | ->createQuery('DELETE FROM ChamiloCoreBundle:ExtraFieldValues efv WHERE efv.field = :field') |
||
| 36 | ->execute(['field' => $extraField]); |
||
| 37 | |||
| 38 | $em->remove($extraField); |
||
| 39 | $em->flush(); |
||
| 40 | } |
||
| 41 | } |
||
| 42 | |||
| 43 | /** |
||
| 44 | * Drop database table created by this plugin. |
||
| 45 | */ |
||
| 46 | function removePluginTables() |
||
| 47 | { |
||
| 48 | $queries = []; |
||
| 49 | $queries[] = "DROP TABLE IF EXISTS plugin_migrationmoodle_item"; |
||
| 50 | $queries[] = "DROP TABLE IF EXISTS plugin_migrationmoodle_task"; |
||
| 51 | |||
| 52 | foreach ($queries as $query) { |
||
| 53 | Database::query($query); |
||
| 54 | } |
||
| 55 | } |
||
| 56 |
Let?s assume that you have a directory layout like this:
. |-- OtherDir | |-- Bar.php | `-- Foo.php `-- SomeDir `-- Foo.phpand let?s assume the following content of
Bar.php:If both files
OtherDir/Foo.phpandSomeDir/Foo.phpare loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.phpHowever, as
OtherDir/Foo.phpdoes not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: