~tsep-dev/tsep/2.x

« back to all changes in this revision

Viewing changes to src/TSEP/Packagist/WebBundle/Entity/Package.php

  • Committer: xaav at xaav
  • Date: 2011-07-13 22:44:36 UTC
  • Revision ID: xaav@xaav.tk-20110713224436-zlub1ohs06d10ri8
updated templates

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
/*
 
4
 * This file is part of Packagist.
 
5
 *
 
6
 * (c) Jordi Boggiano <j.boggiano@seld.be>
 
7
 *     Nils Adermann <naderman@naderman.de>
 
8
 *
 
9
 * For the full copyright and license information, please view the LICENSE
 
10
 * file that was distributed with this source code.
 
11
 */
 
12
 
 
13
namespace Packagist\WebBundle\Entity;
 
14
 
 
15
use Packagist\WebBundle\Repository\RepositoryProviderInterface;
 
16
 
 
17
use Doctrine\ORM\Mapping as ORM;
 
18
use Symfony\Component\Validator\Constraints as Assert;
 
19
use Symfony\Component\Validator\ExecutionContext;
 
20
use Doctrine\Common\Collections\ArrayCollection;
 
21
 
 
22
/**
 
23
 * @ORM\Entity(repositoryClass="Packagist\WebBundle\Entity\PackageRepository")
 
24
 * @ORM\Table(
 
25
 *     name="package",
 
26
 *     uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}
 
27
 * )
 
28
 * @Assert\Callback(methods={"isPackageUnique"})
 
29
 * @author Jordi Boggiano <j.boggiano@seld.be>
 
30
 */
 
31
class Package
 
