PluginProbe
UpStream: a Project Management Plugin for WordPress / 2.1.0
UpStream: a Project Management Plugin for WordPress v2.1.0
trunk 1.39.0 1.39.1 1.39.2 1.39.3 2.0.7 2.1.0
upstream / includes / model / class-upstream-model-file.php

class-upstream-model-file.php in UpStream: a Project Management Plugin for WordPress 2.1.0, at includes/model/class-upstream-model-file.php

291 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UpStream_Model_File
4 *
5 * WordPress Coding Standart (WCS) note:
6 * All camelCase methods and object properties on this file are not converted to snake_case,
7 * because it being used (heavily) on another add-on plugins.
8 *
9 * @package UpStream
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Class UpStream_Model_File
19 */
20 class UpStream_Model_File extends UpStream_Model_Meta_Object {
21
22 /**
23 * FileId
24 *
25 * @var int
26 */
27 protected $fileId = 0; // phpcs:ignore
28
29 /**
30 * UpfsFileId
31 *
32 * @var undefined
33 */
34 protected $upfsFileId = null; // phpcs:ignore
35
36 /**
37 * CreatedAt
38 *
39 * @var int
40 */
41 protected $createdAt = 0; // phpcs:ignore
42
43 /**
44 * Reminders
45 *
46 * @var array
47 */
48 protected $reminders = array();
49
50 /**
51 * MetadataKey
52 *
53 * @var string
54 */
55 protected $metadataKey = '_upstream_project_files'; // phpcs:ignore
56
57 /**
58 * Type
59 *
60 * @var undefined
61 */
62 protected $type = UPSTREAM_ITEM_TYPE_FILE;
63
64 /**
65 * UpStream_Model_File constructor.
66 *
67 * @param mixed $parent parent.
68 * @param mixed $item_metadata item_metadata.
69 * @return void
70 */
71 public function __construct( $parent, $item_metadata ) {
72 parent::__construct( $parent, $item_metadata );
73
74 $this->type = UPSTREAM_ITEM_TYPE_FILE;
75 }
76
77 /**
78 * LoadFromArray
79 *
80 * @param mixed $item_metadata item_metadata.
81 * @return void
82 */
83 protected function loadFromArray( $item_metadata ) {
84 parent::loadFromArray( $item_metadata );
85
86 $this->createdAt = ! empty( $item_metadata['created_at'] ) ? $item_metadata['created_at'] : null; // phpcs:ignore
87
88 if ( upstream_filesytem_enabled() && isset( $item_metadata['file'] ) && upstream_upfs_info( $item_metadata['file'] ) ) {
89 $this->upfsFileId = $item_metadata['file']; // phpcs:ignore
90 } elseif ( isset( $item_metadata['file'] ) && $item_metadata['file'] ) {
91 $fid = @attachment_url_to_postid( $item_metadata['file'] );
92 if ( $fid ) {
93 $this->fileId = $fid; // phpcs:ignore
94 }
95 }
96
97 if ( ! $this->fileId && ! $this->upfsFileId ) { // phpcs:ignore
98 if ( ! empty( $item_metadata['file_id'] ) ) {
99 $file = get_attached_file( $item_metadata['file_id'] );
100 if ( false !== $file ) {
101 $this->fileId = $item_metadata['file_id']; // phpcs:ignore
102 }
103 }
104 }
105
106 if ( ! empty( $item_metadata['reminders'] ) ) {
107 foreach ( $item_metadata['reminders'] as $reminder_data ) {
108 $exception = null;
109 try {
110 $d = json_decode( $reminder_data, true );
111 $reminder = new UpStream_Model_Reminder( $d );
112 $this->reminders[] = $reminder;
113 } catch ( \Exception $e ) {
114 $exception = $e; // don't add anything else.
115 }
116 }
117 }
118 }
119
120 /**
121 * StoreToArray
122 *
123 * @param mixed $item_metadata item_metadata.
124 * @return void
125 */
126 public function storeToArray( &$item_metadata ) {
127 parent::storeToArray( $item_metadata );
128
129 if ( $this->fileId > 0 ) { // phpcs:ignore
130 $url = wp_get_attachment_url( $this->fileId ); // phpcs:ignore
131
132 if ( false !== $url ) {
133 $item_metadata['file'] = $url;
134 $item_metadata['file_id'] = $this->fileId; // phpcs:ignore
135 }
136 } elseif ( $this->upfsFileId && upstream_filesytem_enabled() ) { // phpcs:ignore
137 $item_metadata['file'] = $this->upfsFileId; // phpcs:ignore
138 }
139
140 if ( $this->createdAt >= 0 ) { // phpcs:ignore
141 $item_metadata['created_at'] = $this->createdAt; // phpcs:ignore
142 }
143 $item_metadata['reminders'] = array();
144
145 foreach ( $this->reminders as $reminder ) {
146 $r = array();
147 $reminder->storeToArray( $r );
148 $item_metadata['reminders'][] = json_encode( $r );
149 }
150 }
151
152 /**
153 * Get
154 *
155 * @param mixed $property property.
156 */
157 public function __get( $property ) {
158 $property = apply_filters( 'upstream_wcs_model_variable', $property );
159
160 switch ( $property ) {
161
162 case 'fileId': // phpcs:ignore
163 if ( upstream_filesytem_enabled() ) {
164 return $this->upfsFileId; // phpcs:ignore
165 } else {
166 return $this->fileId; // phpcs:ignore
167 }
168
169 case 'filename':
170 if ( upstream_filesytem_enabled() ) {
171 $file = upstream_upfs_info( $this->upfsFileId ); // phpcs:ignore
172 if ( $file ) {
173 return $file->orig_filename;
174 }
175 } else {
176 $file_id = $this->fileId; // phpcs:ignore
177 if ( $file_id > 0 ) {
178 $file = get_attached_file( $file_id );
179 return $file ? basename( $file ) : '';
180 }
181 }
182 return '';
183
184 case 'fileURL':
185 if ( upstream_filesytem_enabled() ) {
186 $file = upstream_upfs_info( $this->upfsFileId ); // phpcs:ignore
187 if ( $file ) {
188 return upstream_upfs_get_file_url( $this->upfsFileId ); // phpcs:ignore
189 }
190 } else {
191 $file_id = $this->fileId; // phpcs:ignore
192 if ( $file_id > 0 ) {
193 $url = wp_get_attachment_url( $file_id );
194 return $url || '';
195 }
196 }
197 return '';
198
199 case 'createdAt': // phpcs:ignore
200 if ( $this->createdAt > 0 ) { // phpcs:ignore
201 return self::timestampToYMD( $this->createdAt ); // phpcs:ignore
202 } else {
203 return '';
204 }
205
206 default:
207 return parent::__get( $property );
208 }
209 }
210
211 /**
212 * Set
213 *
214 * @param mixed $property property.
215 * @param mixed $value value.
216 * @throws UpStream_Model_ArgumentException Exception.
217 * @return void
218 */
219 public function __set( $property, $value ) {
220 $property = apply_filters( 'upstream_wcs_model_variable', $property );
221
222 switch ( $property ) {
223
224 case 'fileId':
225 if ( upstream_filesytem_enabled() ) {
226 throw new UpStream_Model_ArgumentException( __( 'Set not implemented for Upfs.', 'upstream' ) );
227 } else {
228 $file = get_attached_file( $value );
229 if ( false === $file ) {
230 throw new UpStream_Model_ArgumentException(
231 sprintf(
232 // translators: %s: file id.
233 __( 'File ID %s is invalid.', 'upstream' ),
234 $value
235 )
236 );
237 }
238
239 $this->fileId = $value; // phpcs:ignore
240 }
241 break;
242
243 default:
244 parent::__set( $property, $value );
245 break;
246 }
247 }
248
249
250 /**
251 * Fields
252 */
253 public static function fields() {
254 $fields = parent::fields();
255
256 $fields['fileId'] = array(
257 'type' => 'file',
258 'title' => __( 'File' ),
259 'search' => false,
260 'display' => true,
261 );
262 $fields['createdAt'] = array(
263 'type' => 'date',
264 'title' => __( 'Upload Date' ),
265 'search' => true,
266 'display' => true,
267 );
268
269 $fields = self::customFields( $fields, UPSTREAM_ITEM_TYPE_FILE );
270
271 return $fields;
272 }
273
274 /**
275 * Create
276 *
277 * @param mixed $parent parent.
278 * @param mixed $title title.
279 * @param mixed $created_by created_by.
280 */
281 public static function create( $parent, $title, $created_by ) {
282 $item_metadata = array(
283 'title' => $title,
284 'created_by' => $created_by,
285 );
286
287 return new self( $parent, $item_metadata );
288 }
289
290 }
291