Completed
Push — master ( 43fb10...664b94 )
by
unknown
12:57
created

LoadTaskData::load()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Oro\Bridge\CrmTask\Migrations\Data\Demo\ORM;
4
5
use Doctrine\Common\DataFixtures\AbstractFixture;
6
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
7
use Doctrine\Common\Persistence\ObjectManager;
8
9
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
10
use Symfony\Component\DependencyInjection\ContainerInterface;
11
12
use Oro\Bundle\SecurityBundle\Authentication\Token\UsernamePasswordOrganizationToken;
13
use Oro\Bundle\UserBundle\Entity\User;
14
use OroCRM\Bundle\TaskBundle\Entity\Task;
15
use OroCRM\Bundle\TaskBundle\Entity\TaskPriority;
16
17
class LoadTaskData extends AbstractFixture implements DependentFixtureInterface, ContainerAwareInterface
18
{
19
    const FIXTURES_COUNT = 20;
20
21
    /**
22
     * @var array
23
     */
24
    static protected $fixtureSubjects = [
25
        'Lorem ipsum dolor sit amet, consectetuer adipiscing elit',
26
        'Aenean commodo ligula eget dolor',
27
        'Aenean massa',
28
        'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus',
29
        'Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem',
30
        'Nulla consequat massa quis enim',
31
        'Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu',
32
        'In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo',
33
        'Nullam dictum felis eu pede mollis pretium',
34
        'Integer tincidunt',
35
        'Cras dapibus',
36
        'Vivamus elementum semper nisi',
37
        'Aenean vulputate eleifend tellus',
38
        'Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim',
39
        'Aliquam lorem ante, dapibus in, viverra quis, feugiat',
40
        'Aenean imperdiet. Etiam ultricies nisi vel',
41
        'Praesent adipiscing',
42
        'Integer ante arcu',
43
        'Curabitur ligula sapien',
44
        'Donec posuere vulputate'
45
    ];
46
47
    /**
48
     * @var array
49
     */
50
    static protected $fixtureDescriptions = [
51
        'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.',
52
        'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
53
        'Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim.',
54
        'Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet.',
55
        'Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi..',
56
        'Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra,',
57
        'Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel.',
58
        'Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.',
59
        'Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed.',
60
        'Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus.',
61
        'Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus.',
62
        'Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales.',
63
        'Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus.',
64
        'Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus.',
65
        'Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum.',
66
        'Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing.',
67
        'Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum.',
68
        'Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet.',
69
        'Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non.',
70
        'Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu.',
71
    ];
72
73
    /**
74
     * @var ContainerInterface
75
     */
76
    protected $container;
77
78
    /**
79
     * {@inheritdoc}
80
     */
81
    public function getDependencies()
82
    {
83
        return [
84
            'OroCRM\Bundle\DemoDataBundle\Migrations\Data\Demo\ORM\LoadContactData',
85
            'OroCRM\Bundle\DemoDataBundle\Migrations\Data\Demo\ORM\LoadAccountData',
86
            'OroCRM\Bundle\DemoDataBundle\Migrations\Data\Demo\ORM\LoadUsersData',
87
        ];
88
    }
89
90
    /**
91
     * {@inheritdoc}
92
     */
93
    public function setContainer(ContainerInterface $container = null)
94
    {
95
        $this->container = $container;
96
    }
97
98
    /**
99
     * {@inheritdoc}
100
     */
101
    public function load(ObjectManager $om)
102
    {
103
        $this->persistDemoTasks($om);
104
105
        $om->flush();
106
    }
107
108
    /**
109
     * @param ObjectManager $om
110
     *
111
     * @SuppressWarnings(PHPMD.NPathComplexity)
112
     */
113
    protected function persistDemoTasks(ObjectManager $om)
114
    {
115
        $organization = $this->getReference('default_organization');
116
117
        $priorities = $om->getRepository('OroCRMTaskBundle:TaskPriority')->findAll();
118
        if (empty($priorities)) {
119
            return;
120
        }
121
        $users = $om->getRepository('OroUserBundle:User')->findAll();
122
        if (empty($users)) {
123
            return;
124
        }
125
        $accounts = $om->getRepository('OroCRMAccountBundle:Account')->findAll();
126
        $contacts = $om->getRepository('OroCRMContactBundle:Contact')->findAll();
127
128
        for ($i = 0; $i < self::FIXTURES_COUNT; ++$i) {
129
            /** @var User $assignedTo */
130
            $assignedTo = $this->getRandomEntity($users);
131
            /** @var TaskPriority $taskPriority */
132
            $taskPriority = $this->getRandomEntity($priorities);
133
134
            if ($om->getRepository('OroCRMTaskBundle:Task')->findOneBySubject(self::$fixtureSubjects[$i])) {
0 ignored issues
show
Bug introduced by
The method findOneBySubject() does not exist on Doctrine\Common\Persistence\ObjectRepository. Did you maybe mean findOneBy()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
135
                // Task with this title is already exist
136
                continue;
137
            }
138
139
            $task = new Task();
140
            $task->setSubject(self::$fixtureSubjects[$i]);
141
            $task->setDescription(self::$fixtureDescriptions[$i]);
142
            $dueDate = new \DateTime();
143
            $dueDate->add(new \DateInterval(sprintf('P%dDT%dM', rand(0, 30), rand(0, 1440))));
144
            $task->setDueDate($dueDate);
145
            $task->setOwner($assignedTo);
146
            $task->setTaskPriority($taskPriority);
147
            $task->setOrganization($organization);
148
149
            $randomPath = rand(1, 10);
150
151
            if ($randomPath > 2) {
152
                $contact = $this->getRandomEntity($contacts);
153
                if ($contact) {
154
                    $this->addActivityTarget($task, $contact);
155
                }
156
            }
157
158
            if ($randomPath > 3) {
159
                $account = $this->getRandomEntity($accounts);
160
                if ($account) {
161
                    $this->addActivityTarget($task, $account);
162
                }
163
            }
164
165
            if ($randomPath > 4) {
166
                $user = $this->getRandomEntity($users);
167
                if ($user) {
168
                    $this->addActivityTarget($task, $user);
169
                }
170
            }
171
172
            $om->persist($task);
173
        }
174
    }
175
176
    /**
177
     * @param object[] $entities
178
     *
179
     * @return object|null
180
     */
181
    protected function getRandomEntity($entities)
182
    {
183
        if (empty($entities)) {
184
            return null;
185
        }
186
187
        return $entities[rand(0, count($entities) - 1)];
188
    }
189
190
    /**
191
     * @param Task   $task
192
     * @param object $target
193
     */
194
    protected function addActivityTarget(Task $task, $target)
195
    {
196
        if ($task->supportActivityTarget(get_class($target))) {
197
            $securityContext = $this->container->get('security.context');
198
            $user = $task->getOwner();
199
            $token = new UsernamePasswordOrganizationToken(
200
                $user,
201
                $user->getUsername(),
202
                'main',
203
                $this->getReference('default_organization')
204
            );
205
            $securityContext->setToken($token);
206
            $task->addActivityTarget($target);
207
        }
208
    }
209
}
210