PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.12
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.12
1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 All 36 releases
← All changes | includes/desktop-files/folders-store.php +106 -96 0.9.8 → 1.1.12 View file →
@@ -1,7 +1,7 @@
1 1 <?php
2 2 /**
3 - * Desktop Mode — Folders store.
3 + * OpenStation — Folders store.
4 4 *
5 5 * CRUD primitives for the `_desktop_mode_folders` table. Folders
6 6 * are first-class files: they have an owner, a name, a share
7 7 * mode, and a JSON `share_meta` column carrying the user / role
@@ -7,19 +7,19 @@
7 7 * mode, and a JSON `share_meta` column carrying the user / role
8 8 * lists when `share_mode` is `users` or `roles`.
9 9 *
10 10 * Visibility beyond the owner is computed by sharing.php, which
11 - * hooks the `desktop_mode_files_visible_folders` filter at
11 + * hooks the `openstation_files_visible_folders` filter at
12 12 * priority 5 to merge accepted shares and `share_mode='all'`
13 13 * folders onto the owner's list.
14 14 *
15 - * @package WPDesktopMode
15 + * @package OpenStation
16 16 */
17 17
18 18 defined( 'ABSPATH' ) || exit;
19 19
20 20 /** Allowed share-mode values. */
21 -function desktop_mode_files_share_modes() {
21 +function openstation_files_share_modes() {
22 22 $modes = array( 'private', 'users', 'roles', 'all' );
23 23 /**
24 24 * Filter the allowed `share_mode` values. Plugins can add
25 25 * (e.g. 'team') by registering both the value here and a
@@ -26,9 +26,9 @@
26 26 * matching visibility callback.
27 27 *
28 28 * @param string[] $modes Default modes.
29 29 */
30 - return (array) apply_filters( 'desktop_mode_files_share_modes', $modes );
30 + return (array) apply_filters( 'openstation_files_share_modes', $modes );
31 31 }
32 32
33 33 /**
34 34 * Create a folder.
@@ -36,35 +36,45 @@
36 36 * @param int $owner_id Owner.
37 37 * @param array $args `name`, `share_mode`, `share_meta`.
38 38 * @return int|WP_Error Folder id on success.
39 39 */
40 -function desktop_mode_files_create_folder( $owner_id, $args = array() ) {
40 +function openstation_files_create_folder( $owner_id, $args = array() ) {
41 41 global $wpdb;
42 42
43 43 $owner_id = (int) $owner_id;
44 44 if ( $owner_id <= 0 ) {
45 - return new WP_Error( 'desktop_mode_files_invalid_user', __( 'A user id is required.', 'desktop-mode' ), array( 'status' => 400 ) );
45 + return new WP_Error( 'openstation_files_invalid_user', __( 'A user id is required.', 'desktop-mode' ), array( 'status' => 400 ) );
46 46 }
47 47
48 - $args = wp_parse_args( $args, array(
49 - 'name' => '',
50 - 'share_mode' => 'private',
51 - 'share_meta' => null,
52 - ) );
48 + $args = wp_parse_args(
49 + $args,
50 + array(
51 + 'name' => '',
52 + 'share_mode' => 'private',
53 + 'share_meta' => null,
54 + )
55 + );
53 56
54 57 $name = sanitize_text_field( (string) $args['name'] );
55 58 if ( '' === $name ) {
56 - return new WP_Error( 'desktop_mode_files_missing_name', __( 'Folder name is required.', 'desktop-mode' ), array( 'status' => 400 ) );
59 + return new WP_Error( 'openstation_files_missing_name', __( 'Folder name is required.', 'desktop-mode' ), array( 'status' => 400 ) );
57 60 }
58 61
59 62 $mode = (string) $args['share_mode'];
60 - $modes = desktop_mode_files_share_modes();
63 + $modes = openstation_files_share_modes();
61 64 if ( ! in_array( $mode, $modes, true ) ) {
62 - return new WP_Error( 'desktop_mode_files_invalid_share_mode', __( 'Invalid share mode.', 'desktop-mode' ), array( 'status' => 400, 'mode' => $mode ) );
65 + return new WP_Error(
66 + 'openstation_files_invalid_share_mode',
67 + __( 'Invalid share mode.', 'desktop-mode' ),
68 + array(
69 + 'status' => 400,
70 + 'mode' => $mode,
71 + )
72 + );
63 73 }
64 74
65 - $tables = desktop_mode_files_table_names();
66 - $now = desktop_mode_files_now_ms();
75 + $tables = openstation_files_table_names();
76 + $now = openstation_files_now_ms();
67 77 $row = array(
68 78 'owner_id' => $owner_id,
69 79 'name' => $name,
70 80 'share_mode' => $mode,
@@ -73,9 +83,9 @@
73 83 );
74 84
75 85 $ok = $wpdb->insert( $tables['folders'], $row, array( '%d', '%s', '%s', '%s', '%d' ) );
76 86 if ( false === $ok ) {
77 - return new WP_Error( 'desktop_mode_files_insert_failed', __( 'Failed to create folder.', 'desktop-mode' ), array( 'status' => 500 ) );
87 + return new WP_Error( 'openstation_files_insert_failed', __( 'Failed to create folder.', 'desktop-mode' ), array( 'status' => 500 ) );
78 88 }
79 89 $id = (int) $wpdb->insert_id;
80 90
81 91 $row['id'] = $id;
@@ -85,9 +95,9 @@
85 95 *
86 96 * @param int $id Folder id.
87 97 * @param array $row Inserted row.
88 98 */
89 - do_action( 'desktop_mode_folder_created', $id, $row );
99 + do_action( 'openstation_folder_created', $id, $row );
90 100
91 101 return $id;
92 102 }
93 103
@@ -98,19 +108,19 @@
98 108 * @param int $user_id Acting user.
99 109 * @param array $changes `name`, `share_mode`, `share_meta`.
100 110 * @return true|WP_Error
101 111 */
102 -function desktop_mode_files_update_folder( $folder_id, $user_id, $changes = array() ) {
112 +function openstation_files_update_folder( $folder_id, $user_id, $changes = array() ) {
103 113 global $wpdb;
104 114
105 115 $folder_id = (int) $folder_id;
106 116 $user_id = (int) $user_id;
107 - $prev = desktop_mode_files_get_folder( $folder_id );
117 + $prev = openstation_files_get_folder( $folder_id );
108 118 if ( ! $prev ) {
109 - return new WP_Error( 'desktop_mode_files_not_found', __( 'Folder not found.', 'desktop-mode' ), array( 'status' => 404 ) );
119 + return new WP_Error( 'openstation_files_not_found', __( 'Folder not found.', 'desktop-mode' ), array( 'status' => 404 ) );
110 120 }
111 121 if ( (int) $prev['owner_id'] !== $user_id ) {
112 - return new WP_Error( 'desktop_mode_files_forbidden', __( 'You cannot edit this folder.', 'desktop-mode' ), array( 'status' => 403 ) );
122 + return new WP_Error( 'openstation_files_forbidden', __( 'You cannot edit this folder.', 'desktop-mode' ), array( 'status' => 403 ) );
113 123 }
114 124
115 125 $set = array();
116 126 $fmt = array();
@@ -117,9 +127,9 @@
117 127
118 128 if ( isset( $changes['name'] ) ) {
119 129 $name = sanitize_text_field( (string) $changes['name'] );
120 130 if ( '' === $name ) {
121 - return new WP_Error( 'desktop_mode_files_missing_name', __( 'Folder name cannot be empty.', 'desktop-mode' ), array( 'status' => 400 ) );
131 + return new WP_Error( 'openstation_files_missing_name', __( 'Folder name cannot be empty.', 'desktop-mode' ), array( 'status' => 400 ) );
122 132 }
123 133 $set['name'] = $name;
124 134 $fmt[] = '%s';
125 135 }
@@ -124,11 +134,11 @@
124 134 $fmt[] = '%s';
125 135 }
126 136 if ( isset( $changes['share_mode'] ) ) {
127 137 $mode = (string) $changes['share_mode'];
128 - $modes = desktop_mode_files_share_modes();
138 + $modes = openstation_files_share_modes();
129 139 if ( ! in_array( $mode, $modes, true ) ) {
130 - return new WP_Error( 'desktop_mode_files_invalid_share_mode', __( 'Invalid share mode.', 'desktop-mode' ), array( 'status' => 400 ) );
140 + return new WP_Error( 'openstation_files_invalid_share_mode', __( 'Invalid share mode.', 'desktop-mode' ), array( 'status' => 400 ) );
131 141 }
132 142 $set['share_mode'] = $mode;
133 143 $fmt[] = '%s';
134 144 }
@@ -139,16 +149,16 @@
139 149 if ( empty( $set ) ) {
140 150 return true;
141 151 }
142 152
143 - $now = desktop_mode_files_now_ms();
153 + $now = openstation_files_now_ms();
144 154 $set['updated_at_ms'] = $now;
145 155 $fmt[] = '%d';
146 156
147 - $tables = desktop_mode_files_table_names();
157 + $tables = openstation_files_table_names();
148 158 $ok = $wpdb->update( $tables['folders'], $set, array( 'id' => $folder_id ), $fmt, array( '%d' ) );
149 159 if ( false === $ok ) {
150 - return new WP_Error( 'desktop_mode_files_update_failed', __( 'Failed to update folder.', 'desktop-mode' ), array( 'status' => 500 ) );
160 + return new WP_Error( 'openstation_files_update_failed', __( 'Failed to update folder.', 'desktop-mode' ), array( 'status' => 500 ) );
151 161 }
152 162
153 163 // Propagate rename to every placement that POINTS AT this folder
154 164 // (file_type='folder', file_ref=folder_id) by bumping their
@@ -176,9 +186,9 @@
176 186 * @param int $folder_id Folder being renamed.
177 187 * @param int $user_id Acting user (folder owner).
178 188 */
179 189 $where = (string) apply_filters(
180 - 'desktop_mode_folder_rename_bump_where',
190 + 'openstation_folder_rename_bump_where',
181 191 $wpdb->prepare(
182 192 "file_type = 'folder' AND file_ref = %s",
183 193 (string) $folder_id
184 194 ),
@@ -206,9 +216,9 @@
206 216 * @param string $old_name Previous name.
207 217 * @param int $user_id Acting user (folder owner).
208 218 */
209 219 do_action(
210 - 'desktop_mode_folder_renamed',
220 + 'openstation_folder_renamed',
211 221 $folder_id,
212 222 (string) $set['name'],
213 223 (string) $prev['name'],
214 224 $user_id
@@ -214,9 +224,9 @@
214 224 $user_id
215 225 );
216 226 }
217 227
218 - $next = desktop_mode_files_get_folder( $folder_id );
228 + $next = openstation_files_get_folder( $folder_id );
219 229
220 230 /**
221 231 * Fires after a folder is updated.
222 232 *
@@ -223,21 +233,21 @@
223 233 * @param int $id Folder id.
224 234 * @param array $next Row after.
225 235 * @param array $prev Row before.
226 236 */
227 - do_action( 'desktop_mode_folder_updated', $folder_id, $next, $prev );
237 + do_action( 'openstation_folder_updated', $folder_id, $next, $prev );
228 238
229 239 if ( isset( $changes['share_mode'] ) || array_key_exists( 'share_meta', $changes ) ) {
230 240 /**
231 241 * Fires after a folder's share state changes (mode or
232 242 * meta). Plugins listening for sharing events can subscribe
233 - * to this rather than diff `desktop_mode_folder_updated`.
243 + * to this rather than diff `openstation_folder_updated`.
234 244 *
235 245 * @param int $id Folder id.
236 246 * @param array $next Row after.
237 247 * @param array $prev Row before.
238 248 */
239 - do_action( 'desktop_mode_folder_shared', $folder_id, $next, $prev );
249 + do_action( 'openstation_folder_shared', $folder_id, $next, $prev );
240 250 }
241 251
242 252 return true;
243 253 }
@@ -269,17 +279,17 @@
269 279 * @param int $folder_id Folder id.
270 280 * @param int $user_id Acting user.
271 281 * @return true|WP_Error
272 282 */
273 -function desktop_mode_files_delete_folder( $folder_id, $user_id ) {
283 +function openstation_files_delete_folder( $folder_id, $user_id ) {
274 284 $folder_id = (int) $folder_id;
275 285 $user_id = (int) $user_id;
276 - $row = desktop_mode_files_get_folder( $folder_id );
286 + $row = openstation_files_get_folder( $folder_id );
277 287 if ( ! $row ) {
278 - return new WP_Error( 'desktop_mode_files_not_found', __( 'Folder not found.', 'desktop-mode' ), array( 'status' => 404 ) );
288 + return new WP_Error( 'openstation_files_not_found', __( 'Folder not found.', 'desktop-mode' ), array( 'status' => 404 ) );
279 289 }
280 290 if ( (int) $row['owner_id'] !== $user_id ) {
281 - return new WP_Error( 'desktop_mode_files_forbidden', __( 'You cannot delete this folder.', 'desktop-mode' ), array( 'status' => 403 ) );
291 + return new WP_Error( 'openstation_files_forbidden', __( 'You cannot delete this folder.', 'desktop-mode' ), array( 'status' => 403 ) );
282 292 }
283 293
284 294 /**
285 295 * Filter whether a folder delete is allowed to proceed. Default
@@ -297,9 +307,9 @@
297 307 * @param int $user_id Acting user (folder owner).
298 308 * @param array $row Folder row.
299 309 */
300 310 $can = apply_filters(
301 - 'desktop_mode_files_can_delete_folder',
311 + 'openstation_files_can_delete_folder',
302 312 true,
303 313 $folder_id,
304 314 $user_id,
305 315 $row
@@ -308,9 +318,9 @@
308 318 return $can;
309 319 }
310 320 if ( true !== $can ) {
311 321 return new WP_Error(
312 - 'desktop_mode_files_delete_vetoed',
322 + 'openstation_files_delete_vetoed',
313 323 __( 'A plugin blocked this folder from being deleted.', 'desktop-mode' ),
314 324 array( 'status' => 403 )
315 325 );
316 326 }
@@ -324,18 +334,18 @@
324 334 * @param int $folder_id Folder being deleted.
325 335 * @param int $user_id Acting user.
326 336 * @param array $row Folder row.
327 337 */
328 - do_action( 'desktop_mode_files_before_delete_folder', $folder_id, $user_id, $row );
338 + do_action( 'openstation_files_before_delete_folder', $folder_id, $user_id, $row );
329 339
330 340 $visited = array();
331 341 $summary = array(
332 - 'folders_deleted' => array(),
333 - 'shares_revoked' => array(),
334 - 'placements_pointing' => array(),
335 - 'placements_inside' => array(),
342 + 'folders_deleted' => array(),
343 + 'shares_revoked' => array(),
344 + 'placements_pointing' => array(),
345 + 'placements_inside' => array(),
336 346 );
337 - $result = desktop_mode_files_delete_folder_recursive( $folder_id, $user_id, $visited, $summary );
347 + $result = openstation_files_delete_folder_recursive( $folder_id, $user_id, $visited, $summary );
338 348 if ( is_wp_error( $result ) ) {
339 349 return $result;
340 350 }
341 351
@@ -357,9 +367,9 @@
357 367 * @param int $user_id Acting user.
358 368 * @param array $summary Cascade summary (see above).
359 369 */
360 370 do_action(
361 - 'desktop_mode_files_after_delete_folder_cascade',
371 + 'openstation_files_after_delete_folder_cascade',
362 372 $folder_id,
363 373 $user_id,
364 374 $summary
365 375 );
@@ -367,9 +377,9 @@
367 377 return true;
368 378 }
369 379
370 380 /**
371 - * Recursive worker for {@see desktop_mode_files_delete_folder}.
381 + * Recursive worker for {@see openstation_files_delete_folder}.
372 382 *
373 383 * Walks the folder's sub-tree (sub-folders the same owner owns),
374 384 * then on the way back up cleans up share rows, decisions,
375 385 * pointing-at placements, contained placements, and the folder
@@ -391,9 +401,9 @@
391 401 * `placements_inside`); initialized when
392 402 * null.
393 403 * @return true|WP_Error
394 404 */
395 -function desktop_mode_files_delete_folder_recursive( $folder_id, $user_id, &$visited, &$summary = null ) {
405 +function openstation_files_delete_folder_recursive( $folder_id, $user_id, &$visited, &$summary = null ) {
396 406 global $wpdb;
397 407 $folder_id = (int) $folder_id;
398 408 if ( isset( $visited[ $folder_id ] ) ) {
399 409 return true;
@@ -398,29 +408,29 @@
398 408 if ( isset( $visited[ $folder_id ] ) ) {
399 409 return true;
400 410 }
401 411 $visited[ $folder_id ] = true;
402 - $row = desktop_mode_files_get_folder( $folder_id );
412 + $row = openstation_files_get_folder( $folder_id );
403 413 if ( ! $row ) {
404 414 return true;
405 415 }
406 416
407 - $tables = desktop_mode_files_table_names();
417 + $tables = openstation_files_table_names();
408 418 if ( null === $summary || ! is_array( $summary ) ) {
409 419 $summary = array(
410 - 'folders_deleted' => array(),
411 - 'shares_revoked' => array(),
412 - 'placements_pointing' => array(),
413 - 'placements_inside' => array(),
420 + 'folders_deleted' => array(),
421 + 'shares_revoked' => array(),
422 + 'placements_pointing' => array(),
423 + 'placements_inside' => array(),
414 424 );
415 425 }
416 426
417 427 // 1) Recurse into sub-folders the owner owns. A sub-folder
418 - // owned by SOMEONE ELSE (e.g. a writer recipient who built
419 - // their own folder inside this one) is left intact —
420 - // deleting the parent only severs the containment for the
421 - // owner; the sub-folder's owner can still reach it through
422 - // their own placements.
428 + // owned by SOMEONE ELSE (e.g. a writer recipient who built
429 + // their own folder inside this one) is left intact —
430 + // deleting the parent only severs the containment for the
431 + // owner; the sub-folder's owner can still reach it through
432 + // their own placements.
423 433 $sub_folder_refs = (array) $wpdb->get_col(
424 434 $wpdb->prepare(
425 435 "SELECT DISTINCT file_ref FROM {$tables['placements']}
426 436 WHERE parent_id = %d
@@ -432,18 +442,18 @@
432 442 $sub_id = (int) $ref;
433 443 if ( $sub_id <= 0 || $sub_id === $folder_id ) {
434 444 continue;
435 445 }
436 - $sub_row = desktop_mode_files_get_folder( $sub_id );
446 + $sub_row = openstation_files_get_folder( $sub_id );
437 447 if ( $sub_row && (int) $sub_row['owner_id'] === $user_id ) {
438 - desktop_mode_files_delete_folder_recursive( $sub_id, $user_id, $visited, $summary );
448 + openstation_files_delete_folder_recursive( $sub_id, $user_id, $visited, $summary );
439 449 }
440 450 }
441 451
442 452 // 2) Revoke every share for this folder: shares table + per-
443 - // user decisions table. The folder is going away, so the
444 - // rows are obsolete; leaving them would let the heartbeat
445 - // keep delivering a `removed` tombstone for ghost rows.
453 + // user decisions table. The folder is going away, so the
454 + // rows are obsolete; leaving them would let the heartbeat
455 + // keep delivering a `removed` tombstone for ghost rows.
446 456 // `target_type` scoping is load-bearing: `folder_id` carries a
447 457 // STORED-FILE id on `target_type='file'` rows — without the
448 458 // predicate this cascade would revoke an unrelated user's file
449 459 // share whose id collides with the deleted folder's.
@@ -453,9 +463,9 @@
453 463 $folder_id
454 464 ),
455 465 ARRAY_A
456 466 );
457 - $share_ids = array();
467 + $share_ids = array();
458 468 foreach ( $share_rows as $share_row ) {
459 469 $share_ids[] = (int) $share_row['id'];
460 470 }
461 471 if ( ! empty( $share_ids ) ) {
@@ -479,11 +489,11 @@
479 489 // don't have to also subscribe to the cascade-specific
480 490 // hook. `$row` carries the pre-delete share data so
481 491 // listeners can read principal / capability for audit.
482 492 foreach ( $share_rows as $share_row ) {
483 - /** @see desktop_mode_folder_share_revoke */
493 + /** @see openstation_folder_share_revoke */
484 494 do_action(
485 - 'desktop_mode_files_share_revoked',
495 + 'openstation_files_share_revoked',
486 496 (int) $share_row['id'],
487 497 $share_row,
488 498 $user_id
489 499 );
@@ -494,9 +504,9 @@
494 504 );
495 505 }
496 506
497 507 // 3) Placements POINTING AT this folder (every recipient's
498 - // accept-created root placement, plus the owner's own).
508 + // accept-created root placement, plus the owner's own).
499 509 $pointing_ids = (array) $wpdb->get_col(
500 510 $wpdb->prepare(
501 511 "SELECT id FROM {$tables['placements']}
502 512 WHERE file_type = 'folder' AND file_ref = %s",
@@ -503,9 +513,9 @@
503 513 (string) $folder_id
504 514 )
505 515 );
506 516 foreach ( $pointing_ids as $pid ) {
507 - desktop_mode_files_write_tombstone( 'placement', (int) $pid );
517 + openstation_files_write_tombstone( 'placement', (int) $pid );
508 518 }
509 519 if ( ! empty( $pointing_ids ) ) {
510 520 $placeholders = implode( ',', array_fill( 0, count( $pointing_ids ), '%d' ) );
511 521 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
@@ -521,13 +531,13 @@
521 531 );
522 532 }
523 533
524 534 // 4) Placements INSIDE this folder. After step 1 the sub-folder
525 - // placements have been recursively handled for owner-owned
526 - // sub-folders; whatever remains here (loose post / link /
527 - // user / etc. placements, plus orphan folder placements
528 - // whose folder we did NOT recurse into because someone else
529 - // owns it) gets deleted with a tombstone each.
535 + // placements have been recursively handled for owner-owned
536 + // sub-folders; whatever remains here (loose post / link /
537 + // user / etc. placements, plus orphan folder placements
538 + // whose folder we did NOT recurse into because someone else
539 + // owns it) gets deleted with a tombstone each.
530 540 $inside_rows = (array) $wpdb->get_results(
531 541 $wpdb->prepare(
532 542 "SELECT * FROM {$tables['placements']} WHERE parent_id = %d",
533 543 $folder_id
@@ -533,12 +543,12 @@
533 543 $folder_id
534 544 ),
535 545 ARRAY_A
536 546 );
537 - $inside_ids = array();
547 + $inside_ids = array();
538 548 foreach ( $inside_rows as $inside_row ) {
539 549 $inside_ids[] = (int) $inside_row['id'];
540 - desktop_mode_files_write_tombstone( 'placement', (int) $inside_row['id'] );
550 + openstation_files_write_tombstone( 'placement', (int) $inside_row['id'] );
541 551 }
542 552 if ( ! empty( $inside_ids ) ) {
543 553 $wpdb->delete( $tables['placements'], array( 'parent_id' => $folder_id ), array( '%d' ) );
544 554 // Upload placements carry real bytes — run the stored-files
@@ -544,14 +554,14 @@
544 554 // Upload placements carry real bytes — run the stored-files
545 555 // deletion contract now that the rows are gone. Direct
546 556 // guarded call (not the public unplaced action) so cascade
547 557 // hook semantics for other types stay unchanged.
548 - if ( function_exists( 'desktop_mode_stored_files_handle_unplaced' ) ) {
558 + if ( function_exists( 'openstation_stored_files_handle_unplaced' ) ) {
549 559 foreach ( $inside_rows as $inside_row ) {
550 560 if ( 'upload' === (string) $inside_row['file_type'] ) {
551 - desktop_mode_stored_files_handle_unplaced(
561 + openstation_stored_files_handle_unplaced(
552 562 (int) $inside_row['id'],
553 - desktop_mode_files_normalize_placement_row( $inside_row )
563 + openstation_files_normalize_placement_row( $inside_row )
554 564 );
555 565 }
556 566 }
557 567 }
@@ -563,23 +573,23 @@
563 573
564 574 // 5) The folder row itself + its tombstone.
565 575 $ok = $wpdb->delete( $tables['folders'], array( 'id' => $folder_id ), array( '%d' ) );
566 576 if ( false === $ok ) {
567 - return new WP_Error( 'desktop_mode_files_delete_failed', __( 'Failed to delete folder.', 'desktop-mode' ), array( 'status' => 500 ) );
577 + return new WP_Error( 'openstation_files_delete_failed', __( 'Failed to delete folder.', 'desktop-mode' ), array( 'status' => 500 ) );
568 578 }
569 - desktop_mode_files_write_tombstone( 'folder', $folder_id );
579 + openstation_files_write_tombstone( 'folder', $folder_id );
570 580 $summary['folders_deleted'][] = $folder_id;
571 581
572 582 /**
573 583 * Fires after a folder is deleted. Plugins listening for share
574 584 * lifecycle can subscribe alongside
575 - * `desktop_mode_files_share_revoked` if they want to react to
585 + * `openstation_files_share_revoked` if they want to react to
576 586 * cascade-revokes triggered by folder deletion.
577 587 *
578 588 * @param int $id Folder id.
579 589 * @param array $row Removed row.
580 590 */
581 - do_action( 'desktop_mode_folder_deleted', $folder_id, $row );
591 + do_action( 'openstation_folder_deleted', $folder_id, $row );
582 592
583 593 return true;
584 594 }
585 595
@@ -592,11 +602,11 @@
592 602 * Default false — trashed folders
593 603 * resolve to null.
594 604 * @return array|null
595 605 */
596 -function desktop_mode_files_get_folder( $folder_id, $include_trashed = false ) {
606 +function openstation_files_get_folder( $folder_id, $include_trashed = false ) {
597 607 global $wpdb;
598 - $tables = desktop_mode_files_table_names();
608 + $tables = openstation_files_table_names();
599 609 $row = $wpdb->get_row(
600 610 $wpdb->prepare( "SELECT * FROM {$tables['folders']} WHERE id = %d", (int) $folder_id ),
601 611 ARRAY_A
602 612 );
@@ -607,20 +617,20 @@
607 617 // default — recycle-bin callers pass `true` to opt in.
608 618 if ( ! $include_trashed && ! empty( $row['trashed_at_ms'] ) ) {
609 619 return null;
610 620 }
611 - return desktop_mode_files_normalize_folder_row( $row );
621 + return openstation_files_normalize_folder_row( $row );
612 622 }
613 623
614 624 /**
615 625 * Folders visible to `$user_id`. Returns the folders the viewer
616 626 * owns; sharing.php merges shared folders in via the
617 - * `desktop_mode_files_visible_folders` filter.
627 + * `openstation_files_visible_folders` filter.
618 628 *
619 629 * @param int $user_id Viewer.
620 630 * @return array[]
621 631 */
622 -function desktop_mode_files_get_visible_folders( $user_id ) {
632 +function openstation_files_get_visible_folders( $user_id ) {
623 633 global $wpdb;
624 634 $user_id = (int) $user_id;
625 635 if ( $user_id <= 0 ) {
626 636 return array();
@@ -625,9 +635,9 @@
625 635 if ( $user_id <= 0 ) {
626 636 return array();
627 637 }
628 638
629 - $tables = desktop_mode_files_table_names();
639 + $tables = openstation_files_table_names();
630 640 $rows = $wpdb->get_results(
631 641 $wpdb->prepare(
632 642 "SELECT * FROM {$tables['folders']}
633 643 WHERE owner_id = %d AND trashed_at_ms IS NULL",
@@ -634,16 +644,16 @@
634 644 $user_id
635 645 ),
636 646 ARRAY_A
637 647 );
638 - $out = array();
648 + $out = array();
639 649 foreach ( (array) $rows as $row ) {
640 - $out[] = desktop_mode_files_normalize_folder_row( $row );
650 + $out[] = openstation_files_normalize_folder_row( $row );
641 651 }
642 652
643 653 /**
644 654 * Filter the folders visible to a viewer. sharing.php's
645 - * `desktop_mode_files_compute_visible_folders` (priority 5)
655 + * `openstation_files_compute_visible_folders` (priority 5)
646 656 * merges accepted shares and `share_mode='all'` folders onto
647 657 * this list.
648 658 *
649 659 * @param array[] $folders Folders the viewer owns.
@@ -648,9 +658,9 @@
648 658 *
649 659 * @param array[] $folders Folders the viewer owns.
650 660 * @param int $user_id Viewer.
651 661 */
652 - return (array) apply_filters( 'desktop_mode_files_visible_folders', $out, $user_id );
662 + return (array) apply_filters( 'openstation_files_visible_folders', $out, $user_id );
653 663 }
654 664
655 665 /**
656 666 * @internal
@@ -657,9 +667,9 @@
657 667 *
658 668 * @param array $row Raw wpdb row.
659 669 * @return array
660 670 */
661 -function desktop_mode_files_normalize_folder_row( $row ) {
671 +function openstation_files_normalize_folder_row( $row ) {
662 672 $meta_raw = isset( $row['share_meta'] ) ? (string) $row['share_meta'] : '';
663 673 $meta = '' !== $meta_raw ? json_decode( $meta_raw, true ) : null;
664 674 return array(
665 675 'id' => (int) $row['id'],