32
{
 
33
    /**
 
34
     * @ORM\Id
 
35
     * @ORM\Column(type="integer")
 
36
     * @ORM\GeneratedValue(strategy="AUTO")
 
37
     */
 
38
    private $id;
 
39
 
 
40
    /**
 
41
     * Unique package name
 
42
     *
 
43
     * @ORM\Column
 
44
     * @Assert\NotBlank()
 
45
     */
 
46
    private $name;
 
47
 
 
48
    /**
 
49
     * @ORM\Column(type="text", nullable="true")
 
50
     */
 
51
    private $description;
 
52
 
 
53
    /**
 
54
     * @ORM\OneToMany(targetEntity="Packagist\WebBundle\Entity\Version", mappedBy="package")
 
55
     */
 
56
    private $versions;
 
57
 
 
58
    /**
 
59
     * @ORM\ManyToMany(targetEntity="User", inversedBy="packages")
 
60
     * @ORM\JoinTable(name="maintainers_packages")
 
61
     */
 
62
    private $maintainers;
 
63
 
 
64
    /**
 
65
     * @ORM\Column()
 
66
     * @Assert\NotBlank()
 
67
     */
 
68
    private $repository;
 
69
 
 
70
    // dist-tags / rel or runtime?
 
71
 
 
72
    /**
 
73
     * @ORM\Column(type="datetime")
 
74
     */
 
75
    private $createdAt;
 
76
 
 
77
    /**
 
78
     * @ORM\Column(type="datetime", nullable="true")
 
79
     */
 
80
    private $updatedAt;
 
81
 
 
82
    /**
 
83
     * @ORM\Column(type="datetime", nullable="true")
 
84
     */
 
85
    private $crawledAt;
 
86
 
 
87
    public function __construct()
 
88
    {
 
89
        $this->versions = new ArrayCollection();
 
90
        $this->createdAt = new \DateTime;
 
91
    }
 
92
 
 
93
    public function toJson()
 
94
    {
 
95
        $versions = array();
 
96
        foreach ($this->getVersions() as $version) {
 
97
            $versions[$version->getVersion()] = $version->toArray();
 
98
        }
 
99
        $maintainers = array();
 
100
        foreach ($this->getMaintainers() as $maintainer) {
 
101
            $maintainers[] = $maintainer->toArray();
 
102
        }
 
103
        $data = array(
 
104
            'name' => $this->name,
 
105
            'description' => $this->description,
 
106
            'dist-tags' => array(),
 
107
            'maintainers' => $maintainers,
 
108
            'versions' => $versions,
 
109
        );
 
110
        return json_encode($data);
 
111
    }
 
112
 
 
113
/*
 
114
    public function isRepositoryValid(ExecutionContext $context)
 
115
    {
 
116
        $propertyPath = $context->getPropertyPath() . '.repository';
 
117
        $context->setPropertyPath($propertyPath);
 
118
 
 
119
        if (!preg_match('#^git://.+|https?://github.com/[^/]+/[^/]+(?:\.git)?$#', $this->repository)) {
 
120
            $context->addViolation('This is not a valid git repository url', array(), null);
 
121
            return;
 
122
        }
 
123
 
 
124
        if (!preg_match('#^(?:https?|git)://github\.com/([^/]+)/(.+?)(?:\.git)?$#', $this->repository, $match)) {
 
125
            $context->addViolation('Only GitHub repositories are supported at the moment', array(), null);
 
126
            // TODO handle other types of git repos, and later svn/hg too
 
127
            return;
 
128
        }
 
129
 
 
130
        // handle github repositories
 
131
        $owner = $match[1];
 
132
        $repository = $match[2];
 
133
 
 
134
        $repoData = json_decode(file_get_contents('http://github.com/api/v2/json/repos/show/'.$owner.'/'.$repository), true);
 
135
        if (!$repoData) {
 
136
            $context->addViolation('Could not fetch information from this repository (if GitHub is down, please try again later)', array(), null);
 
137
            return;
 
138
        }
 
139
 
 
140
        $masterData = json_decode(file_get_contents('https://raw.github.com/'.$owner.'/'.$repository.'/master/composer.json'), true);
 
141
        if ($masterData['name'] !== $this->name) {
 
142
            $context->addViolation('The repository\'s composer.json information does not match the given package name, '.$masterData['name'].' found.', array(), null);
 
143
            return;
 
144
        }
 
145
    }
 
146
*/
 
147
 
 
148
    public function isPackageUnique(ExecutionContext $context)
 
149
    {
 
150
        // TODO check for uniqueness of package name
 
151
    }
 
152
 
 
153
    public function fromProvider(RepositoryProviderInterface $provider)
 
154
    {
 
155
        $repo = $provider->getRepository($this->repository);
 
156
        $composerFile = $repo->getComposerInformation('master');
 
157
 
 
158
        $this->setName($composerFile['name']);
 
159
    }
 
160
 
 
161
    /**
 
162
     * Get id
 
163
     *
 
164
     * @return string $id
 
165
     */
 
166
    public function getId()
 
167
    {
 
168
        return $this->id;
 
169
    }
 
170
 
 
171
    /**
 
172
     * Set name
 
173
     *
 
174
     * @param string $name
 
175
     */
 
176
    public function setName($name)
 
177
    {
 
178
        $this->name = $name;
 
179
    }
 
180
 
 
181
    /**
 
182
     * Get name
 
183
     *
 
184
     * @return string $name
 
185
     */
 
186
    public function getName()
 
187
    {
 
188
        return $this->name;
 
189
    }
 
190
 
 
191
    /**
 
192
     * Set description
 
193
     *
 
194
     * @param text $description
 
195
     */
 
196
    public function setDescription($description)
 
197
    {
 
198
        $this->description = $description;
 
199
    }
 
200
 
 
201
    /**
 
202
     * Get description
 
203
     *
 
204
     * @return text $description
 
205
     */
 
206
    public function getDescription()
 
207
    {
 
208
        return $this->description;
 
209
    }
 
210
 
 
211
    /**
 
212
     * Set createdAt
 
213
     *
 
214
     * @param datetime $createdAt
 
215
     */
 
216
    public function setCreatedAt($createdAt)
 
217
    {
 
218
        $this->createdAt = $createdAt;
 
219
    }
 
220
 
 
221
    /**
 
222
     * Get createdAt
 
223
     *
 
224
     * @return datetime $createdAt
 
225
     */
 
226
    public function getCreatedAt()
 
227
    {
 
228
        return $this->createdAt;
 
229
    }
 
230
 
 
231
    /**
 
232
     * Set repository
 
233
     *
 
234
     * @param string $repository
 
235
     */
 
236
    public function setRepository($repository)
 
237
    {
 
238
        $this->repository = $repository;
 
239
    }
 
240
 
 
241
    /**
 
242
     * Get repository
 
243
     *
 
244
     * @return string $repository
 
245
     */
 
246
    public function getRepository()
 
247
    {
 
248
        return $this->repository;
 
249
    }
 
250
 
 
251
    /**
 
252
     * Add versions
 
253
     *
 
254
     * @param Packagist\WebBundle\Entity\Version $versions
 
255
     */
 
256
    public function addVersions(Version $versions)
 
257
    {
 
258
        $this->versions[] = $versions;
 
259
    }
 
260
 
 
261
    /**
 
262
     * Get versions
 
263
     *
 
264
     * @return string $versions
 
265
     */
 
266
    public function getVersions()
 
267
    {
 
268
        return $this->versions;
 
269
    }
 
270
 
 
271
    /**
 
272
     * Set updatedAt
 
273
     *
 
274
     * @param datetime $updatedAt
 
275
     */
 
276
    public function setUpdatedAt($updatedAt)
 
277
    {
 
278
        $this->updatedAt = $updatedAt;
 
279
    }
 
280
 
 
281
    /**
 
282
     * Get updatedAt
 
283
     *
 
284
     * @return datetime $updatedAt
 
285
     */
 
286
    public function getUpdatedAt()
 
287
    {
 
288
        return $this->updatedAt;
 
289
    }
 
290
 
 
291
    /**
 
292
     * Set crawledAt
 
293
     *
 
294
     * @param datetime $crawledAt
 
295
     */
 
296
    public function setCrawledAt($crawledAt)
 
297
    {
 
298
        $this->crawledAt = $crawledAt;
 
299
    }
 
300
 
 
301
    /**
 
302
     * Get crawledAt
 
303
     *
 
304
     * @return datetime $crawledAt
 
305
     */
 
306
    public function getCrawledAt()
 
307
    {
 
308
        return $this->crawledAt;
 
309
    }
 
310
 
 
311
    /**
 
312
     * Add maintainers
 
313
     *
 
314
     * @param Packagist\WebBundle\Entity\User $maintainers
 
315
     */
 
316
    public function addMaintainers(User $maintainers)
 
317
    {
 
318
        $this->maintainers[] = $maintainers;
 
319
    }
 
320
 
 
321
    /**
 
322
     * Get maintainers
 
323
     *
 
324
     * @return Doctrine\Common\Collections\Collection $maintainers
 
325
     */
 
326
    public function getMaintainers()
 
327
    {
 
328
        return $this->maintainers;
 
329
    }
 
330
}
 
 
b'\\ No newline at end of file'