Completed
Push — master ( 0bae06...931bd3 )
by
unknown
78:08
created

OroCRMActivityContactBundle   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 0
cbo 6
dl 0
loc 74
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A up() 0 4 1
A removeUserACFields() 0 18 3
B getDropEntityConfigFieldQuery() 0 33 1
1
<?php
2
3
namespace OroCRM\Bundle\ActivityContactBundle\Migrations\Schema\v1_0;
4
5
use Doctrine\DBAL\Schema\Schema;
6
7
use Oro\Bundle\MigrationBundle\Migration\Migration;
8
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
9
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
10
11
use OroCRM\Bundle\ActivityContactBundle\EntityConfig\ActivityScope;
12
13
class OroCRMActivityContactBundle implements Migration
14
{
15
    /**
16
     * @inheritdoc
17
     */
18
    public function up(Schema $schema, QueryBag $queries)
19
    {
20
        self::removeUserACFields($schema, $queries);
21
    }
22
23
    /**
24
     * @param Schema $schema
25
     * @param QueryBag $queries
26
     * @throws \Doctrine\DBAL\Schema\SchemaException
27
     */
28
    public static function removeUserACFields(Schema $schema, QueryBag $queries)
29
    {
30
        $tableName = 'oro_user';
31
        $className = 'Oro\Bundle\UserBundle\Entity\User';
32
        $queries->addPostQuery(new UpdateConfigQuery());
33
        $table = $schema->getTable($tableName);
34
        foreach (array_keys(ActivityScope::$fieldsConfiguration) as $fieldName) {
35
            if ($table->hasColumn($fieldName)) {
36
                $table->dropColumn($fieldName);
37
                $queries->addQuery(
38
                    OroCRMActivityContactBundle::getDropEntityConfigFieldQuery(
39
                        $className,
40
                        $fieldName
41
                    )
42
                );
43
            }
44
        }
45
    }
46
47
    /**
48
     * @param string $className
49
     * @param string $fieldName
50
     *
51
     * @return ParametrizedSqlMigrationQuery
52
     */
53
    public static function getDropEntityConfigFieldQuery($className, $fieldName)
54
    {
55
        $dropFieldIndexSql = 'DELETE FROM oro_entity_config_index_value'
56
            . ' WHERE entity_id IS NULL AND field_id IN ('
57
            . ' SELECT oecf.id FROM oro_entity_config_field AS oecf'
58
            . ' WHERE oecf.field_name = :field'
59
            . ' AND oecf.entity_id IN ('
60
            . ' SELECT oec.id'
61
            . ' FROM oro_entity_config AS oec'
62
            . ' WHERE oec.class_name = :class'
63
            . ' ))';
64
        $dropFieldSql      = 'DELETE FROM oro_entity_config_field'
65
            . ' WHERE field_name = :field'
66
            . ' AND entity_id IN ('
67
            . ' SELECT id'
68
            . ' FROM oro_entity_config'
69
            . ' WHERE class_name = :class'
70
            . ' )';
71
72
        $query = new ParametrizedSqlMigrationQuery();
73
        $query->addSql(
74
            $dropFieldIndexSql,
75
            ['field' => $fieldName, 'class' => $className],
76
            ['field' => 'string', 'class' => 'string']
77
        );
78
        $query->addSql(
79
            $dropFieldSql,
80
            ['field' => $fieldName, 'class' => $className],
81
            ['field' => 'string', 'class' => 'string']
82
        );
83
84
        return $query;
85
    }
86
}
87