PluginProbe
Media Sync / trunk
Media Sync vtrunk
1.5.3 1.5.2 1.5.1 trunk 0.1.0 0.1.1 0.1.2 0.1.3 0.1.4 0.1.5 0.1.6 1.0.2 1.0.3 1.0.4 1.1.0 1.1.1 1.1.2 1.1.3 1.1.5 1.1.6 1.1.7 1.1.8 1.2.0 1.2.2 1.2.3 All 44 releases
media-sync / media-sync.php

media-sync.php in Media Sync trunk, at media-sync.php

269 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Plugin Name: Media Sync
5 * Plugin URI: https://wordpress.org/plugins/media-sync/
6 * Description: Simple plugin to scan uploads directory and bring files to Media Library.
7 * Version: 1.5.3
8 * Requires at least: 5.3
9 * Requires PHP: 7.4
10 * Author: Media Sync Team
11 * Author URI: https://mediasyncplugin.com/?utm_source=wordpress_dashboard&utm_medium=plugins_page&utm_campaign=pdal
12 * License: GPLv2+
13 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
14 * Text Domain: media-sync
15 * Domain Path: /languages
16 */
17
18
19 // Exit if accessed directly
20 if ( ! defined( 'ABSPATH' ) ) exit;
21
22 if ( ! is_admin() ) {
23 return;
24 }
25
26 include( plugin_dir_path(__FILE__) . 'includes/MediaSync.class.php');
27
28
29 add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'media_sync_link_to_main_plugin_page' );
30
31 /**
32 * Add link below plugin name on 'Plugins' page
33 *
34 * @since 0.1.0
35 */
36 function media_sync_link_to_main_plugin_page( $links ) {
37 $title = __('Media Sync', 'media-sync');
38 $links[] = '<a href="'. esc_url( get_admin_url(null, 'upload.php?page=media-sync-page') ) .'">' . $title . '</a>';
39 $links[] = '<a href="https://mediasyncplugin.com/?utm_source=wordpress_dashboard&utm_medium=plugins_page&utm_campaign=pdl" target="_blank">' . __('Media Sync Pro', 'media-sync') . '</a>';
40 return $links;
41 }
42
43
44
45 add_action( 'admin_menu', 'media_sync_add_menu_items' );
46
47 /**
48 * Add menu item for this plugin
49 *
50 * @since 0.1.0
51 */
52 function media_sync_add_menu_items() {
53
54 $title = __('Media Sync', 'media-sync');
55
56 // Add sub item to Media menu
57 if(MediaSync::media_sync_user_has_general_access()) {
58 add_media_page( $title, $title, 'read', 'media-sync-page', 'media_sync_main_page' );
59 }
60
61 // Show options menu only if user can manage options
62 if ( current_user_can( 'manage_options' ) ) {
63
64 // Add sub item to Settings menu
65 add_options_page( $title, $title, 'manage_options', 'media-sync-options', 'media_sync_options_page' );
66
67 // Prepare plugin settings
68 add_action( 'admin_init', 'media_sync_options_setup' );
69 }
70 }
71
72
73 add_action( 'admin_enqueue_scripts', 'media_sync_load_admin_scripts' );
74
75 /**
76 * Load Admin CSS and JS files
77 *
78 * @since 0.1.0
79 * @param string $hook
80 * @return void
81 */
82 function media_sync_load_admin_scripts( $hook ) {
83
84 if ( !($hook == 'media_page_media-sync-page' || $hook == 'settings_page_media-sync-options') ) {
85 return;
86 }
87
88 $plugin_data = get_file_data(__FILE__, array('v' => 'Version'), false);
89 $version = !empty($plugin_data['v']) ? $plugin_data['v'] : '1.2.3';
90
91 $js_dir = plugin_dir_url( __FILE__ ) . 'admin/js/';
92 $css_dir = plugin_dir_url( __FILE__ ) . 'admin/css/';
93
94 wp_register_script( 'media-sync-js-admin-script', $js_dir . 'script.js', array('jquery'), $version, true );
95 wp_enqueue_script( 'media-sync-js-admin-script' );
96
97 wp_enqueue_script( 'media-sync-js-admin-ajax-script', $js_dir . 'ajax_script.js', array('jquery'), $version );
98 wp_localize_script( 'media-sync-js-admin-ajax-script', 'ajax_data', array(
99 'ajax_url' => admin_url( 'admin-ajax.php' ),
100 'security' => wp_create_nonce( "media_sync_import_files" )
101 ));
102
103 wp_register_style( 'media-sync-css-admin-style', $css_dir . 'style.css', '', $version );
104 wp_enqueue_style( 'media-sync-css-admin-style' );
105 }
106
107
108
109 add_action( 'wp_ajax_media_sync_import_files', 'media_sync_import_files' );
110
111 /**
112 * Ajax action to import selected file
113 *
114 * @since 0.1.0
115 * @return void
116 */
117 function media_sync_import_files() {
118 MediaSync::media_sync_import_files();
119 }
120
121
122
123 add_action( 'plugins_loaded', 'media_sync_load_plugin_textdomain' );
124
125 /**
126 * Loads plugin translated strings
127 *
128 * @since 0.1.4
129 * @return void
130 */
131 function media_sync_load_plugin_textdomain() {
132 load_plugin_textdomain( 'media-sync', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
133 }
134
135
136
137 add_action('restrict_manage_posts', 'media_sync_missing_media_library_filter');
138
139 /**
140 * Add filter in Media Library for finding missing files
141 *
142 * @since 1.0.0
143 * @return void
144 */
145 function media_sync_missing_media_library_filter()
146 {
147 require_once(ABSPATH . 'wp-admin/includes/screen.php');
148
149 // Skip if it's not Media Library
150 $scr = get_current_screen();
151 if (!is_admin() || !is_object($scr) || property_exists($scr, 'base') !== true || $scr->base !== 'upload') return;
152
153 // Get "missing files" filter from URL
154 $missing = MediaSync::sanitize_input_string(INPUT_GET, 'media_sync_missing_files');
155 ?>
156 <label for="filter-by-media-sync-missing-files"
157 class="screen-reader-text"><?= __('Filter by missing file', 'media-sync') ?></label>
158 <select name="media_sync_missing_files" id="filter-by-media-sync-missing-files">
159 <option
160 value=""<?= !$missing ? ' selected="selected"' : '' ?>><?= __('Filter by missing file', 'media-sync') ?></option>
161 <option
162 value="no"<?= $missing === 'no' ? ' selected="selected"' : '' ?>><?= __('With file', 'media-sync') ?></option>
163 <option
164 value="yes"<?= $missing === 'yes' ? ' selected="selected"' : '' ?>><?= __('Without file', 'media-sync') ?></option>
165 </select>
166 <?php
167 }
168
169
170
171 add_action('pre_get_posts','media_sync_missing_media_library_apply_filter');
172
173 /**
174 * Apply filter for Media Library items with or without missing files
175 *
176 * @since 1.0.0
177 * @param $query
178 * @return void
179 */
180 function media_sync_missing_media_library_apply_filter($query)
181 {
182 require_once(ABSPATH . 'wp-admin/includes/screen.php');
183
184 // Skip if it's not Media Library
185 $scr = get_current_screen();
186 if (!is_admin() || !is_object($scr) || property_exists($scr, 'base') !== true || $scr->base !== 'upload') return;
187
188 // Get "missing files" filter from URL
189 $missing = MediaSync::sanitize_input_string(INPUT_GET, 'media_sync_missing_files');
190
191 // Skip if "missing files" filter is not applied
192 if (empty($missing)) {
193 return;
194 }
195
196 // Prevent infinite loop
197 remove_action('pre_get_posts', __FUNCTION__);
198
199 // Get all media library items (to be able to check which ones do not have actual files)
200 $media_library_items = get_posts(
201 array_merge(
202 $query->query,
203 array(
204 'fields' => 'ids',
205 'posts_per_page' => -1
206 )
207 )
208 );
209
210 // Get missing files
211 $missing_files = array();
212 foreach ($media_library_items as $id) {
213 // Get absolute path for this file
214 $absolute_path = get_home_path() . str_replace(get_site_url(), "", wp_get_attachment_url($id));
215
216 // Strip double slashes (//) in absolute path
217 $absolute_path = preg_replace('/([^:])(\/{2,})/', '$1/', $absolute_path);
218
219 // If file doesn't actually exists (if it's missing)
220 if (!file_exists($absolute_path)) {
221 $missing_files[] = $id;
222 }
223 }
224
225 // Apply appropriate filter
226 if ($missing === 'yes') {
227 $query->set('post__in', !empty($missing_files) ? $missing_files : [0]);
228 }
229
230 if ($missing === 'no') {
231 $query->set('post__not_in', $missing_files);
232 }
233 }
234
235
236
237 /**
238 * Main function for "Media Sync" page
239 *
240 * @since 0.1.0
241 * @return void
242 */
243 function media_sync_main_page() {
244 MediaSync::media_sync_main_page();
245 }
246
247
248
249 /**
250 * Render settings page
251 *
252 * @since 1.1.0
253 * @return void
254 */
255 function media_sync_options_page() {
256 MediaSync::media_sync_options_page();
257 }
258
259
260
261 /**
262 * Prepare plugin settings
263 *
264 * @since 1.1.0
265 * @return void
266 */
267 function media_sync_options_setup() {
268 MediaSync::media_sync_options_setup();
269 }