Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 132
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 / 132
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 / 12
0.00% covered (danger)
0.00%
0 / 1
20
 setFileType
0.00% covered (danger)
0.00%
0 / 8
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            $db->rollbackTransaction();
124            return false;
125        }
126        if($this->forcerename)
127            $err = SeedDMS_Core_File::renameFile($tmpFile, $dir . $version . $fileType);
128        elseif($this->forcelink)
129            $err = SeedDMS_Core_File::linkFile($tmpFile, $dir . $version . $fileType);
130        else
131            $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
132
133        return $err;
134    }
135
136    public function setFileType($document, $content, $newfiletype) {
137        $dir = $this->basedir . $this->getDocDir($document);
138        $version = $content->getVersion();
139        $fileType = $content->getFileType();
140        if (!SeedDMS_Core_File::makeDir($dir)) {
141            $db->rollbackTransaction();
142            return false;
143        }
144        $err = SeedDMS_Core_File::renameFile($dir . $version . $fileType, $dir . $version . $newfiletype);
145
146        return $err;
147    }
148
149    public function replaceContent($document, $content, $tmpFile) {
150        $dir = $this->basedir . $this->getDocDir($document);
151        $version = $content->getVersion();
152        $fileType = $content->getFileType();
153        $err = SeedDMS_Core_File::copyFile($tmpFile, $dir . $version . $fileType);
154        return $err;
155    }
156
157    public function deleteContent($document, $content) {
158        $err = true;
159        $dir = $this->basedir . $this->getDocDir($document);
160        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
161            $err = SeedDMS_Core_File::removeFile($dir . $content->getVersion() . $content->getFileType());
162        return $err;
163    }
164
165    public function getContent($document, $content) {
166        $err = true;
167        $dir = $this->basedir . $this->getDocDir($document);
168        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
169            $err = file_get_contents($dir . $content->getVersion() . $content->getFileType());
170        return $err;
171    }
172
173    public function getContentName($document, $content) {
174        $dir = $this->basedir . $this->getDocDir($document);
175        return dir.$content->getVersion().$content->getFileType();
176    }
177
178    public function getContentStream($document, $content) {
179        $err = true;
180        $dir = $this->basedir . $this->getDocDir($document);
181        if (SeedDMS_Core_File::file_exists($dir . $content->getVersion() . $content->getFileType()))
182            $err = fopen($dir . $content->getVersion() . $content->getFileType(), 'r');
183        return $err;
184    }
185
186    public function getContentFilesize($document, $content) {
187        $dir = $this->basedir . $this->getDocDir($document);
188        $filesize = SeedDMS_Core_File::fileSize($dir . $content->getVersion() . $content->getFileType());
189        return $filesize;
190    }
191
192    public function getContentMimetype($document, $content) {
193        $dir = $this->basedir . $this->getDocDir($document);
194        $filesize = SeedDMS_Core_File::mimetype($dir . $content->getVersion() . $content->getFileType());
195        return $filesize;
196    }
197
198    public function getContentChecksum($document, $content) {
199        $dir = $this->basedir . $this->getDocDir($document);
200        $filesize = SeedDMS_Core_File::checksum($dir . $content->getVersion() . $content->getFileType());
201        return $filesize;
202    }
203
204    public function saveReview($document, $id, $tmpFile) {
205        $dir = $this->basedir . $this->getDocDir($document);
206        $file = dir.'r'.$id;
207        return SeedDMS_Core_File::copyFile($tmpFile, $file);
208    }
209
210    public function deleteReview($document, $id) {
211        $err = true;
212        $dir = $this->basedir . $this->getDocDir($document);
213        $file = dir.'r'.$id;
214        if(SeedDMS_Core_File::file_exists($file))
215            $err = SeedDMS_Core_File::removeFile($file);
216        return $err;
217    }
218
219    public function getReview($document, $id) {
220        $err = true;
221        $dir = $this->basedir . $this->getDocDir($document);
222        $file = dir.'r'.$id;
223        if(SeedDMS_Core_File::file_exists($file))
224            $err = file_get_contents($file);
225        return $err;
226    }
227
228    public function getReviewName($document, $id) {
229        $dir = $this->basedir . $this->getDocDir($document);
230        return dir.'r'.$id;
231    }
232
233    public function saveApproval($document, $id, $tmpFile) {
234        $dir = $this->basedir . $this->getDocDir($document);
235        $file = dir.'a'.$id;
236        return SeedDMS_Core_File::copyFile($tmpFile, $file);
237    }
238
239    public function deleteApproval($document, $id) {
240        $err = true;
241        $dir = $this->basedir . $this->getDocDir($document);
242        $file = dir.'a'.$id;
243        if(SeedDMS_Core_File::file_exists($file))
244            $err = SeedDMS_Core_File::removeFile($file);
245        return $err;
246    }
247
248    public function getApproval($document, $id) {
249        $err = true;
250        $dir = $this->basedir . $this->getDocDir($document);
251        $file = dir.'a'.$id;
252        if(SeedDMS_Core_File::file_exists($file))
253            $err = file_get_contents($file);
254        return $err;
255    }
256
257    public function getApprovalName($document, $id) {
258        $dir = $this->basedir . $this->getDocDir($document);
259        return dir.'a'.$id;
260    }
261}