Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 130
0.00% covered (danger)
0.00%
0 / 28
CRAP
0.00% covered (danger)
0.00%
0 / 1
SeedDMS_Core_Storage_File
0.00% covered (danger)
0.00%
0 / 130
0.00% covered (danger)
0.00%
0 / 28
2256
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
 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
 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
 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        $this->maxdirid = $maxdirid;
42    } /* }}} */
43
44    public function deleteContentDir() {
45        $err = true;
46        $dir = $this->basedir;
47        if (SeedDMS_Core_File::file_exists($dir))
48            $err = SeedDMS_Core_File::removeDir($dir);
49        return $err;
50    }
51
52    protected function getDocDir($document) {
53        if ($this->maxdirid) {
54            $dirid = (int) (($document->getId()-1) / $this->maxdirid) + 1;
55            return $dirid.DIRECTORY_SEPARATOR.$document->getId().DIRECTORY_SEPARATOR;
56        } else {
57            return $document->getId().DIRECTORY_SEPARATOR;
58        }
59    }
60
61    public function deleteDocDir($document) {
62        $err = true;
63        $dir = $this->basedir . $this->getDocDir($document);
64        if (SeedDMS_Core_File::file_exists($dir))
65            $err = SeedDMS_Core_File::removeDir($dir);
66        return $err;
67    }
68
69    public function saveAttachment($document, $attachment, $tmpFile) {
70        $dir = $this->basedir . $this->getDocDir($document);
71        $fileType = $attachment->getFileType();
72        if (!SeedDMS_Core_File::makeDir($dir)) return false;
73        if ($this->forcerename)
74            $err = SeedDMS_Core_File::renameFile($tmpFile, $dir . "f" .$attachment->getId() . $fileType);
75        else
76            $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . "f" .$attachment->getId() . $fileType);
77
78        return $err;
79    }
80
81    public function deleteAttachment($document, $attachment) {
82        $err = true;
83        $dir = $this->basedir . $this->getDocDir($document);
84        $fileType = $attachment->getFileType();
85        if (SeedDMS_Core_File::file_exists($dir . "f" . $attachment->getId() . $fileType)) {
86            $err = SeedDMS_Core_File::removeFile($dir . "f" . $attachment->getId() . $fileType);
87        }
88        return $err;
89    }
90
91    public function getAttachment($document, $attachment) {
92        $err = true;
93        $dir = $this->basedir . $this->getDocDir($document);
94        $fileType = $attachment->getFileType();
95        if (SeedDMS_Core_File::file_exists($dir . "f" . $attachment->getId() . $fileType)) {
96            $err = file_get_contents($dir . "f" . $attachment->getId() . $fileType);
97        }
98        return $err;
99    }
100
101    public function getAttachmentName($document, $attachment) {
102        $dir = $this->basedir . $this->getDocDir($document);
103        return dir.'f'.$attachment->getId().$attachment->getFileType();
104    }
105
106    public function getAttachmentFilesize($document, $attachment) {
107        $dir = $this->basedir . $this->getDocDir($document);
108        $filesize = SeedDMS_Core_File::fileSize($dir . "f" . $attachment->getId());
109        return $filesize;
110    }
111
112    public function getAttachmentMimeType($document, $attachment) {
113        $dir = $this->basedir . $this->getDocDir($document);
114        $filesize = SeedDMS_Core_File::fileSize($dir . "f" . $attachment->getId());
115        return $filesize;
116    }
117
118    public function saveContent($document, $content, $tmpFile) {
119        $dir = $this->basedir . $this->getDocDir($document);
120        $version = $content->getVersion();
121        $fileType = $content->getFileType();
122        if (!SeedDMS_Core_File::makeDir($dir)) {
123            return false;
124        }
125        if ($this->forcerename)
126            $err = SeedDMS_Core_File::renameFile($tmpFile, $dir . $version . $fileType);
127        elseif ($this->forcelink)
128            $err = SeedDMS_Core_File::linkFile($tmpFile, $dir . $version . $fileType);
129        else
130            $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
131
132        return $err;
133    }
134
135    public function setFileType($document, $content, $newfiletype) {
136        $dir = $this->basedir . $this->getDocDir($document);
137        $version = $content->getVersion();
138        $fileType = $content->getFileType();
139        if (!SeedDMS_Core_File::makeDir($dir)) {
140            return false;
141        }
142        $err = SeedDMS_Core_File::renameFile($dir . $version . $fileType, $dir . $version . $newfiletype);
143
144        return $err;
145    }
146
147    public function replaceContent($document, $content, $tmpFile) {
148        $dir = $this->basedir . $this->getDocDir($document);
149        $version = $content->getVersion();
150        $fileType = $content->getFileType();
151        $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
152        return $err;
153    }
154
155    public function deleteContent($document, $content) {
156        $err = true;
157        $dir = $this->basedir . $this->getDocDir($document);
158        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
159            $err = SeedDMS_Core_File::removeFile($dir . $content->getVersion() . $content->getFileType());
160        return $err;
161    }
162
163    public function getContent($document, $content) {
164        $err = true;
165        $dir = $this->basedir . $this->getDocDir($document);
166        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
167            $err = file_get_contents($dir . $content->getVersion() . $content->getFileType());
168        return $err;
169    }
170
171    public function getContentName($document, $content) {
172        $dir = $this->basedir . $this->getDocDir($document);
173        return dir.$content->getVersion().$content->getFileType();
174    }
175
176    public function getContentStream($document, $content) {
177        $err = true;
178        $dir = $this->basedir . $this->getDocDir($document);
179        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
180            $err = fopen($dir . $content->getVersion() . $content->getFileType(), 'r');
181        return $err;
182    }
183
184    public function getContentFilesize($document, $content) {
185        $dir = $this->basedir . $this->getDocDir($document);
186        $filesize = SeedDMS_Core_File::fileSize($dir . $content->getVersion() . $content->getFileType());
187        return $filesize;
188    }
189
190    public function getContentMimetype($document, $content) {
191        $dir = $this->basedir . $this->getDocDir($document);
192        $filesize = SeedDMS_Core_File::mimetype($dir . $content->getVersion() . $content->getFileType());
193        return $filesize;
194    }
195
196    public function getContentChecksum($document, $content) {
197        $dir = $this->basedir . $this->getDocDir($document);
198        $filesize = SeedDMS_Core_File::checksum($dir . $content->getVersion() . $content->getFileType());
199        return $filesize;
200    }
201
202    public function saveReview($document, $id, $tmpFile) {
203        $dir = $this->basedir . $this->getDocDir($document);
204        $file = dir.'r'.$id;
205        return SeedDMS_Core_File::copyFile($tmpFile, $file);
206    }
207
208    public function deleteReview($document, $id) {
209        $err = true;
210        $dir = $this->basedir . $this->getDocDir($document);
211        $file = dir.'r'.$id;
212        if (SeedDMS_Core_File::file_exists($file))
213            $err = SeedDMS_Core_File::removeFile($file);
214        return $err;
215    }
216
217    public function getReview($document, $id) {
218        $err = true;
219        $dir = $this->basedir . $this->getDocDir($document);
220        $file = dir.'r'.$id;
221        if (SeedDMS_Core_File::file_exists($file))
222            $err = file_get_contents($file);
223        return $err;
224    }
225
226    public function getReviewName($document, $id) {
227        $dir = $this->basedir . $this->getDocDir($document);
228        return dir.'r'.$id;
229    }
230
231    public function saveApproval($document, $id, $tmpFile) {
232        $dir = $this->basedir . $this->getDocDir($document);
233        $file = dir.'a'.$id;
234        return SeedDMS_Core_File::copyFile($tmpFile, $file);
235    }
236
237    public function deleteApproval($document, $id) {
238        $err = true;
239        $dir = $this->basedir . $this->getDocDir($document);
240        $file = dir.'a'.$id;
241        if (SeedDMS_Core_File::file_exists($file))
242            $err = SeedDMS_Core_File::removeFile($file);
243        return $err;
244    }
245
246    public function getApproval($document, $id) {
247        $err = true;
248        $dir = $this->basedir . $this->getDocDir($document);
249        $file = dir.'a'.$id;
250        if (SeedDMS_Core_File::file_exists($file))
251            $err = file_get_contents($file);
252        return $err;
253    }
254
255    public function getApprovalName($document, $id) {
256        $dir = $this->basedir . $this->getDocDir($document);
257        return dir.'a'.$id;
258    }
259}