Issues (1797)

public/plugin/MigrationMoodle/uninstall.php (2 issues)

Labels
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
use Chamilo\CoreBundle\Entity\ExtraField;
0 ignored issues
show
This use statement conflicts with another class in this namespace, ExtraField. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are 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.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/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:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
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
$extraField is of type Chamilo\CoreBundle\Entity\ExtraField, thus it always evaluated to true.
Loading history...
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