Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 138
0.00% covered (danger)
0.00%
0 / 31
CRAP
0.00% covered (danger)
0.00%
0 / 1
SeedDMS_Core_Storage_File
0.00% covered (danger)
0.00%
0 / 138
0.00% covered (danger)
0.00%
0 / 31
2550
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 info
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 deleteContentDir
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 getDocDir
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 deleteDocDir
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 saveAttachment
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 deleteAttachment
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 hasAttachment
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getAttachment
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getAttachmentName
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getAttachmentFilesize
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getAttachmentMimeType
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 saveContent
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
 setFileType
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
6
 replaceContent
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 deleteContent
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 getContent
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 hasContent
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getContentName
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getContentStream
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 getContentFilesize
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getContentMimetype
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getContentChecksum
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 saveReview
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 deleteReview
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getReview
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getReviewName
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 saveApproval
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 deleteApproval
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getApproval
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 getApprovalName
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2declare(strict_types=1);
3
4/**
5 * Implementation of document storage
6 *
7 * @category   DMS
8 * @package    SeedDMS_Core
9 * @license    GPL 2
10 * @author     Uwe Steinmann <uwe@steinmann.cx>
11 * @copyright  Copyright (C) 2010-2024 Uwe Steinmann
12 */
13
14/**
15 * Class with operations to put documents into the storage
16 *
17 * Use the methods to access the document storage
18 *
19 * @category   DMS
20 * @package    SeedDMS_Core
21 * @author     Uwe Steinmann <uwe@steinmann.cx>
22 * @copyright  Copyright (C) 2010-2024 Uwe Steinmann
23 */
24class SeedDMS_Core_Storage_File implements SeedDMS_Core_Storage {
25
26    protected $basedir;
27
28    protected $maxdirid;
29
30    protected $forcerename;
31
32    protected $forcelink;
33
34    public function __construct($basedir, $maxdirid = 0, $forcerename = false, $forcelink = false) { /* {{{ */
35        $this->forcerename = $forcerename;
36        $this->forcelink = $forcelink;
37        if (substr($basedir, -1) == DIRECTORY_SEPARATOR) {
38            $this->basedir = $basedir;
39        } else {
40            $this->basedir = $basedir.DIRECTORY_SEPARATOR;
41        }
42        $this->maxdirid = $maxdirid;
43    } /* }}} */
44
45    public function info() { /* {{{ */
46        return 'Storage File';
47    } /* }}} */
48
49    public function deleteContentDir() { /* {{{ */
50        $err = true;
51        $dir = $this->basedir;
52        if (SeedDMS_Core_File::file_exists($dir))
53            $err = SeedDMS_Core_File::removeDir($dir);
54        return $err;
55    } /* }}} */
56
57    protected function getDocDir($document) { /* {{{ */
58        if ($this->maxdirid) {
59            $dirid = (int) (($document->getId()-1) / $this->maxdirid) + 1;
60            return $dirid.DIRECTORY_SEPARATOR.$document->getId().DIRECTORY_SEPARATOR;
61        } else {
62            return $document->getId().DIRECTORY_SEPARATOR;
63        }
64    } /* }}} */
65
66    public function deleteDocDir($document) { /* {{{ */
67        $err = true;
68        $dir = $this->basedir . $this->getDocDir($document);
69        if (SeedDMS_Core_File::file_exists($dir))
70            $err = SeedDMS_Core_File::removeDir($dir);
71        return $err;
72    } /* }}} */
73
74    public function saveAttachment($document, $attachment, $tmpFile) { /* {{{ */
75        $dir = $this->basedir . $this->getDocDir($document);
76        $fileType = $attachment->getFileType();
77        if (!SeedDMS_Core_File::makeDir($dir)) return false;
78        if ($this->forcerename) {
79            $err = SeedDMS_Core_File::renameFile($tmpFile, $dir . "f" .$attachment->getId() . $fileType);
80        } else {
81            $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . "f" .$attachment->getId() . $fileType);
82        }
83
84        return $err;
85    } /* }}} */
86
87    public function deleteAttachment($document, $attachment) { /* {{{ */
88        $err = true;
89        $dir = $this->basedir . $this->getDocDir($document);
90        $fileType = $attachment->getFileType();
91        if (SeedDMS_Core_File::file_exists($dir . "f" . $attachment->getId() . $fileType)) {
92            $err = SeedDMS_Core_File::removeFile($dir . "f" . $attachment->getId() . $fileType);
93        }
94        return $err;
95    } /* }}} */
96
97    public function hasAttachment($document, $attachment) { /* {{{ */
98        $err = true;
99        $dir = $this->basedir . $this->getDocDir($document);
100        $fileType = $attachment->getFileType();
101        return SeedDMS_Core_File::file_exists($dir . "f" . $attachment->getId() . $fileType);
102    } /* }}} */
103
104    public function getAttachment($document, $attachment) { /* {{{ */
105        $err = true;
106        $dir = $this->basedir . $this->getDocDir($document);
107        $fileType = $attachment->getFileType();
108        if (SeedDMS_Core_File::file_exists($dir . "f" . $attachment->getId() . $fileType)) {
109            $err = file_get_contents($dir . "f" . $attachment->getId() . $fileType);
110        }
111        return $err;
112    } /* }}} */
113
114    public function getAttachmentName($document, $attachment) { /* {{{ */
115        $dir = $this->basedir . $this->getDocDir($document);
116        return dir.'f'.$attachment->getId().$attachment->getFileType();
117    } /* }}} */
118
119    public function getAttachmentFilesize($document, $attachment) { /* {{{ */
120        $dir = $this->basedir . $this->getDocDir($document);
121        $filesize = SeedDMS_Core_File::fileSize($dir . "f" . $attachment->getId());
122        return $filesize;
123    } /* }}} */
124
125    public function getAttachmentMimeType($document, $attachment) { /* {{{ */
126        $dir = $this->basedir . $this->getDocDir($document);
127        $filesize = SeedDMS_Core_File::fileSize($dir . "f" . $attachment->getId());
128        return $filesize;
129    } /* }}} */
130
131    public function saveContent($document, $content, $tmpFile) { /* {{{ */
132        $dir = $this->basedir . $this->getDocDir($document);
133        $version = $content->getVersion();
134        $fileType = $content->getFileType();
135        if (!SeedDMS_Core_File::makeDir($dir)) {
136            return false;
137        }
138        if ($this->forcerename)
139            $err = SeedDMS_Core_File::renameFile($tmpFile, $dir . $version . $fileType);
140        elseif ($this->forcelink)
141            $err = SeedDMS_Core_File::linkFile($tmpFile, $dir . $version . $fileType);
142        else {
143            $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
144        }
145
146        return $err;
147    } /* }}} */
148
149    public function setFileType($document, $content, $newfiletype) { /* {{{ */
150        $dir = $this->basedir . $this->getDocDir($document);
151        $version = $content->getVersion();
152        $fileType = $content->getFileType();
153        if (!SeedDMS_Core_File::makeDir($dir)) {
154            return false;
155        }
156        $err = SeedDMS_Core_File::renameFile($dir . $version . $fileType, $dir . $version . $newfiletype);
157
158        return $err;
159    } /* }}} */
160
161    public function replaceContent($document, $content, $tmpFile) { /* {{{ */
162        $dir = $this->basedir . $this->getDocDir($document);
163        $version = $content->getVersion();
164        $fileType = $content->getFileType();
165        $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
166        return $err;
167    } /* }}} */
168
169    public function deleteContent($document, $content) { /* {{{ */
170        $err = true;
171        $dir = $this->basedir . $this->getDocDir($document);
172        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
173            $err = SeedDMS_Core_File::removeFile($dir . $content->getVersion() . $content->getFileType());
174        return $err;
175    } /* }}} */
176
177    public function getContent($document, $content) { /* {{{ */
178        $err = true;
179        $dir = $this->basedir . $this->getDocDir($document);
180        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
181            $err = file_get_contents($dir . $content->getVersion() . $content->getFileType());
182        return $err;
183    } /* }}} */
184
185    public function hasContent($document, $content) { /* {{{ */
186        $err = true;
187        $dir = $this->basedir . $this->getDocDir($document);
188        return SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType());
189    } /* }}} */
190
191    public function getContentName($document, $content) { /* {{{ */
192        $dir = $this->basedir . $this->getDocDir($document);
193        return dir.$content->getVersion().$content->getFileType();
194    } /* }}} */
195
196    public function getContentStream($document, $content) { /* {{{ */
197        $err = true;
198        $dir = $this->basedir . $this->getDocDir($document);
199        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
200            $err = fopen($dir . $content->getVersion() . $content->getFileType(), 'r');
201        return $err;
202    } /* }}} */
203
204    public function getContentFilesize($document, $content) { /* {{{ */
205        $dir = $this->basedir . $this->getDocDir($document);
206        $filesize = SeedDMS_Core_File::fileSize($dir . $content->getVersion() . $content->getFileType());
207        return $filesize;
208    } /* }}} */
209
210    public function getContentMimetype($document, $content) { /* {{{ */
211        $dir = $this->basedir . $this->getDocDir($document);
212        $filesize = SeedDMS_Core_File::mimetype($dir . $content->getVersion() . $content->getFileType());
213        return $filesize;
214    } /* }}} */
215
216    public function getContentChecksum($document, $content) { /* {{{ */
217        $dir = $this->basedir . $this->getDocDir($document);
218        $filesize = SeedDMS_Core_File::checksum($dir . $content->getVersion() . $content->getFileType());
219        return $filesize;
220    } /* }}} */
221
222    public function saveReview($document, $id, $tmpFile) { /* {{{ */
223        $dir = $this->basedir . $this->getDocDir($document);
224        $file = dir.'r'.$id;
225        return SeedDMS_Core_File::copyFile($tmpFile, $file);
226    } /* }}} */
227
228    public function deleteReview($document, $id) { /* {{{ */
229        $err = true;
230        $dir = $this->basedir . $this->getDocDir($document);
231        $file = dir.'r'.$id;
232        if (SeedDMS_Core_File::file_exists($file))
233            $err = SeedDMS_Core_File::removeFile($file);
234        return $err;
235    } /* }}} */
236
237    public function getReview($document, $id) { /* {{{ */
238        $err = true;
239        $dir = $this->basedir . $this->getDocDir($document);
240        $file = dir.'r'.$id;
241        if (SeedDMS_Core_File::file_exists($file))
242            $err = file_get_contents($file);
243        return $err;
244    } /* }}} */
245
246    public function getReviewName($document, $id) { /* {{{ */
247        $dir = $this->basedir . $this->getDocDir($document);
248        return dir.'r'.$id;
249    } /* }}} */
250
251    public function saveApproval($document, $id, $tmpFile) { /* {{{ */
252        $dir = $this->basedir . $this->getDocDir($document);
253        $file = dir.'a'.$id;
254        return SeedDMS_Core_File::copyFile($tmpFile, $file);
255    } /* }}} */
256
257    public function deleteApproval($document, $id) { /* {{{ */
258        $err = true;
259        $dir = $this->basedir . $this->getDocDir($document);
260        $file = dir.'a'.$id;
261        if (SeedDMS_Core_File::file_exists($file))
262            $err = SeedDMS_Core_File::removeFile($file);
263        return $err;
264    } /* }}} */
265
266    public function getApproval($document, $id) { /* {{{ */
267        $err = true;
268        $dir = $this->basedir . $this->getDocDir($document);
269        $file = dir.'a'.$id;
270        if (SeedDMS_Core_File::file_exists($file))
271            $err = file_get_contents($file);
272        return $err;
273    } /* }}} */
274
275    public function getApprovalName($document, $id) { /* {{{ */
276        $dir = $this->basedir . $this->getDocDir($document);
277        return dir.'a'.$id;
278    } /* }}} */
279}