PluginProbe
Media Cloud Sync / 1.0.0
Media Cloud Sync v1.0.0
1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 All 35 releases
media-cloud-sync / includes / admin.php

admin.php in Media Cloud Sync 1.0.0, at includes/admin.php

355 lines 12.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Dudlewebs\WPMCS;
3
4 defined('ABSPATH') || exit;
5
6 class Admin {
7 private static $instance = null;
8 private $assets_url;
9 private $version;
10 private $token;
11 private $script_suffix;
12
13 protected $hook_suffix = [];
14 /**
15 * Admin constructor.
16 * @since 1.0.0
17 */
18 public function __construct() {
19 $this->assets_url = WPMCS_ASSETS_URL;
20 $this->version = WPMCS_VERSION;
21 $this->token = WPMCS_TOKEN;
22 $this->script_suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
23
24 $plugin = plugin_basename(WPMCS_FILE);
25
26 // Create file directory on action do
27 add_action( $this->token.'_create_plugin_dir', [ $this, 'create_plugin_dir' ] );
28
29 // add action links to link to link list display on the plugins page.
30 add_filter("plugin_action_links_$plugin", [$this, 'plugin_action_links']);
31
32 // add our custom CSS classes to <body>
33 add_filter( 'admin_body_class', [ $this, 'admin_body_class' ] );
34 // Admin Init
35 add_action('admin_init', [$this, 'adminInit']);
36
37 add_action('admin_menu', [$this, 'add_menu'], 10);
38
39 add_action('admin_enqueue_scripts', [$this, 'admin_enqueue_scripts'], 10, 1);
40 add_action('admin_enqueue_scripts', [$this, 'admin_enqueue_styles'], 10, 1);
41 // Load media scripts
42 add_action( 'load-upload.php', [ $this, 'load_media_assets' ], 11 );
43 }
44
45 /**
46 * Method that is used on plugin initialization time
47 * @since 1.0.0
48 */
49 public function adminInit() {
50 if(get_option( $this->token.'_db_version' ) !== WPMCS_DB_VERSION) {
51 $database = Db::instance();
52 $database->do_database_upgrade();
53 }
54
55 if (get_option($this->token.'_do_activation_redirect', false) && !Utils::get_service()) {
56 delete_option($this->token.'_do_activation_redirect');
57 wp_redirect(admin_url('admin.php?page=' . $this->token . '-admin-ui#/configure'));
58 } else {
59 delete_option($this->token.'_do_activation_redirect');
60 }
61 }
62
63 /**
64 * Installation. Runs on activation.
65 *
66 * @access public
67 * @return void
68 * @since 1.0.0
69 */
70 public function install(){
71 $database = Db::instance();
72
73 $database->create_table();
74
75 // Redirection on activation
76 add_option($this->token.'_do_activation_redirect', true);
77
78 //Protect directories
79 $this->_protect_upload_dir();
80 }
81
82 /**
83 * Create plugin specific upload directory
84 * @since 1.0.0
85 */
86 public function create_plugin_dir() {
87 //Protect directories
88 $this->_protect_upload_dir();
89 }
90
91 /**
92 * Protect Directory from external access.
93 *
94 * @access private
95 * @return void
96 * @since 1.0.0
97 */
98 private function _protect_upload_dir(){
99 $upload_dir = wp_upload_dir();
100
101 $files = array(
102 array(
103 'base' => $upload_dir['basedir'] . '/' . Schema::getConstant('UPLOADS'),
104 'file' => '.htaccess',
105 'content' => 'Options -Indexes' . "\n"
106 . '<Files *.php>' . "\n"
107 . 'deny from all' . "\n"
108 . '</Files>'
109 ),
110 array(
111 'base' => $upload_dir['basedir'] . '/' . Schema::getConstant('UPLOADS'),
112 'file' => 'index.php',
113 'content' => '<?php ' . "\n"
114 . '// Silence is golden.'
115 )
116 );
117
118 foreach ($files as $file) {
119 if ((wp_mkdir_p($file['base'])) && (!file_exists(trailingslashit($file['base']) . $file['file'])) // If file not exist
120 ) {
121 if ($file_handle = @fopen(trailingslashit($file['base']) . $file['file'], 'w')) {
122 fwrite($file_handle, $file['content']);
123 fclose($file_handle);
124 }
125 }
126 }
127 }
128
129 /**
130 * Deactivation hook
131 */
132 public function deactivation(){
133 }
134
135 /**
136 * Load admin Javascript.
137 * @access public
138 * @return void
139 * @since 1.0.0
140 */
141 public function admin_enqueue_scripts($hook = '') {
142 if (!isset($this->hook_suffix) || empty($this->hook_suffix)) {
143 return;
144 }
145
146 $screen = get_current_screen();
147
148 if (in_array($screen->id, $this->hook_suffix, true)) {
149 // Enqueue WordPress media scripts.
150 if (!did_action('wp_enqueue_media')) {
151 wp_enqueue_media();
152 }
153
154 // Enqueue custom backend script.
155 wp_enqueue_script($this->token . '-backend', esc_url($this->assets_url) . 'js/backend.js', array('wp-i18n'), $this->version, true);
156
157 // Localize a script.
158 wp_localize_script(
159 $this->token . '-backend',
160 $this->token . '_object',
161 array(
162 'api_nonce' => wp_create_nonce('wp_rest'),
163 'root' => rest_url($this->token . '/v1/'),
164 'assets_url' => $this->assets_url,
165 )
166 );
167 }
168 }
169
170
171
172 /**
173 * Load admin CSS.
174 * @access public
175 * @return void
176 * @since 1.0.0
177 */
178 public function admin_enqueue_styles($hook = '') {
179 if ( ! isset($this->hook_suffix) || empty($this->hook_suffix)) {
180 return;
181 }
182 $screen = get_current_screen();
183 if (in_array($screen->id, $this->hook_suffix)) {
184 wp_register_style($this->token.'-backend',
185 esc_url($this->assets_url).'css/backend.css?nocache='.rand(0, 10000), array(), $this->version);
186 wp_enqueue_style($this->token.'-backend');
187 }
188 }
189
190 /**
191 * Show action links on the plugin screen.
192 *
193 * @param mixed $links Plugin Action links.
194 *
195 * @return array
196 */
197 public function plugin_action_links($links){
198 $action_links = array(
199 'getstarted' => '<a href="' . admin_url('admin.php?page=' . $this->token . '-admin-ui#/configure') . '">' . esc_html__('Get Started', 'media-cloud-sync') . '</a>',
200 'settings' => '<a href="' . admin_url('admin.php?page=' . $this->token . '-admin-ui/') . '">' . esc_html__('Settings', 'media-cloud-sync') . '</a>',
201 );
202
203 return array_merge($action_links, $links);
204 }
205
206
207
208
209 /**
210 * Add Admin Menu
211 */
212 public function add_menu() {
213 $this->hook_suffix[] = add_menu_page(
214 esc_html__('Media Cloud Sync', 'media-cloud-sync'),
215 esc_html__('Media Cloud Sync', 'media-cloud-sync'),
216 'manage_options',
217 $this->token.'-admin-ui',
218 array($this, 'adminUi'),
219 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAiIGhlaWdodD0iNjAiIHZpZXdCb3g9IjAgMCA5MCA2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcwLjMwODYgMjMuMDM1N0w3MC42MDQxIDI0LjUzOUw3Mi4xMzI0IDI0LjY0NTJDODAuODA4NiAyNS4yNDgzIDg3LjYzODYgMzIuNDE0MyA4Ny42Mzg2IDQxLjI1Qzg3LjYzODYgNTAuNTAzIDgwLjE2MDEgNTggNzAuOTYzOSA1OEgyMi40MDk2QzExLjE1OTEgNTggMiA0OC44MTU1IDIgMzcuNVYzNy40OTk4QzEuOTk5NDIgMzIuNDQ3IDMuODU4NjYgMjcuNTczNSA3LjIxODQ4IDIzLjgxNTVDMTAuNTc4MSAyMC4wNTc3IDE1LjIwMDggMTcuNjgwNSAyMC4xOTc3IDE3LjEzODNMMjEuMjYzNiAxNy4wMjI3TDIxLjc1NzMgMTYuMDcwOUMyNi4wOTc2IDcuNzAzOTEgMzQuODA1MyAyIDQ0LjgxOTMgMkg0NC44MTk3QzUwLjgzNDggMS45OTg2MyA1Ni42NjQ3IDQuMDk0MDEgNjEuMzEzOCA3LjkyOTg2QzY1Ljk2MyAxMS43NjU4IDY5LjE0MyAxNy4xMDQ4IDcwLjMwODYgMjMuMDM1N1oiIHN0cm9rZT0iIzAyMDQ0QSIgc3Ryb2tlLXdpZHRoPSI0Ii8+CjxjaXJjbGUgY3g9IjQ1IiBjeT0iMzMiIHI9IjEyIiBzdHJva2U9IiMwMjA0NEEiIHN0cm9rZS13aWR0aD0iNCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kXzE4MV80OTgpIj4KPHBhdGggZD0iTTQ4LjA4NyAzMC41VjQwLjYyNzFMNDYuMTk1NyA0MlYyNEw1Mi41IDMwLjVINDguMDg3WiIgZmlsbD0iIzAyMDQ0QSIvPgo8cGF0aCBkPSJNNDIuNDEzIDM1LjVWMjUuMzcyOUw0NC4zMDQ0IDI0VjQyTDM4IDM1LjVINDIuNDEzWiIgZmlsbD0iIzAyMDQ0QSIvPgo8L2c+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RfMTgxXzQ5OCIgeD0iMzAiIHk9IjE2IiB3aWR0aD0iMzAuNSIgaGVpZ2h0PSIzNCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0Lz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIvPgo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC4wMDc4NDMxNCAwIDAgMCAwIDAuMDE1Njg2MyAwIDAgMCAwIDAuMjkwMTk2IDAgMCAwIDAuMTYgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18xODFfNDk4Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzE4MV80OTgiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==',
220 25
221 );
222
223 $this->hook_suffix[] = add_submenu_page(
224 $this->token . '-admin-ui',
225 esc_html__('Dashboard', 'media-cloud-sync'),
226 esc_html__('Dashboard', 'media-cloud-sync'),
227 'manage_options',
228 $this->token . '-admin-ui' ,
229 array($this, 'adminUi')
230 );
231
232 if(Utils::is_service_enabled()) {
233 $this->hook_suffix[] = add_submenu_page(
234 $this->token . '-admin-ui',
235 esc_html__('Settings', 'media-cloud-sync'),
236 esc_html__('Settings', 'media-cloud-sync'),
237 'manage_options',
238 $this->token . '-admin-ui#/settings' ,
239 array($this, 'adminUi')
240 );
241 } else {
242 $this->hook_suffix[] = add_submenu_page(
243 $this->token . '-admin-ui',
244 esc_html__('Configure', 'media-cloud-sync'),
245 esc_html__('Configure', 'media-cloud-sync'),
246 'manage_options',
247 $this->token . '-admin-ui#/configure' ,
248 array($this, 'adminUi')
249 );
250 }
251 }
252
253 /**
254 * Calling view function for admin page components
255 */
256 public function adminUi() {
257 echo wp_kses_post(sprintf(
258 '<div id="%s_ui_root">
259 <div class="%s_loader">
260 <h1>%s</h1>
261 <p>%s</p>
262 </div>
263 </div>',
264 $this->token,
265 $this->token,
266 esc_html__('Media Cloud Sync By Dudlewebs','media-cloud-sync'),
267 esc_html__('Plugin is loading Please wait for a while..', 'media-cloud-sync')
268 ));
269
270 }
271
272
273 /**
274 * Load the media assets
275 */
276 public function load_media_assets() {
277 /** CSS */
278 wp_enqueue_style($this->token . '-media', esc_url($this->assets_url) . 'css/media.css', array(), $this->version);
279
280 /** JS */
281 wp_enqueue_script(
282 $this->token . '-media',
283 esc_url($this->assets_url) . 'js/media.js',
284 array(
285 'jquery',
286 'media-views',
287 'media-grid',
288 'wp-util'
289 ),
290 $this->version,
291 true
292 );
293
294 // Localize a script.
295 wp_localize_script(
296 $this->token . '-media',
297 $this->token . '_media_object',
298 array(
299 'file_details_nonce' => wp_create_nonce('get_media_provider_details'),
300 'admin_ajax_url' => admin_url('admin-ajax.php'),
301 'strings' => array(
302 'provider' => esc_html__("Provider: ", "media-cloud-sync"),
303 'region' => esc_html__("Region: ", "media-cloud-sync"),
304 'access' => esc_html__("Access: ", "media-cloud-sync"),
305 'access_private' => esc_html__("Private", "media-cloud-sync"),
306 'access_public' => esc_html__("Public", "media-cloud-sync"),
307 )
308 )
309 );
310 }
311
312
313 /**
314 * Add custom classes to the HTML body tag
315 *
316 * @param string $classes
317 *
318 * @return string
319 */
320 public function admin_body_class( $classes ) {
321 if ( ! $classes ) {
322 $classes = array();
323 } else {
324 $classes = explode( ' ', $classes );
325 }
326 $classes[] = $this->token.'_page';
327 /**
328 * Recommended way to target WP 3.8+
329 * http://make.wordpress.org/ui/2013/11/19/targeting-the-new-dashboard-design-in-a-post-mp6-world/
330 *
331 */
332 if ( version_compare( $GLOBALS['wp_version'], '3.8-alpha', '>' ) ) {
333 if ( ! in_array( 'mp6', $classes ) ) {
334 $classes[] = 'mp6';
335 }
336 }
337 return implode( ' ', $classes );
338 }
339
340
341 /**
342 * Ensures only one instance of Class is loaded or can be loaded.
343 *
344 * @return Main Class instance
345 * @since 1.0.0
346 * @static
347 */
348 public static function instance(){
349 if (is_null(self::$instance)) {
350 self::$instance = new self();
351 }
352 return self::$instance;
353 }
354
355 }