1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* This file is part of the PHPMongo package. |
5
|
|
|
* |
6
|
|
|
* (c) Dmytro Sokil <[email protected]> |
7
|
|
|
* |
8
|
|
|
* For the full copyright and license information, please view the LICENSE |
9
|
|
|
* file that was distributed with this source code. |
10
|
|
|
*/ |
11
|
|
|
|
12
|
|
|
namespace Sokil\Mongo; |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* Representation of GridFS as collection of files |
16
|
|
|
* |
17
|
|
|
* @property \MongoGridFS $collection MongoGridFS Instance |
18
|
|
|
*/ |
19
|
|
|
class GridFS extends Collection |
20
|
|
|
{ |
21
|
|
|
protected $mongoCollectionClassName = '\MongoGridFS'; |
22
|
|
|
|
23
|
|
|
/** |
24
|
|
|
* Factory method to get document object from array of stored document |
25
|
|
|
* @param \MongoGridFSFile $data |
26
|
|
|
* @return \Sokil\Mongo\GridFsFile |
27
|
|
|
*/ |
28
|
|
|
public function hydrate($data, $useDocumentPool = true) |
29
|
|
|
{ |
30
|
|
|
if (($data instanceof \MongoGridFSFile) === false) { |
31
|
|
|
throw new Exception('Must be \MongoGridFSFile'); |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
$className = $this->getFileClassName($data); |
35
|
|
|
|
36
|
|
|
return new $className($this, $data); |
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
/** |
40
|
|
|
* Override to define class name of file by file data |
41
|
|
|
* |
42
|
|
|
* @param \MongoGridFSFile $fileData |
43
|
|
|
* @return string Document class data |
44
|
|
|
*/ |
45
|
|
|
public function getFileClassName(\MongoGridFSFile $fileData = null) |
46
|
|
|
{ |
47
|
|
|
return '\Sokil\Mongo\GridFSFile'; |
48
|
|
|
} |
49
|
|
|
|
50
|
|
|
/** |
51
|
|
|
* Create file in GridFS from file in filesystem |
52
|
|
|
* |
53
|
|
|
* @param string $filename name of source file |
54
|
|
|
* @param array $metadata metadata stored with file |
55
|
|
|
* @return \MongoId Id of stored file |
56
|
|
|
*/ |
57
|
|
|
public function storeFile($filename, $metadata = array()) |
58
|
|
|
{ |
59
|
|
|
return $this->getMongoCollection()->storeFile($filename, $metadata); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* Create file in GridFS from binary data |
64
|
|
|
* |
65
|
|
|
* @param string $bytes binary data to store in GridFS |
66
|
|
|
* @param array $metadata metadata stored with file |
67
|
|
|
* @return \MongoId Id of stored file |
68
|
|
|
*/ |
69
|
|
|
public function storeBytes($bytes, $metadata = array()) |
70
|
|
|
{ |
71
|
|
|
return $this->getMongoCollection()->storeBytes($bytes, $metadata); |
72
|
|
|
} |
73
|
|
|
|
74
|
|
|
/** |
75
|
|
|
* Get file instance by id of document |
76
|
|
|
* Used \MongoGridFS::findOne() instead of \MongoGridFS::get() due |
77
|
|
|
* to backward compatibility with old mongo extensions |
78
|
|
|
* |
79
|
|
|
* @param \MongoId|string|int $id |
80
|
|
|
* @return \Sokil\Mongo\GridFSFile|null |
81
|
|
|
*/ |
82
|
|
|
public function getFileById($id) |
83
|
|
|
{ |
84
|
|
|
if ($id instanceof \MongoId) { |
85
|
|
|
$file = $this->getMongoCollection()->findOne(array('_id' => $id)); |
86
|
|
|
} else { |
87
|
|
|
try { |
88
|
|
|
$file = $this->getMongoCollection()->findOne(array('_id' => new \MongoId($id))); |
89
|
|
|
} catch (\MongoException $e) { |
90
|
|
|
$file = $this->getMongoCollection()->findOne(array('_id' => $id)); |
91
|
|
|
} |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
if (!$file) { |
|
|
|
|
95
|
|
|
return null; |
96
|
|
|
} |
97
|
|
|
|
98
|
|
|
$fileClassName = $this->getFileClassName($file); |
99
|
|
|
return new $fileClassName($this, $file); |
100
|
|
|
} |
101
|
|
|
|
102
|
|
|
/** |
103
|
|
|
* Delete file by id |
104
|
|
|
* |
105
|
|
|
* @param string|\MongoId $id id of file's document |
106
|
|
|
* @return \Sokil\Mongo\GridFS |
107
|
|
|
* @throws Exception |
108
|
|
|
*/ |
109
|
|
|
public function deleteFileById($id) |
110
|
|
|
{ |
111
|
|
|
if ($id instanceof \MongoId) { |
112
|
|
|
$result = $this->getMongoCollection()->delete($id); |
113
|
|
|
} else { |
114
|
|
|
try { |
115
|
|
|
$result = $this->getMongoCollection()->delete(new \MongoId($id)); |
116
|
|
|
} catch (\MongoException $e) { |
117
|
|
|
$result = $this->getMongoCollection()->delete($id); |
118
|
|
|
} |
119
|
|
|
} |
120
|
|
View Code Duplication |
if ($result['ok'] !== (double) 1) { |
121
|
|
|
throw new Exception('Error deleting file: ' . $result['err'] . ': ' . $result['errmsg']); |
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
return $this; |
125
|
|
|
} |
126
|
|
|
} |
127
|
|
|
|
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.