Enable Media Replace - Version 3.6.0

Version Description

Release date: October 11th, 2021 * New: Constant EMR_CAPABILITY can define extra user roles to allow and deny replacements; * New: Replacing an usual image with an SVG file will just replace all thumbnails by the main file; * New: Also replaces caption when set in Exif data (when replacing with updating all links); * Tweak: Added Now and Original options to Custom Date for usability; * Tweak: changes/updates to the banners from the EMR screen; * Fix: EMR now respects edit_other_posts permissions using default permissions; * Fix: EMR with ALLOW_UNFILTERED_UPLOADS enabled (and allowed role) will not limit non-allowed uploads; * Fix: some missing and wrong text-domains are now corrected (thanks @alexclassroom); * Fix: a missing dot in the plugin description was preventing the transaltions to properly work; * Fix: the plugin can now be uninstalled/deleted on PHP 8.

Download this release

Release Info

Developer petredobrescu
Plugin Icon 128x128 Enable Media Replace
Version 3.6.0
Comparing to
See all releases

Code changes from version 3.5.0 to 3.6.0

classes/emr-plugin.php CHANGED
@@ -10,8 +10,36 @@ class EnableMediaReplacePlugin
10
  protected $plugin_path;
11
  private static $instance;
12
 
 
 
 
13
  public function __construct()
14
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  $this->plugin_actions(); // init
16
  }
17
 
@@ -45,7 +73,7 @@ class EnableMediaReplacePlugin
45
  // content filters
46
  add_filter('media_row_actions', array($this,'add_media_action'), 10, 2);
47
  add_action('attachment_submitbox_misc_actions', array($this,'admin_date_replaced_media_on_edit_media_screen'), 91 );
48
- add_filter('upload_mimes', array($this,'add_mime_types'), 1, 1);
49
 
50
  // notices
51
  add_action('admin_notices', array($this,'display_notices'));
@@ -53,7 +81,7 @@ class EnableMediaReplacePlugin
53
  add_action('wp_ajax_emr_dismiss_notices', array($this,'dismiss_notices'));
54
 
55
  // editors
56
- add_action( 'add_meta_boxes', function () { add_meta_box('emr-replace-box', __('Replace Media', 'enable-media-replace'), array($this, 'replace_meta_box'), 'attachment', 'side', 'low'); } );
57
  add_filter('attachment_fields_to_edit', array($this, 'attachment_editor'), 10, 2);
58
 
59
  // shortcode
@@ -65,7 +93,7 @@ class EnableMediaReplacePlugin
65
  add_filter('wp_get_attachment_image_src',array($this, 'attempt_uncache_image'), 10, 4);
66
 
67
  // adds a metabox to list thumbnails. This is a cache reset hidden as feature.
68
- add_action( 'add_meta_boxes', function () { add_meta_box('emr-showthumbs-box', __('Replaced Thumbnails Preview', 'enable-media-replace'), array($this, 'show_thumbs_box'), 'attachment', 'side', 'low'); } );
69
  add_filter('postbox_classes_attachment_emr-showthumbs-box', function($classes) { $classes[] = 'closed'; return $classes; });
70
  }
71
 
@@ -91,7 +119,7 @@ class EnableMediaReplacePlugin
91
  load_plugin_textdomain( 'enable-media-replace', false, basename(dirname(EMR_ROOT_FILE) ) . '/languages' );
92
 
93
  // Load Submodules
94
-
95
  $notices = Notices::getInstance();
96
 
97
  // Enqueue notices
@@ -122,6 +150,7 @@ class EnableMediaReplacePlugin
122
  // @todo Later this should be move to it's own controller, and built view from there.
123
  if ( $action == 'media_replace' ) {
124
  if ( array_key_exists("attachment_id", $_GET) && intval($_GET["attachment_id"]) > 0) {
 
125
  require_once($this->plugin_path . "views/popup.php"); // warning variables like $action be overwritten here.
126
  }
127
  }
@@ -165,19 +194,24 @@ class EnableMediaReplacePlugin
165
  'dateFormat' => $this->convertdate(get_option( 'date_format' )),
166
  'maxfilesize' => wp_max_upload_size(),
167
  'allowed_mime' => $mimes,
168
-
169
  );
170
 
 
 
 
 
 
 
 
171
 
172
  if (Log::debugIsActive())
173
  $emr_options['is_debug'] = true;
174
 
175
  wp_localize_script('emr_admin', 'emr_options', $emr_options);
176
-
177
  }
178
 
179
  /** Utility function for the Jquery UI Datepicker */
180
- function convertdate( $sFormat ) {
181
  switch( $sFormat ) {
182
  //Predefined WP date formats
183
  case 'F j, Y':
@@ -196,6 +230,21 @@ class EnableMediaReplacePlugin
196
  }
197
  }
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  /** Get the URL to the media replace page
200
  * @param $attach_id The attachment ID to replace
201
  * @return Admin URL to the page.
@@ -213,6 +262,20 @@ class EnableMediaReplacePlugin
213
 
214
  }
215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  public function replace_meta_box($post)
217
  {
218
 
@@ -233,6 +296,9 @@ class EnableMediaReplacePlugin
233
 
234
  public function show_thumbs_box($post)
235
  {
 
 
 
236
  wp_enqueue_style('emr_edit-attachment');
237
 
238
  $meta = wp_get_attachment_metadata($post->ID);
@@ -267,6 +333,10 @@ class EnableMediaReplacePlugin
267
  public function attachment_editor($form_fields, $post)
268
  {
269
  $screen = null;
 
 
 
 
270
  if (function_exists('get_current_screen'))
271
  {
272
  $screen = get_current_screen();
@@ -293,17 +363,23 @@ class EnableMediaReplacePlugin
293
  * @param array $mime_types
294
  * @return array
295
  */
 
296
  public function add_mime_types($mime_types)
297
  {
298
  $mime_types['dat'] = 'text/plain'; // Adding .dat extension
299
  return $mime_types;
300
  }
301
-
302
  /**
303
  * Function called by filter 'media_row_actions'
304
  * Enables linking to EMR straight from the media library
305
  */
306
  public function add_media_action( $actions, $post) {
 
 
 
 
 
307
  $url = $this->getMediaReplaceURL($post->ID);
308
  $action = "media_replace";
309
  $editurl = wp_nonce_url( $url, $action );
10
  protected $plugin_path;
11
  private static $instance;
12
 
13
+ private $user_cap = false;
14
+ private $general_cap = false;
15
+
16
  public function __construct()
17
  {
18
+ add_action('plugins_loaded', array($this, 'runtime'));
19
+ }
20
+
21
+ public function runtime()
22
+ {
23
+ if (EMR_CAPABILITY !== false)
24
+ {
25
+ if (is_array(EMR_CAPABILITY))
26
+ {
27
+ $this->general_cap = EMR_CAPABILITY[0];
28
+ $this->user_cap = EMR_CAPABILITY[1];
29
+
30
+ if (! current_user_can($this->general_cap) && ! current_user_can($this->user_cap))
31
+ return;
32
+ }
33
+ else
34
+ {
35
+ $this->general_cap = EMR_CAPABILITY;
36
+ if (! current_user_can($this->general_cap))
37
+ return;
38
+ }
39
+ }
40
+ elseif (! current_user_can('upload_files'))
41
+ return;
42
+
43
  $this->plugin_actions(); // init
44
  }
45
 
73
  // content filters
74
  add_filter('media_row_actions', array($this,'add_media_action'), 10, 2);
75
  add_action('attachment_submitbox_misc_actions', array($this,'admin_date_replaced_media_on_edit_media_screen'), 91 );
76
+ //add_filter('upload_mimes', array($this,'add_mime_types'), 1, 1);
77
 
78
  // notices
79
  add_action('admin_notices', array($this,'display_notices'));
81
  add_action('wp_ajax_emr_dismiss_notices', array($this,'dismiss_notices'));
82
 
83
  // editors
84
+ add_action( 'add_meta_boxes', array($this, 'add_meta_boxes'),10,2 );
85
  add_filter('attachment_fields_to_edit', array($this, 'attachment_editor'), 10, 2);
86
 
87
  // shortcode
93
  add_filter('wp_get_attachment_image_src',array($this, 'attempt_uncache_image'), 10, 4);
94
 
95
  // adds a metabox to list thumbnails. This is a cache reset hidden as feature.
96
+ //add_action( 'add_meta_boxes', function () { );
97
  add_filter('postbox_classes_attachment_emr-showthumbs-box', function($classes) { $classes[] = 'closed'; return $classes; });
98
  }
99
 
119
  load_plugin_textdomain( 'enable-media-replace', false, basename(dirname(EMR_ROOT_FILE) ) . '/languages' );
120
 
121
  // Load Submodules
122
+
123
  $notices = Notices::getInstance();
124
 
125
  // Enqueue notices
150
  // @todo Later this should be move to it's own controller, and built view from there.
151
  if ( $action == 'media_replace' ) {
152
  if ( array_key_exists("attachment_id", $_GET) && intval($_GET["attachment_id"]) > 0) {
153
+ wp_enqueue_script('emr_upsell');
154
  require_once($this->plugin_path . "views/popup.php"); // warning variables like $action be overwritten here.
155
  }
156
  }
194
  'dateFormat' => $this->convertdate(get_option( 'date_format' )),
195
  'maxfilesize' => wp_max_upload_size(),
196
  'allowed_mime' => $mimes,
 
197
  );
198
 
199
+ wp_register_script('emr_upsell', plugins_url('js/upsell.js', EMR_ROOT_FILE), array('jquery'), EMR_VERSION, true );
200
+
201
+ wp_localize_script('emr_upsell', 'emr_upsell', array(
202
+ 'ajax' => admin_url('admin-ajax.php'),
203
+ 'installing' => __('Installing ...', 'enable-media-replace'),
204
+
205
+ ));
206
 
207
  if (Log::debugIsActive())
208
  $emr_options['is_debug'] = true;
209
 
210
  wp_localize_script('emr_admin', 'emr_options', $emr_options);
 
211
  }
212
 
213
  /** Utility function for the Jquery UI Datepicker */
214
+ public function convertdate( $sFormat ) {
215
  switch( $sFormat ) {
216
  //Predefined WP date formats
217
  case 'F j, Y':
230
  }
231
  }
232
 
233
+ public function checkImagePermission($author_id, $post_id)
234
+ {
235
+ if ($this->general_cap === false && $this->user_cap === false)
236
+ {
237
+ if ( current_user_can('edit_post', $post_id) === true)
238
+ return true;
239
+ }
240
+ elseif (current_user_can($this->general_cap))
241
+ return true;
242
+ elseif (current_user_can($this->user_cap) && $author_id == get_current_user_id())
243
+ return true;
244
+
245
+ return false;
246
+ }
247
+
248
  /** Get the URL to the media replace page
249
  * @param $attach_id The attachment ID to replace
250
  * @return Admin URL to the page.
262
 
263
  }
264
 
265
+ public function add_meta_boxes($post_type, $post)
266
+ {
267
+ if (! $this->checkImagePermission($post->post_author, $post->ID))
268
+ { return; }
269
+
270
+ add_meta_box('emr-replace-box', __('Replace Media', 'enable-media-replace'), array($this, 'replace_meta_box'), 'attachment', 'side', 'low');
271
+
272
+ if (isset($_GET['emr_replaced']) && intval($_GET['emr_replaced'] == 1))
273
+ {
274
+ add_meta_box('emr-showthumbs-box', __('Replaced Thumbnails Preview', 'enable-media-replace'), array($this, 'show_thumbs_box'), 'attachment', 'side', 'low');
275
+ }
276
+
277
+ }
278
+
279
  public function replace_meta_box($post)
280
  {
281
 
296
 
297
  public function show_thumbs_box($post)
298
  {
299
+ if (! $this->checkImagePermission($post->post_author, $post->ID))
300
+ { return; }
301
+
302
  wp_enqueue_style('emr_edit-attachment');
303
 
304
  $meta = wp_get_attachment_metadata($post->ID);
333
  public function attachment_editor($form_fields, $post)
334
  {
335
  $screen = null;
336
+
337
+ if (! $this->checkImagePermission($post->post_author, $post->ID))
338
+ { return $form_fields; }
339
+
340
  if (function_exists('get_current_screen'))
341
  {
342
  $screen = get_current_screen();
363
  * @param array $mime_types
364
  * @return array
365
  */
366
+ /* Off, no clue why this is here.
367
  public function add_mime_types($mime_types)
368
  {
369
  $mime_types['dat'] = 'text/plain'; // Adding .dat extension
370
  return $mime_types;
371
  }
372
+ */
373
  /**
374
  * Function called by filter 'media_row_actions'
375
  * Enables linking to EMR straight from the media library
376
  */
377
  public function add_media_action( $actions, $post) {
378
+
379
+
380
+ if (! $this->checkImagePermission($post->post_author, $post->ID))
381
+ { return $actions; }
382
+
383
  $url = $this->getMediaReplaceURL($post->ID);
384
  $action = "media_replace";
385
  $editurl = wp_nonce_url( $url, $action );
classes/external/upgrader_skin.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Skin class.
6
+ *
7
+ * @since 1.0.0
8
+ *
9
+ * @package Envira_Gallery
10
+ * @author Envira Team
11
+ */
12
+ class EMR_Envira_Gallery_Skin extends WP_Upgrader_Skin {
13
+
14
+ /**
15
+ * Primary class constructor.
16
+ *
17
+ * @since 1.0.0
18
+ *
19
+ * @param array $args Empty array of args (we will use defaults).
20
+ */
21
+ public function __construct( $args = array() ) {
22
+
23
+ parent::__construct();
24
+
25
+ }
26
+
27
+ /**
28
+ * Set the upgrader object and store it as a property in the parent class.
29
+ *
30
+ * @since 1.0.0
31
+ *
32
+ * @param object $upgrader The upgrader object (passed by reference).
33
+ */
34
+ public function set_upgrader( &$upgrader ) {
35
+
36
+ if ( is_object( $upgrader ) ) {
37
+ $this->upgrader =& $upgrader;
38
+ }
39
+
40
+ }
41
+
42
+ /**
43
+ * Set the upgrader result and store it as a property in the parent class.
44
+ *
45
+ * @since 1.0.0
46
+ *
47
+ * @param object $result The result of the install process.
48
+ */
49
+ public function set_result( $result ) {
50
+
51
+ $this->result = $result;
52
+
53
+ }
54
+
55
+ /**
56
+ * Empty out the header of its HTML content and only check to see if it has
57
+ * been performed or not.
58
+ *
59
+ * @since 1.0.0
60
+ */
61
+ public function header() {}
62
+
63
+ /**
64
+ * Empty out the footer of its HTML contents.
65
+ *
66
+ * @since 1.0.0
67
+ */
68
+ public function footer() {}
69
+
70
+ /**
71
+ * Instead of outputting HTML for errors, json_encode the errors and send them
72
+ * back to the Ajax script for processing.
73
+ *
74
+ * @since 1.0.0
75
+ *
76
+ * @param array $errors Array of errors with the install process.
77
+ */
78
+ public function error( $errors ) {
79
+
80
+ if ( ! empty( $errors ) ) {
81
+ echo wp_json_encode( array( 'error' => __( 'There was an error installing the addon. Please try again.', 'envira-gallery' ) ) );
82
+ /* log this for API issues */
83
+
84
+ error_log( 'Envira: There was an error installing the addon' );
85
+ error_log( print_r( $errors, true ) );
86
+
87
+ die;
88
+ }
89
+
90
+ }
91
+
92
+ /**
93
+ * Empty out the feedback method to prevent outputting HTML strings as the install
94
+ * is progressing.
95
+ *
96
+ * @since 1.0.0
97
+ *
98
+ * @param string $string The feedback string.
99
+ * @param array ...$args The args.
100
+ */
101
+ public function feedback( $string, ...$args ) {}
102
+
103
+ }
classes/external/upsell_installer.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_action( 'wp_ajax_emr_plugin_install', 'emr_plugin_install' );
4
+
5
+ function emr_plugin_install() {
6
+
7
+ // Run a security check first.
8
+ check_admin_referer( 'emr-plugin-install', 'nonce' );
9
+
10
+ $plugin = isset($_POST['plugin']) ? sanitize_text_field($_POST['plugin']) : null;
11
+
12
+ switch($plugin)
13
+ {
14
+ case "envira":
15
+ $download_url = 'https://downloads.wordpress.org/plugin/envira-gallery-lite.zip';
16
+ break;
17
+ case 'spio':
18
+ $download_url = 'https://downloads.wordpress.org/plugin/shortpixel-image-optimiser.zip';
19
+ break;
20
+ case 'spai':
21
+ $download_url = 'https://downloads.wordpress.org/plugin/shortpixel-adaptive-images.zip';
22
+ break;
23
+ }
24
+
25
+ // Install the addon.
26
+ if ( ! is_null($download_url ) ) {
27
+
28
+ //$download_url = esc_url_raw( wp_unslash( $_POST['plugin'] ) );
29
+ global $hook_suffix;
30
+
31
+ // Set the current screen to avoid undefined notices.
32
+ set_current_screen();
33
+
34
+ // Prepare variables.
35
+ $method = '';
36
+ $url = add_query_arg(
37
+ array(
38
+ // 'page' => 'envira-gallery-settings',
39
+ ),
40
+ admin_url( 'admin.php' )
41
+ );
42
+ $url = esc_url( $url );
43
+
44
+ // Start output bufferring to catch the filesystem form if credentials are needed.
45
+ ob_start();
46
+ $creds = request_filesystem_credentials( $url, $method, false, false, null );
47
+ if ( false === $creds ) {
48
+ $form = ob_get_clean();
49
+ echo wp_json_encode( array( 'form' => $form ) );
50
+ die;
51
+ }
52
+
53
+ // If we are not authenticated, make it happen now.
54
+ if ( ! WP_Filesystem( $creds ) ) {
55
+ ob_start();
56
+ request_filesystem_credentials( $url, $method, true, false, null );
57
+ $form = ob_get_clean();
58
+ echo wp_json_encode( array( 'form' => $form ) );
59
+ die;
60
+ }
61
+
62
+ // We do not need any extra credentials if we have gotten this far, so let's install the plugin.
63
+ require_once (ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
64
+ require_once (plugin_dir_path( EMR_ROOT_FILE ) . 'classes/external/upgrader_skin.php');
65
+
66
+ // Create the plugin upgrader with our custom skin.
67
+ $skin = new EMR_Envira_Gallery_Skin();
68
+ $installer = new Plugin_Upgrader( $skin );
69
+ $installer->install( $download_url );
70
+
71
+ // Flush the cache and return the newly installed plugin basename.
72
+ wp_cache_flush();
73
+
74
+ if ( $installer->plugin_info() ) {
75
+ $plugin_basename = $installer->plugin_info();
76
+
77
+ ob_clean();
78
+
79
+
80
+ wp_send_json_success( array( 'plugin' => $plugin_basename ) );
81
+
82
+ die();
83
+ }
84
+ }
85
+
86
+ // Send back a response.
87
+ wp_send_json(array('result'=> false));
88
+ die;
89
+
90
+ }
91
+
92
+ add_action( 'wp_ajax_emr_plugin_activate', 'emr_activate' );
93
+
94
+ /**
95
+ * Activates an Envira addon.
96
+ *
97
+ * @since 1.0.0
98
+ */
99
+ function emr_activate() {
100
+
101
+ // Run a security check first.
102
+ check_admin_referer( 'emr-plugin-activate', 'nonce' );
103
+
104
+ $plugin = isset($_POST['plugin']) ? sanitize_text_field($_POST['plugin']) : null;
105
+
106
+ switch($plugin)
107
+ {
108
+ case "envira":
109
+ $plugin = 'envira-gallery-lite/envira-gallery-lite.php';
110
+ break;
111
+ case 'spio':
112
+ $plugin = 'shortpixel-image-optimiser/wp-shortpixel.php';
113
+ break;
114
+ case 'spai':
115
+ $plugin = 'shortpixel-adaptive-images/short-pixel-ai.php';
116
+ break;
117
+ }
118
+
119
+ // Activate the addon.
120
+ if ( ! is_null($plugin) ) {
121
+ $activate = activate_plugin( $plugin );
122
+ if ( is_wp_error( $activate ) ) {
123
+ echo json_encode( array( 'error' => $activate->get_error_message() ) );
124
+ die;
125
+ }
126
+ }
127
+
128
+ echo json_encode( true );
129
+ die;
130
+
131
+ }
classes/file.php CHANGED
@@ -38,7 +38,12 @@ class emrFile
38
  $filedata = wp_check_filetype_and_ext($this->file, $this->fileName);
39
  // This will *not* be checked, is not meant for permission of validation!
40
  // Note: this function will work on non-existing file, but not on existing files containing wrong mime in file.
41
- $this->fileMime = (isset($filedata['type'])) ? $filedata['type'] : false;
 
 
 
 
 
42
 
43
  }
44
 
38
  $filedata = wp_check_filetype_and_ext($this->file, $this->fileName);
39
  // This will *not* be checked, is not meant for permission of validation!
40
  // Note: this function will work on non-existing file, but not on existing files containing wrong mime in file.
41
+ $this->fileMime = (isset($filedata['type']) && strlen($filedata['type'] > 0)) ? $filedata['type'] : false;
42
+
43
+
44
+ if ($this->fileMime == false && strlen($this->file) > 0) // If it's not a registered mimetype
45
+ $this->fileMime = mime_content_type($this->file);
46
+
47
 
48
  }
49
 
classes/replacer.php CHANGED
@@ -163,22 +163,28 @@ class Replacer
163
  Log::addInfo('WP_Handle_upload filter returned different file', $filtered);
164
  }
165
 
 
 
 
 
 
 
 
 
 
166
  $metadata = wp_generate_attachment_metadata( $this->post_id, $this->targetFile->getFullFilePath() );
167
  wp_update_attachment_metadata( $this->post_id, $metadata );
168
  $this->target_metadata = $metadata;
169
 
170
-
171
  /** If author is different from replacer, note this */
172
  $author_id = get_post_meta($this->post_id, '_emr_replace_author', true);
173
 
174
  if ( intval($this->source_post->post_author) !== get_current_user_id())
175
  {
176
-
177
  update_post_meta($this->post_id, '_emr_replace_author', get_current_user_id());
178
  }
179
  elseif ($author_id)
180
  {
181
-
182
  delete_post_meta($this->post_id, '_emr_replace_author');
183
  }
184
 
@@ -186,13 +192,18 @@ class Replacer
186
  {
187
  // Write new image title.
188
  $title = $this->getNewTitle();
 
189
  $update_ar = array('ID' => $this->post_id);
190
  $update_ar['post_title'] = $title;
191
  $update_ar['post_name'] = sanitize_title($title);
 
 
 
 
192
  $update_ar['guid'] = $this->target_url; //wp_get_attachment_url($this->post_id);
193
- $update_ar['post_mime_type'] = $this->targetFile->getFileMime();
194
- $post_id = \wp_update_post($update_ar, true);
195
 
 
196
 
197
  // update post doesn't update GUID on updates.
198
  $wpdb->update( $wpdb->posts, array( 'guid' => $this->target_url), array('ID' => $this->post_id) );
@@ -224,6 +235,7 @@ class Replacer
224
  Log::addWarn('Thumbnail Updater returned false');
225
  }*/
226
 
 
227
  // if all set and done, update the date.
228
  // This must be done after wp_update_posts
229
  $this->updateDate(); // updates the date.
@@ -265,6 +277,25 @@ class Replacer
265
  return $title;
266
  }
267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  /** Gets the source file after processing. Returns a file */
269
  public function getSourceFile()
270
  {
@@ -481,8 +512,8 @@ class Replacer
481
  }
482
  }
483
 
484
- // Log::addDebug('Source', $this->source_metadata);
485
- // Log::addDebug('Target', $this->target_metadata);
486
  /* If on the other hand, some sizes are available in source, but not in target, try to replace them with something closeby. */
487
  foreach($search_urls as $size => $url)
488
  {
@@ -570,13 +601,13 @@ class Replacer
570
 
571
  if ($replaced_content !== $post_content)
572
  {
573
- Log::addDebug('POST CONTENT TO SAVE', $replaced_content);
574
 
575
  // $result = wp_update_post($post_ar);
576
  $sql = 'UPDATE ' . $wpdb->posts . ' SET post_content = %s WHERE ID = %d';
577
  $sql = $wpdb->prepare($sql, $replaced_content, $post_id);
578
 
579
- Log::addDebug("POSt update query " . $sql);
580
  $result = $wpdb->query($sql);
581
 
582
  if ($result === false)
@@ -805,6 +836,14 @@ class Replacer
805
 
806
  if (! isset($this->source_metadata['sizes'][$sizeName]) || ! isset($this->target_metadata['width'])) // This can happen with non-image files like PDF.
807
  {
 
 
 
 
 
 
 
 
808
  return false;
809
  }
810
  $old_width = $this->source_metadata['sizes'][$sizeName]['width']; // the width from size not in new image
@@ -833,12 +872,7 @@ class Replacer
833
  if(empty($closest_file)) return false;
834
 
835
  return $closest_file;
836
- //$oldFile = $oldData['file'];
837
- //if(is_array($oldFile)) { $oldFile = $oldFile[0];} // HelpScout case 709692915
838
- /*if(empty($oldFile)) {
839
- return false; //make sure we don't replace in this case as we will break the URLs for all the images in the folder.
840
- } */
841
- // $this->convertArray[] = array('imageFrom' => $this->relPath . $oldFile, 'imageTo' => $this->relPath . $closest_file);
842
 
843
  }
844
 
163
  Log::addInfo('WP_Handle_upload filter returned different file', $filtered);
164
  }
165
 
166
+ // Check and update post mimetype, otherwise badly coded plugins cry.
167
+ $post_mime = get_post_mime_type($this->post_id);
168
+ // update DB post mime type, if somebody decided to mess it up.
169
+
170
+ if ($this->targetFile->getFileMime() !== $post_mime)
171
+ {
172
+ \wp_update_post(array('post_mime_type' => $this->targetFile->getFileMime(), 'ID' => $this->post_id));
173
+ }
174
+
175
  $metadata = wp_generate_attachment_metadata( $this->post_id, $this->targetFile->getFullFilePath() );
176
  wp_update_attachment_metadata( $this->post_id, $metadata );
177
  $this->target_metadata = $metadata;
178
 
 
179
  /** If author is different from replacer, note this */
180
  $author_id = get_post_meta($this->post_id, '_emr_replace_author', true);
181
 
182
  if ( intval($this->source_post->post_author) !== get_current_user_id())
183
  {
 
184
  update_post_meta($this->post_id, '_emr_replace_author', get_current_user_id());
185
  }
186
  elseif ($author_id)
187
  {
 
188
  delete_post_meta($this->post_id, '_emr_replace_author');
189
  }
190
 
192
  {
193
  // Write new image title.
194
  $title = $this->getNewTitle();
195
+ $excerpt = $this->getNewExcerpt();
196
  $update_ar = array('ID' => $this->post_id);
197
  $update_ar['post_title'] = $title;
198
  $update_ar['post_name'] = sanitize_title($title);
199
+ if ($excerpt !== false)
200
+ {
201
+ $update_ar['post_excerpt'] = $excerpt;
202
+ }
203
  $update_ar['guid'] = $this->target_url; //wp_get_attachment_url($this->post_id);
204
+ // $update_ar['post_mime_type'] = $this->targetFile->getFileMime();
 
205
 
206
+ $post_id = \wp_update_post($update_ar, true);
207
 
208
  // update post doesn't update GUID on updates.
209
  $wpdb->update( $wpdb->posts, array( 'guid' => $this->target_url), array('ID' => $this->post_id) );
235
  Log::addWarn('Thumbnail Updater returned false');
236
  }*/
237
 
238
+
239
  // if all set and done, update the date.
240
  // This must be done after wp_update_posts
241
  $this->updateDate(); // updates the date.
277
  return $title;
278
  }
279
 
280
+ protected function getNewExcerpt()
281
+ {
282
+ $meta = $this->target_metadata;
283
+ $excerpt = false;
284
+
285
+ if (isset($meta['image_meta']))
286
+ {
287
+ if (isset($meta['image_meta']['caption']))
288
+ {
289
+ if (strlen($meta['image_meta']['caption']) > 0)
290
+ {
291
+ $excerpt = $meta['image_meta']['caption'];
292
+ }
293
+ }
294
+ }
295
+
296
+ return $excerpt;
297
+ }
298
+
299
  /** Gets the source file after processing. Returns a file */
300
  public function getSourceFile()
301
  {
512
  }
513
  }
514
 
515
+ Log::addDebug('Source', $this->source_metadata);
516
+ Log::addDebug('Target', $this->target_metadata);
517
  /* If on the other hand, some sizes are available in source, but not in target, try to replace them with something closeby. */
518
  foreach($search_urls as $size => $url)
519
  {
601
 
602
  if ($replaced_content !== $post_content)
603
  {
604
+ //Log::addDebug('POST CONTENT TO SAVE', $replaced_content);
605
 
606
  // $result = wp_update_post($post_ar);
607
  $sql = 'UPDATE ' . $wpdb->posts . ' SET post_content = %s WHERE ID = %d';
608
  $sql = $wpdb->prepare($sql, $replaced_content, $post_id);
609
 
610
+ //Log::addTemp("POSt update query " . $sql);
611
  $result = $wpdb->query($sql);
612
 
613
  if ($result === false)
836
 
837
  if (! isset($this->source_metadata['sizes'][$sizeName]) || ! isset($this->target_metadata['width'])) // This can happen with non-image files like PDF.
838
  {
839
+ // Check if metadata-less item is a svg file. Just the main file to replace all thumbnails since SVG's don't need thumbnails.
840
+ if (strpos($this->target_url, '.svg') !== false)
841
+ {
842
+ $svg_file = wp_basename($this->target_url);
843
+ return $svg_file; // this is the relpath of the mainfile.
844
+ }
845
+
846
+
847
  return false;
848
  }
849
  $old_width = $this->source_metadata['sizes'][$sizeName]['width']; // the width from size not in new image
872
  if(empty($closest_file)) return false;
873
 
874
  return $closest_file;
875
+
 
 
 
 
 
876
 
877
  }
878
 
classes/uihelper.php CHANGED
@@ -193,7 +193,9 @@ class UIHelper
193
  {
194
  $data = wp_get_attachment_image_src($attach_id, $size);
195
  $width = $data[1];
196
- $mime_type = get_post_mime_type($attach_id);
 
 
197
 
198
  if (strpos($mime_type, 'svg') !== false && $width <= 5)
199
  {
@@ -210,6 +212,7 @@ class UIHelper
210
  return $data;
211
 
212
  $xml = simplexml_load_file($file);
 
213
  if ($xml)
214
  { // stolen from SVG Upload plugin
215
  $attr = $xml->attributes();
193
  {
194
  $data = wp_get_attachment_image_src($attach_id, $size);
195
  $width = $data[1];
196
+ //$mime_type = get_post_mime_type($attach_id);
197
+ $file = get_attached_file($attach_id);
198
+ $mime_type = wp_get_image_mime($file);
199
 
200
  if (strpos($mime_type, 'svg') !== false && $width <= 5)
201
  {
212
  return $data;
213
 
214
  $xml = simplexml_load_file($file);
215
+ //Log::addDebug('XML LOAD FILE', $xml);
216
  if ($xml)
217
  { // stolen from SVG Upload plugin
218
  $attr = $xml->attributes();
css/admin.css CHANGED
@@ -1,46 +1,56 @@
1
  .ui-widget-content {
2
  border: 1px solid #dddddd;
3
  background: #ffffff;
4
- color: #333333; }
 
5
 
6
  .ui-widget-overlay {
7
  position: fixed;
8
  top: 0;
9
  left: 0;
10
  width: 100%;
11
- height: 100%; }
 
12
 
13
  .ui-datepicker {
14
  width: 17em;
15
- padding: .2em .2em 0;
16
- display: none; }
 
17
 
18
  .ui-datepicker .ui-datepicker-header {
19
  position: relative;
20
- padding: .2em 0; }
 
21
 
22
  .ui-datepicker .ui-datepicker-prev,
23
  .ui-datepicker .ui-datepicker-next {
24
  position: absolute;
25
  top: 2px;
26
  width: 1.8em;
27
- height: 1.8em; }
 
28
 
29
  .ui-datepicker .ui-datepicker-prev-hover,
30
  .ui-datepicker .ui-datepicker-next-hover {
31
- top: 1px; }
 
32
 
33
  .ui-datepicker .ui-datepicker-prev {
34
- left: 2px; }
 
35
 
36
  .ui-datepicker .ui-datepicker-next {
37
- right: 2px; }
 
38
 
39
  .ui-datepicker .ui-datepicker-prev-hover {
40
- left: 1px; }
 
41
 
42
  .ui-datepicker .ui-datepicker-next-hover {
43
- right: 1px; }
 
44
 
45
  .ui-datepicker .ui-datepicker-prev span,
46
  .ui-datepicker .ui-datepicker-next span {
@@ -49,129 +59,158 @@
49
  left: 50%;
50
  margin-left: -8px;
51
  top: 50%;
52
- margin-top: -8px; }
 
53
 
54
  .ui-datepicker .ui-datepicker-title {
55
  margin: 0 2.3em;
56
  line-height: 1.8em;
57
- text-align: center; }
 
58
 
59
  .ui-datepicker .ui-datepicker-title select {
60
  font-size: 1em;
61
- margin: 1px 0; }
 
62
 
63
  .ui-datepicker select.ui-datepicker-month,
64
  .ui-datepicker select.ui-datepicker-year {
65
- width: 45%; }
 
66
 
67
  .ui-datepicker table {
68
  width: 100%;
69
- font-size: .9em;
70
  border-collapse: collapse;
71
- margin: 0 0 .4em; }
 
72
 
73
  .ui-datepicker th {
74
- padding: .7em .3em;
75
  text-align: center;
76
  font-weight: bold;
77
- border: 0; }
 
78
 
79
  .ui-datepicker td {
80
  border: 0;
81
- padding: 1px; }
 
82
 
83
  .ui-datepicker td span,
84
  .ui-datepicker td a {
85
  display: block;
86
- padding: .2em;
87
  text-align: center;
88
- text-decoration: none; }
 
89
 
90
  .ui-datepicker .ui-datepicker-buttonpane {
91
  background-image: none;
92
- margin: .7em 0 0 0;
93
- padding: 0 .2em;
94
  border-left: 0;
95
  border-right: 0;
96
- border-bottom: 0; }
 
97
 
98
  .ui-datepicker .ui-datepicker-buttonpane button {
99
  float: right;
100
- margin: .5em .2em .4em;
101
  cursor: pointer;
102
- padding: .2em .6em .3em .6em;
103
  width: auto;
104
- overflow: visible; }
 
105
 
106
  .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
107
- float: left; }
 
108
 
109
  /* with multiple calendars */
110
  .ui-datepicker.ui-datepicker-multi {
111
- width: auto; }
 
112
 
113
  .ui-datepicker-multi .ui-datepicker-group {
114
- float: left; }
 
115
 
116
  .ui-datepicker-multi .ui-datepicker-group table {
117
  width: 95%;
118
- margin: 0 auto .4em; }
 
119
 
120
  .ui-datepicker-multi-2 .ui-datepicker-group {
121
- width: 50%; }
 
122
 
123
  .ui-datepicker-multi-3 .ui-datepicker-group {
124
- width: 33.3%; }
 
125
 
126
  .ui-datepicker-multi-4 .ui-datepicker-group {
127
- width: 25%; }
 
128
 
129
  .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
130
  .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
131
- border-left-width: 0; }
 
132
 
133
  .ui-datepicker-multi .ui-datepicker-buttonpane {
134
- clear: left; }
 
135
 
136
  .ui-datepicker-row-break {
137
  clear: both;
138
  width: 100%;
139
- font-size: 0; }
 
140
 
141
  /* RTL support */
142
  .ui-datepicker-rtl {
143
- direction: rtl; }
 
144
 
145
  .ui-datepicker-rtl .ui-datepicker-prev {
146
  right: 2px;
147
- left: auto; }
 
148
 
149
  .ui-datepicker-rtl .ui-datepicker-next {
150
  left: 2px;
151
- right: auto; }
 
152
 
153
  .ui-datepicker-rtl .ui-datepicker-prev:hover {
154
  right: 1px;
155
- left: auto; }
 
156
 
157
  .ui-datepicker-rtl .ui-datepicker-next:hover {
158
  left: 1px;
159
- right: auto; }
 
160
 
161
  .ui-datepicker-rtl .ui-datepicker-buttonpane {
162
- clear: right; }
 
163
 
164
  .ui-datepicker-rtl .ui-datepicker-buttonpane button {
165
- float: left; }
 
166
 
167
  .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
168
  .ui-datepicker-rtl .ui-datepicker-group {
169
- float: right; }
 
170
 
171
  .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
172
  .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
173
  border-right-width: 0;
174
- border-left-width: 1px; }
 
175
 
176
  /* Icons */
177
  .ui-datepicker .ui-icon {
@@ -179,813 +218,1095 @@
179
  text-indent: -99999px;
180
  overflow: hidden;
181
  background-repeat: no-repeat;
182
- left: .5em;
183
- top: .3em; }
 
184
 
185
  .ui-icon {
186
  width: 16px;
187
- height: 16px; }
 
188
 
189
  .ui-icon,
190
  .ui-widget-content .ui-icon {
191
- background-image: url("../img/ui-icons_444444_256x240.png"); }
 
192
 
193
  .ui-widget-header .ui-icon {
194
- background-image: url("../img/ui-icons_444444_256x240.png"); }
 
195
 
196
  .ui-state-hover .ui-icon,
197
  .ui-state-focus .ui-icon,
198
  .ui-button:hover .ui-icon,
199
  .ui-button:focus .ui-icon {
200
- background-image: url("../img/ui-icons_555555_256x240.png"); }
 
201
 
202
  .ui-state-active .ui-icon,
203
  .ui-button:active .ui-icon {
204
- background-image: url("../img/ui-icons_ffffff_256x240.png"); }
 
205
 
206
  .ui-state-highlight .ui-icon,
207
  .ui-button .ui-state-highlight.ui-icon {
208
- background-image: url("../img/ui-icons_777620_256x240.png"); }
 
209
 
210
  /* positioning */
211
  .ui-icon-blank {
212
- background-position: 16px 16px; }
 
213
 
214
  .ui-icon-caret-1-n {
215
- background-position: 0 0; }
 
216
 
217
  .ui-icon-caret-1-ne {
218
- background-position: -16px 0; }
 
219
 
220
  .ui-icon-caret-1-e {
221
- background-position: -32px 0; }
 
222
 
223
  .ui-icon-caret-1-se {
224
- background-position: -48px 0; }
 
225
 
226
  .ui-icon-caret-1-s {
227
- background-position: -65px 0; }
 
228
 
229
  .ui-icon-caret-1-sw {
230
- background-position: -80px 0; }
 
231
 
232
  .ui-icon-caret-1-w {
233
- background-position: -96px 0; }
 
234
 
235
  .ui-icon-caret-1-nw {
236
- background-position: -112px 0; }
 
237
 
238
  .ui-icon-caret-2-n-s {
239
- background-position: -128px 0; }
 
240
 
241
  .ui-icon-caret-2-e-w {
242
- background-position: -144px 0; }
 
243
 
244
  .ui-icon-triangle-1-n {
245
- background-position: 0 -16px; }
 
246
 
247
  .ui-icon-triangle-1-ne {
248
- background-position: -16px -16px; }
 
249
 
250
  .ui-icon-triangle-1-e {
251
- background-position: -32px -16px; }
 
252
 
253
  .ui-icon-triangle-1-se {
254
- background-position: -48px -16px; }
 
255
 
256
  .ui-icon-triangle-1-s {
257
- background-position: -65px -16px; }
 
258
 
259
  .ui-icon-triangle-1-sw {
260
- background-position: -80px -16px; }
 
261
 
262
  .ui-icon-triangle-1-w {
263
- background-position: -96px -16px; }
 
264
 
265
  .ui-icon-triangle-1-nw {
266
- background-position: -112px -16px; }
 
267
 
268
  .ui-icon-triangle-2-n-s {
269
- background-position: -128px -16px; }
 
270
 
271
  .ui-icon-triangle-2-e-w {
272
- background-position: -144px -16px; }
 
273
 
274
  .ui-icon-arrow-1-n {
275
- background-position: 0 -32px; }
 
276
 
277
  .ui-icon-arrow-1-ne {
278
- background-position: -16px -32px; }
 
279
 
280
  .ui-icon-arrow-1-e {
281
- background-position: -32px -32px; }
 
282
 
283
  .ui-icon-arrow-1-se {
284
- background-position: -48px -32px; }
 
285
 
286
  .ui-icon-arrow-1-s {
287
- background-position: -65px -32px; }
 
288
 
289
  .ui-icon-arrow-1-sw {
290
- background-position: -80px -32px; }
 
291
 
292
  .ui-icon-arrow-1-w {
293
- background-position: -96px -32px; }
 
294
 
295
  .ui-icon-arrow-1-nw {
296
- background-position: -112px -32px; }
 
297
 
298
  .ui-icon-arrow-2-n-s {
299
- background-position: -128px -32px; }
 
300
 
301
  .ui-icon-arrow-2-ne-sw {
302
- background-position: -144px -32px; }
 
303
 
304
  .ui-icon-arrow-2-e-w {
305
- background-position: -160px -32px; }
 
306
 
307
  .ui-icon-arrow-2-se-nw {
308
- background-position: -176px -32px; }
 
309
 
310
  .ui-icon-arrowstop-1-n {
311
- background-position: -192px -32px; }
 
312
 
313
  .ui-icon-arrowstop-1-e {
314
- background-position: -208px -32px; }
 
315
 
316
  .ui-icon-arrowstop-1-s {
317
- background-position: -224px -32px; }
 
318
 
319
  .ui-icon-arrowstop-1-w {
320
- background-position: -240px -32px; }
 
321
 
322
  .ui-icon-arrowthick-1-n {
323
- background-position: 1px -48px; }
 
324
 
325
  .ui-icon-arrowthick-1-ne {
326
- background-position: -16px -48px; }
 
327
 
328
  .ui-icon-arrowthick-1-e {
329
- background-position: -32px -48px; }
 
330
 
331
  .ui-icon-arrowthick-1-se {
332
- background-position: -48px -48px; }
 
333
 
334
  .ui-icon-arrowthick-1-s {
335
- background-position: -64px -48px; }
 
336
 
337
  .ui-icon-arrowthick-1-sw {
338
- background-position: -80px -48px; }
 
339
 
340
  .ui-icon-arrowthick-1-w {
341
- background-position: -96px -48px; }
 
342
 
343
  .ui-icon-arrowthick-1-nw {
344
- background-position: -112px -48px; }
 
345
 
346
  .ui-icon-arrowthick-2-n-s {
347
- background-position: -128px -48px; }
 
348
 
349
  .ui-icon-arrowthick-2-ne-sw {
350
- background-position: -144px -48px; }
 
351
 
352
  .ui-icon-arrowthick-2-e-w {
353
- background-position: -160px -48px; }
 
354
 
355
  .ui-icon-arrowthick-2-se-nw {
356
- background-position: -176px -48px; }
 
357
 
358
  .ui-icon-arrowthickstop-1-n {
359
- background-position: -192px -48px; }
 
360
 
361
  .ui-icon-arrowthickstop-1-e {
362
- background-position: -208px -48px; }
 
363
 
364
  .ui-icon-arrowthickstop-1-s {
365
- background-position: -224px -48px; }
 
366
 
367
  .ui-icon-arrowthickstop-1-w {
368
- background-position: -240px -48px; }
 
369
 
370
  .ui-icon-arrowreturnthick-1-w {
371
- background-position: 0 -64px; }
 
372
 
373
  .ui-icon-arrowreturnthick-1-n {
374
- background-position: -16px -64px; }
 
375
 
376
  .ui-icon-arrowreturnthick-1-e {
377
- background-position: -32px -64px; }
 
378
 
379
  .ui-icon-arrowreturnthick-1-s {
380
- background-position: -48px -64px; }
 
381
 
382
  .ui-icon-arrowreturn-1-w {
383
- background-position: -64px -64px; }
 
384
 
385
  .ui-icon-arrowreturn-1-n {
386
- background-position: -80px -64px; }
 
387
 
388
  .ui-icon-arrowreturn-1-e {
389
- background-position: -96px -64px; }
 
390
 
391
  .ui-icon-arrowreturn-1-s {
392
- background-position: -112px -64px; }
 
393
 
394
  .ui-icon-arrowrefresh-1-w {
395
- background-position: -128px -64px; }
 
396
 
397
  .ui-icon-arrowrefresh-1-n {
398
- background-position: -144px -64px; }
 
399
 
400
  .ui-icon-arrowrefresh-1-e {
401
- background-position: -160px -64px; }
 
402
 
403
  .ui-icon-arrowrefresh-1-s {
404
- background-position: -176px -64px; }
 
405
 
406
  .ui-icon-arrow-4 {
407
- background-position: 0 -80px; }
 
408
 
409
  .ui-icon-arrow-4-diag {
410
- background-position: -16px -80px; }
 
411
 
412
  .ui-icon-extlink {
413
- background-position: -32px -80px; }
 
414
 
415
  .ui-icon-newwin {
416
- background-position: -48px -80px; }
 
417
 
418
  .ui-icon-refresh {
419
- background-position: -64px -80px; }
 
420
 
421
  .ui-icon-shuffle {
422
- background-position: -80px -80px; }
 
423
 
424
  .ui-icon-transfer-e-w {
425
- background-position: -96px -80px; }
 
426
 
427
  .ui-icon-transferthick-e-w {
428
- background-position: -112px -80px; }
 
429
 
430
  .ui-icon-folder-collapsed {
431
- background-position: 0 -96px; }
 
432
 
433
  .ui-icon-folder-open {
434
- background-position: -16px -96px; }
 
435
 
436
  .ui-icon-document {
437
- background-position: -32px -96px; }
 
438
 
439
  .ui-icon-document-b {
440
- background-position: -48px -96px; }
 
441
 
442
  .ui-icon-note {
443
- background-position: -64px -96px; }
 
444
 
445
  .ui-icon-mail-closed {
446
- background-position: -80px -96px; }
 
447
 
448
  .ui-icon-mail-open {
449
- background-position: -96px -96px; }
 
450
 
451
  .ui-icon-suitcase {
452
- background-position: -112px -96px; }
 
453
 
454
  .ui-icon-comment {
455
- background-position: -128px -96px; }
 
456
 
457
  .ui-icon-person {
458
- background-position: -144px -96px; }
 
459
 
460
  .ui-icon-print {
461
- background-position: -160px -96px; }
 
462
 
463
  .ui-icon-trash {
464
- background-position: -176px -96px; }
 
465
 
466
  .ui-icon-locked {
467
- background-position: -192px -96px; }
 
468
 
469
  .ui-icon-unlocked {
470
- background-position: -208px -96px; }
 
471
 
472
  .ui-icon-bookmark {
473
- background-position: -224px -96px; }
 
474
 
475
  .ui-icon-tag {
476
- background-position: -240px -96px; }
 
477
 
478
  .ui-icon-home {
479
- background-position: 0 -112px; }
 
480
 
481
  .ui-icon-flag {
482
- background-position: -16px -112px; }
 
483
 
484
  .ui-icon-calendar {
485
- background-position: -32px -112px; }
 
486
 
487
  .ui-icon-cart {
488
- background-position: -48px -112px; }
 
489
 
490
  .ui-icon-pencil {
491
- background-position: -64px -112px; }
 
492
 
493
  .ui-icon-clock {
494
- background-position: -80px -112px; }
 
495
 
496
  .ui-icon-disk {
497
- background-position: -96px -112px; }
 
498
 
499
  .ui-icon-calculator {
500
- background-position: -112px -112px; }
 
501
 
502
  .ui-icon-zoomin {
503
- background-position: -128px -112px; }
 
504
 
505
  .ui-icon-zoomout {
506
- background-position: -144px -112px; }
 
507
 
508
  .ui-icon-search {
509
- background-position: -160px -112px; }
 
510
 
511
  .ui-icon-wrench {
512
- background-position: -176px -112px; }
 
513
 
514
  .ui-icon-gear {
515
- background-position: -192px -112px; }
 
516
 
517
  .ui-icon-heart {
518
- background-position: -208px -112px; }
 
519
 
520
  .ui-icon-star {
521
- background-position: -224px -112px; }
 
522
 
523
  .ui-icon-link {
524
- background-position: -240px -112px; }
 
525
 
526
  .ui-icon-cancel {
527
- background-position: 0 -128px; }
 
528
 
529
  .ui-icon-plus {
530
- background-position: -16px -128px; }
 
531
 
532
  .ui-icon-plusthick {
533
- background-position: -32px -128px; }
 
534
 
535
  .ui-icon-minus {
536
- background-position: -48px -128px; }
 
537
 
538
  .ui-icon-minusthick {
539
- background-position: -64px -128px; }
 
540
 
541
  .ui-icon-close {
542
- background-position: -80px -128px; }
 
543
 
544
  .ui-icon-closethick {
545
- background-position: -96px -128px; }
 
546
 
547
  .ui-icon-key {
548
- background-position: -112px -128px; }
 
549
 
550
  .ui-icon-lightbulb {
551
- background-position: -128px -128px; }
 
552
 
553
  .ui-icon-scissors {
554
- background-position: -144px -128px; }
 
555
 
556
  .ui-icon-clipboard {
557
- background-position: -160px -128px; }
 
558
 
559
  .ui-icon-copy {
560
- background-position: -176px -128px; }
 
561
 
562
  .ui-icon-contact {
563
- background-position: -192px -128px; }
 
564
 
565
  .ui-icon-image {
566
- background-position: -208px -128px; }
 
567
 
568
  .ui-icon-video {
569
- background-position: -224px -128px; }
 
570
 
571
  .ui-icon-script {
572
- background-position: -240px -128px; }
 
573
 
574
  .ui-icon-alert {
575
- background-position: 0 -144px; }
 
576
 
577
  .ui-icon-info {
578
- background-position: -16px -144px; }
 
579
 
580
  .ui-icon-notice {
581
- background-position: -32px -144px; }
 
582
 
583
  .ui-icon-help {
584
- background-position: -48px -144px; }
 
585
 
586
  .ui-icon-check {
587
- background-position: -64px -144px; }
 
588
 
589
  .ui-icon-bullet {
590
- background-position: -80px -144px; }
 
591
 
592
  .ui-icon-radio-on {
593
- background-position: -96px -144px; }
 
594
 
595
  .ui-icon-radio-off {
596
- background-position: -112px -144px; }
 
597
 
598
  .ui-icon-pin-w {
599
- background-position: -128px -144px; }
 
600
 
601
  .ui-icon-pin-s {
602
- background-position: -144px -144px; }
 
603
 
604
  .ui-icon-play {
605
- background-position: 0 -160px; }
 
606
 
607
  .ui-icon-pause {
608
- background-position: -16px -160px; }
 
609
 
610
  .ui-icon-seek-next {
611
- background-position: -32px -160px; }
 
612
 
613
  .ui-icon-seek-prev {
614
- background-position: -48px -160px; }
 
615
 
616
  .ui-icon-seek-end {
617
- background-position: -64px -160px; }
 
618
 
619
  .ui-icon-seek-start {
620
- background-position: -80px -160px; }
 
621
 
622
  /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
623
  .ui-icon-seek-first {
624
- background-position: -80px -160px; }
 
625
 
626
  .ui-icon-stop {
627
- background-position: -96px -160px; }
 
628
 
629
  .ui-icon-eject {
630
- background-position: -112px -160px; }
 
631
 
632
  .ui-icon-volume-off {
633
- background-position: -128px -160px; }
 
634
 
635
  .ui-icon-volume-on {
636
- background-position: -144px -160px; }
 
637
 
638
  .ui-icon-power {
639
- background-position: 0 -176px; }
 
640
 
641
  .ui-icon-signal-diag {
642
- background-position: -16px -176px; }
 
643
 
644
  .ui-icon-signal {
645
- background-position: -32px -176px; }
 
646
 
647
  .ui-icon-battery-0 {
648
- background-position: -48px -176px; }
 
649
 
650
  .ui-icon-battery-1 {
651
- background-position: -64px -176px; }
 
652
 
653
  .ui-icon-battery-2 {
654
- background-position: -80px -176px; }
 
655
 
656
  .ui-icon-battery-3 {
657
- background-position: -96px -176px; }
 
658
 
659
  .ui-icon-circle-plus {
660
- background-position: 0 -192px; }
 
661
 
662
  .ui-icon-circle-minus {
663
- background-position: -16px -192px; }
 
664
 
665
  .ui-icon-circle-close {
666
- background-position: -32px -192px; }
 
667
 
668
  .ui-icon-circle-triangle-e {
669
- background-position: -48px -192px; }
 
670
 
671
  .ui-icon-circle-triangle-s {
672
- background-position: -64px -192px; }
 
673
 
674
  .ui-icon-circle-triangle-w {
675
- background-position: -80px -192px; }
 
676
 
677
  .ui-icon-circle-triangle-n {
678
- background-position: -96px -192px; }
 
679
 
680
  .ui-icon-circle-arrow-e {
681
- background-position: -112px -192px; }
 
682
 
683
  .ui-icon-circle-arrow-s {
684
- background-position: -128px -192px; }
 
685
 
686
  .ui-icon-circle-arrow-w {
687
- background-position: -144px -192px; }
 
688
 
689
  .ui-icon-circle-arrow-n {
690
- background-position: -160px -192px; }
 
691
 
692
  .ui-icon-circle-zoomin {
693
- background-position: -176px -192px; }
 
694
 
695
  .ui-icon-circle-zoomout {
696
- background-position: -192px -192px; }
 
697
 
698
  .ui-icon-circle-check {
699
- background-position: -208px -192px; }
 
700
 
701
  .ui-icon-circlesmall-plus {
702
- background-position: 0 -208px; }
 
703
 
704
  .ui-icon-circlesmall-minus {
705
- background-position: -16px -208px; }
 
706
 
707
  .ui-icon-circlesmall-close {
708
- background-position: -32px -208px; }
 
709
 
710
  .ui-icon-squaresmall-plus {
711
- background-position: -48px -208px; }
 
712
 
713
  .ui-icon-squaresmall-minus {
714
- background-position: -64px -208px; }
 
715
 
716
  .ui-icon-squaresmall-close {
717
- background-position: -80px -208px; }
 
718
 
719
  .ui-icon-grip-dotted-vertical {
720
- background-position: 0 -224px; }
 
721
 
722
  .ui-icon-grip-dotted-horizontal {
723
- background-position: -16px -224px; }
 
724
 
725
  .ui-icon-grip-solid-vertical {
726
- background-position: -32px -224px; }
 
727
 
728
  .ui-icon-grip-solid-horizontal {
729
- background-position: -48px -224px; }
 
730
 
731
  .ui-icon-gripsmall-diagonal-se {
732
- background-position: -64px -224px; }
 
733
 
734
  .ui-icon-grip-diagonal-se {
735
- background-position: -80px -224px; }
 
736
 
737
  /* Corner radius */
738
  .ui-corner-all,
739
  .ui-corner-top,
740
  .ui-corner-left,
741
  .ui-corner-tl {
742
- border-top-left-radius: 3px; }
 
743
 
744
  .ui-corner-all,
745
  .ui-corner-top,
746
  .ui-corner-right,
747
  .ui-corner-tr {
748
- border-top-right-radius: 3px; }
 
749
 
750
  .ui-corner-all,
751
  .ui-corner-bottom,
752
  .ui-corner-left,
753
  .ui-corner-bl {
754
- border-bottom-left-radius: 3px; }
 
755
 
756
  .ui-corner-all,
757
  .ui-corner-bottom,
758
  .ui-corner-right,
759
  .ui-corner-br {
760
- border-bottom-right-radius: 3px; }
 
761
 
762
  .emr_upload_form form {
763
- display: flex; }
764
- .emr_upload_form form .upsell-wrapper {
765
- margin-left: 10px; }
 
 
766
  .emr_upload_form .wrapper {
767
  padding: 18px;
768
- border: 1px solid #ccc; }
769
- .emr_upload_form .wrapper .section-header {
770
- font-size: 18px;
771
- border-bottom: 1px solid #ccc;
772
- padding: 6px 0;
773
- margin: 0 0 15px 0; }
 
 
774
  .emr_upload_form .image_chooser.wrapper {
775
- min-height: 350px; }
776
- .emr_upload_form .image_chooser.wrapper .emr_drop_area {
777
- border: 4px dashed #b4b9be;
778
- max-width: 600px;
779
- padding: 28px 14px;
780
- text-align: center;
781
- position: relative; }
782
- .emr_upload_form .image_chooser.wrapper .emr_drop_area h1 {
783
- display: none; }
784
- .emr_upload_form .image_chooser.wrapper .emr_drop_area .drop-wrapper {
785
- margin: 0 auto; }
786
- .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout {
787
- position: fixed;
788
- left: 0;
789
- right: 0;
790
- bottom: 0;
791
- top: 0;
792
- max-width: none;
793
- border-color: #83b4d8;
794
- border-width: 10px;
795
- z-index: 999999;
796
- background-color: rgba(68, 68, 68, 0.7); }
797
- .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout h1 {
798
- color: #fff;
799
- position: absolute;
800
- font-size: 50px;
801
- line-height: 50px;
802
- margin-top: -25px;
803
- top: 50%;
804
- width: 100%;
805
- text-align: center;
806
- display: block; }
807
- .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout .drop-wrapper {
808
- display: none; }
809
- .emr_upload_form .image_chooser.wrapper .image_previews {
810
- margin: 15px 0; }
811
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder {
812
- position: relative;
813
- display: inline-block;
814
- margin-right: 25px;
815
- margin-bottom: 10px;
816
- border: 1px solid #ddd;
817
- vertical-align: top;
818
- max-height: 500px; }
819
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .textlayer {
820
- font-size: 25px;
821
- line-height: 25px;
822
- opacity: 0.7;
823
- position: absolute;
824
- color: #ccc;
825
- left: 48%;
826
- top: 50%;
827
- transform: translate(-50%, -50%);
828
- border: 1px dashed #eee;
829
- background-color: #333;
830
- padding: 8px; }
831
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .dashicons {
832
- font-size: 60px;
833
- position: absolute;
834
- top: 50%;
835
- margin-top: -30px;
836
- left: 50%;
837
- margin-left: -30px;
838
- opacity: 0.5; }
839
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .image_size {
840
- text-align: center;
841
- position: absolute;
842
- bottom: -25px;
843
- width: 100%; }
844
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.is_image .dashicons::before, .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.is_image .dashicons {
845
- display: none; }
846
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image img {
847
- display: none; }
848
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image .textlayer {
849
- display: none; }
850
- .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image.is_document .textlayer {
851
- font-size: 18px;
852
- line-height: 20px;
853
- display: block; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
854
  .emr_upload_form .form-error, .emr_upload_form .form-warning {
855
  background: #fff;
856
  padding: 8px;
857
  border-left: 4px solid #ff0000;
858
  margin: 10px 0;
859
- display: none; }
860
- .emr_upload_form .form-error p, .emr_upload_form .form-warning p {
861
- margin: 0;
862
- font-size: 12px;
863
- font-weight: 700; }
 
 
864
  .emr_upload_form .form-warning {
865
- border-left: 4px solid #ffb900; }
 
866
  .emr_upload_form .option-flex-wrapper {
867
- display: flex; }
 
868
  .emr_upload_form .replace_type.wrapper {
869
  flex: 1;
870
  border: 1px solid #ccc;
871
- margin: 15px 0; }
872
- .emr_upload_form .replace_type.wrapper .option {
873
- position: relative;
874
- z-index: 1; }
875
- .emr_upload_form .replace_type.wrapper .option label {
876
- font-size: 1.2em; }
877
- .emr_upload_form .replace_type.wrapper .option .nofeature-notice {
878
- border: 1px solid #ccc;
879
- padding: 8px;
880
- margin: 0;
881
- position: absolute;
882
- left: 0;
883
- right: 0;
884
- top: 0;
885
- bottom: 0;
886
- opacity: 0.8;
887
- z-index: 9;
888
- background: #444; }
889
- .emr_upload_form .replace_type.wrapper .option .nofeature-notice p {
890
- text-align: center;
891
- color: #fff;
892
- margin: 15px 0; }
 
 
 
 
 
893
  .emr_upload_form .options.wrapper {
894
  flex: 1;
895
  border: 1px solid #ccc;
896
  padding: 15px;
897
- margin: 15px 0 15px 35px; }
898
- .emr_upload_form .options.wrapper .custom_date .emr_datepicker {
899
- width: 150px; }
900
- .emr_upload_form .options.wrapper .custom_date .emr_hour, .emr_upload_form .options.wrapper .custom_date .emr_minute {
901
- width: 45px; }
902
- .emr_upload_form .options.wrapper ul li input {
903
- margin-right: 8px; }
904
- .emr_upload_form .options.wrapper .option label {
905
- vertical-align: top; }
906
- .emr_upload_form .options.wrapper .small {
907
- font-size: 10px;
908
- vertical-align: top;
909
- margin-left: 8px; }
910
- .emr_upload_form .options.wrapper .custom_date {
911
- margin: 8px 0 0 25px;
912
- visibility: hidden;
913
- opacity: 0; }
914
- .emr_upload_form .options.wrapper .custom_date span.field-title {
915
- display: inline-block;
916
- margin-bottom: 4px;
917
- color: #444;
918
- font-size: 12px;
919
- width: 100%;
920
- text-align: left;
921
- vertical-align: middle;
922
- line-height: 26px; }
923
- .emr_upload_form .options.wrapper .custom_date span.field-title::before {
924
- font-size: 20px;
925
- vertical-align: top;
926
- margin-right: 4px; }
927
- .emr_upload_form .options.wrapper .location_option {
928
- display: none;
929
- margin-top: 12px; }
930
- .emr_upload_form .options.wrapper .location_option label {
931
- vertical-align: baseline;
932
- margin-right: 8px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
933
  .emr_upload_form .form_controls.wrapper {
934
  clear: both;
935
  margin: 8px 0 15px 0;
936
  border: 0;
937
- padding: 0; }
938
- .emr_upload_form .form_controls.wrapper .button {
939
- padding-left: 20px;
940
- padding-right: 20px; }
 
 
941
  .emr_upload_form .shortpixel.notice {
942
- padding: 12px; }
 
943
  .emr_upload_form .shortpixel-offer {
944
  background: #fff;
945
  width: 250px;
946
  min-height: 270px;
947
  border: 1px solid #ccc;
948
- padding: 15px;
949
- margin-bottom: 25px;
950
  float: right;
951
- clear: both; }
952
- .emr_upload_form .shortpixel-offer h3 {
953
- line-height: 1.3em; }
954
- .emr_upload_form .shortpixel-offer.site-speed {
955
- background-color: #dcfdff; }
956
- .emr_upload_form .shortpixel-offer.site-speed .img-wrapper {
957
- text-align: center;
958
- margin: 0 0 25px 0; }
959
- .emr_upload_form .shortpixel-offer.site-speed .img-wrapper img {
960
- max-width: 140px;
961
- max-height: 140px;
962
- margin: 0; }
963
- .emr_upload_form .shortpixel-offer.site-speed h3 {
964
- color: #00d0e5;
965
- font-size: 20px;
966
- text-align: center;
967
- margin: 0;
968
- line-height: 1.3em; }
969
- .emr_upload_form .shortpixel-offer.site-speed .button-wrapper {
970
- text-align: center;
971
- margin-top: 35px; }
972
- .emr_upload_form .shortpixel-offer.site-speed .button-wrapper a {
973
- background-color: #ff0000;
974
- color: #fff;
975
- display: inline-block;
976
- padding: 8px;
977
- text-decoration: none;
978
- font-weight: 700;
979
- font-size: 20px; }
980
- .emr_upload_form .shortpixel-offer.site-speed .red {
981
- color: #ff0000; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
982
  @media (max-width: 1200px) {
983
  .emr_upload_form .image_previews {
984
- text-align: center; }
 
985
  .emr_upload_form .option-flex-wrapper {
986
- flex-direction: column; }
987
- .emr_upload_form .option-flex-wrapper .options.wrapper {
988
- margin-left: 0; } }
 
 
 
989
  @media (max-width: 960px) {
990
  .emr_upload_form .upsell-wrapper {
991
- display: none; } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .ui-widget-content {
2
  border: 1px solid #dddddd;
3
  background: #ffffff;
4
+ color: #333333;
5
+ }
6
 
7
  .ui-widget-overlay {
8
  position: fixed;
9
  top: 0;
10
  left: 0;
11
  width: 100%;
12
+ height: 100%;
13
+ }
14
 
15
  .ui-datepicker {
16
  width: 17em;
17
+ padding: 0.2em 0.2em 0;
18
+ display: none;
19
+ }
20
 
21
  .ui-datepicker .ui-datepicker-header {
22
  position: relative;
23
+ padding: 0.2em 0;
24
+ }
25
 
26
  .ui-datepicker .ui-datepicker-prev,
27
  .ui-datepicker .ui-datepicker-next {
28
  position: absolute;
29
  top: 2px;
30
  width: 1.8em;
31
+ height: 1.8em;
32
+ }
33
 
34
  .ui-datepicker .ui-datepicker-prev-hover,
35
  .ui-datepicker .ui-datepicker-next-hover {
36
+ top: 1px;
37
+ }
38
 
39
  .ui-datepicker .ui-datepicker-prev {
40
+ left: 2px;
41
+ }
42
 
43
  .ui-datepicker .ui-datepicker-next {
44
+ right: 2px;
45
+ }
46
 
47
  .ui-datepicker .ui-datepicker-prev-hover {
48
+ left: 1px;
49
+ }
50
 
51
  .ui-datepicker .ui-datepicker-next-hover {
52
+ right: 1px;
53
+ }
54
 
55
  .ui-datepicker .ui-datepicker-prev span,
56
  .ui-datepicker .ui-datepicker-next span {
59
  left: 50%;
60
  margin-left: -8px;
61
  top: 50%;
62
+ margin-top: -8px;
63
+ }
64
 
65
  .ui-datepicker .ui-datepicker-title {
66
  margin: 0 2.3em;
67
  line-height: 1.8em;
68
+ text-align: center;
69
+ }
70
 
71
  .ui-datepicker .ui-datepicker-title select {
72
  font-size: 1em;
73
+ margin: 1px 0;
74
+ }
75
 
76
  .ui-datepicker select.ui-datepicker-month,
77
  .ui-datepicker select.ui-datepicker-year {
78
+ width: 45%;
79
+ }
80
 
81
  .ui-datepicker table {
82
  width: 100%;
83
+ font-size: 0.9em;
84
  border-collapse: collapse;
85
+ margin: 0 0 0.4em;
86
+ }
87
 
88
  .ui-datepicker th {
89
+ padding: 0.7em 0.3em;
90
  text-align: center;
91
  font-weight: bold;
92
+ border: 0;
93
+ }
94
 
95
  .ui-datepicker td {
96
  border: 0;
97
+ padding: 1px;
98
+ }
99
 
100
  .ui-datepicker td span,
101
  .ui-datepicker td a {
102
  display: block;
103
+ padding: 0.2em;
104
  text-align: center;
105
+ text-decoration: none;
106
+ }
107
 
108
  .ui-datepicker .ui-datepicker-buttonpane {
109
  background-image: none;
110
+ margin: 0.7em 0 0 0;
111
+ padding: 0 0.2em;
112
  border-left: 0;
113
  border-right: 0;
114
+ border-bottom: 0;
115
+ }
116
 
117
  .ui-datepicker .ui-datepicker-buttonpane button {
118
  float: right;
119
+ margin: 0.5em 0.2em 0.4em;
120
  cursor: pointer;
121
+ padding: 0.2em 0.6em 0.3em 0.6em;
122
  width: auto;
123
+ overflow: visible;
124
+ }
125
 
126
  .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
127
+ float: left;
128
+ }
129
 
130
  /* with multiple calendars */
131
  .ui-datepicker.ui-datepicker-multi {
132
+ width: auto;
133
+ }
134
 
135
  .ui-datepicker-multi .ui-datepicker-group {
136
+ float: left;
137
+ }
138
 
139
  .ui-datepicker-multi .ui-datepicker-group table {
140
  width: 95%;
141
+ margin: 0 auto 0.4em;
142
+ }
143
 
144
  .ui-datepicker-multi-2 .ui-datepicker-group {
145
+ width: 50%;
146
+ }
147
 
148
  .ui-datepicker-multi-3 .ui-datepicker-group {
149
+ width: 33.3%;
150
+ }
151
 
152
  .ui-datepicker-multi-4 .ui-datepicker-group {
153
+ width: 25%;
154
+ }
155
 
156
  .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
157
  .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
158
+ border-left-width: 0;
159
+ }
160
 
161
  .ui-datepicker-multi .ui-datepicker-buttonpane {
162
+ clear: left;
163
+ }
164
 
165
  .ui-datepicker-row-break {
166
  clear: both;
167
  width: 100%;
168
+ font-size: 0;
169
+ }
170
 
171
  /* RTL support */
172
  .ui-datepicker-rtl {
173
+ direction: rtl;
174
+ }
175
 
176
  .ui-datepicker-rtl .ui-datepicker-prev {
177
  right: 2px;
178
+ left: auto;
179
+ }
180
 
181
  .ui-datepicker-rtl .ui-datepicker-next {
182
  left: 2px;
183
+ right: auto;
184
+ }
185
 
186
  .ui-datepicker-rtl .ui-datepicker-prev:hover {
187
  right: 1px;
188
+ left: auto;
189
+ }
190
 
191
  .ui-datepicker-rtl .ui-datepicker-next:hover {
192
  left: 1px;
193
+ right: auto;
194
+ }
195
 
196
  .ui-datepicker-rtl .ui-datepicker-buttonpane {
197
+ clear: right;
198
+ }
199
 
200
  .ui-datepicker-rtl .ui-datepicker-buttonpane button {
201
+ float: left;
202
+ }
203
 
204
  .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
205
  .ui-datepicker-rtl .ui-datepicker-group {
206
+ float: right;
207
+ }
208
 
209
  .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
210
  .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
211
  border-right-width: 0;
212
+ border-left-width: 1px;
213
+ }
214
 
215
  /* Icons */
216
  .ui-datepicker .ui-icon {
218
  text-indent: -99999px;
219
  overflow: hidden;
220
  background-repeat: no-repeat;
221
+ left: 0.5em;
222
+ top: 0.3em;
223
+ }
224
 
225
  .ui-icon {
226
  width: 16px;
227
+ height: 16px;
228
+ }
229
 
230
  .ui-icon,
231
  .ui-widget-content .ui-icon {
232
+ background-image: url("../img/ui-icons_444444_256x240.png");
233
+ }
234
 
235
  .ui-widget-header .ui-icon {
236
+ background-image: url("../img/ui-icons_444444_256x240.png");
237
+ }
238
 
239
  .ui-state-hover .ui-icon,
240
  .ui-state-focus .ui-icon,
241
  .ui-button:hover .ui-icon,
242
  .ui-button:focus .ui-icon {
243
+ background-image: url("../img/ui-icons_555555_256x240.png");
244
+ }
245
 
246
  .ui-state-active .ui-icon,
247
  .ui-button:active .ui-icon {
248
+ background-image: url("../img/ui-icons_ffffff_256x240.png");
249
+ }
250
 
251
  .ui-state-highlight .ui-icon,
252
  .ui-button .ui-state-highlight.ui-icon {
253
+ background-image: url("../img/ui-icons_777620_256x240.png");
254
+ }
255
 
256
  /* positioning */
257
  .ui-icon-blank {
258
+ background-position: 16px 16px;
259
+ }
260
 
261
  .ui-icon-caret-1-n {
262
+ background-position: 0 0;
263
+ }
264
 
265
  .ui-icon-caret-1-ne {
266
+ background-position: -16px 0;
267
+ }
268
 
269
  .ui-icon-caret-1-e {
270
+ background-position: -32px 0;
271
+ }
272
 
273
  .ui-icon-caret-1-se {
274
+ background-position: -48px 0;
275
+ }
276
 
277
  .ui-icon-caret-1-s {
278
+ background-position: -65px 0;
279
+ }
280
 
281
  .ui-icon-caret-1-sw {
282
+ background-position: -80px 0;
283
+ }
284
 
285
  .ui-icon-caret-1-w {
286
+ background-position: -96px 0;
287
+ }
288
 
289
  .ui-icon-caret-1-nw {
290
+ background-position: -112px 0;
291
+ }
292
 
293
  .ui-icon-caret-2-n-s {
294
+ background-position: -128px 0;
295
+ }
296
 
297
  .ui-icon-caret-2-e-w {
298
+ background-position: -144px 0;
299
+ }
300
 
301
  .ui-icon-triangle-1-n {
302
+ background-position: 0 -16px;
303
+ }
304
 
305
  .ui-icon-triangle-1-ne {
306
+ background-position: -16px -16px;
307
+ }
308
 
309
  .ui-icon-triangle-1-e {
310
+ background-position: -32px -16px;
311
+ }
312
 
313
  .ui-icon-triangle-1-se {
314
+ background-position: -48px -16px;
315
+ }
316
 
317
  .ui-icon-triangle-1-s {
318
+ background-position: -65px -16px;
319
+ }
320
 
321
  .ui-icon-triangle-1-sw {
322
+ background-position: -80px -16px;
323
+ }
324
 
325
  .ui-icon-triangle-1-w {
326
+ background-position: -96px -16px;
327
+ }
328
 
329
  .ui-icon-triangle-1-nw {
330
+ background-position: -112px -16px;
331
+ }
332
 
333
  .ui-icon-triangle-2-n-s {
334
+ background-position: -128px -16px;
335
+ }
336
 
337
  .ui-icon-triangle-2-e-w {
338
+ background-position: -144px -16px;
339
+ }
340
 
341
  .ui-icon-arrow-1-n {
342
+ background-position: 0 -32px;
343
+ }
344
 
345
  .ui-icon-arrow-1-ne {
346
+ background-position: -16px -32px;
347
+ }
348
 
349
  .ui-icon-arrow-1-e {
350
+ background-position: -32px -32px;
351
+ }
352
 
353
  .ui-icon-arrow-1-se {
354
+ background-position: -48px -32px;
355
+ }
356
 
357
  .ui-icon-arrow-1-s {
358
+ background-position: -65px -32px;
359
+ }
360
 
361
  .ui-icon-arrow-1-sw {
362
+ background-position: -80px -32px;
363
+ }
364
 
365
  .ui-icon-arrow-1-w {
366
+ background-position: -96px -32px;
367
+ }
368
 
369
  .ui-icon-arrow-1-nw {
370
+ background-position: -112px -32px;
371
+ }
372
 
373
  .ui-icon-arrow-2-n-s {
374
+ background-position: -128px -32px;
375
+ }
376
 
377
  .ui-icon-arrow-2-ne-sw {
378
+ background-position: -144px -32px;
379
+ }
380
 
381
  .ui-icon-arrow-2-e-w {
382
+ background-position: -160px -32px;
383
+ }
384
 
385
  .ui-icon-arrow-2-se-nw {
386
+ background-position: -176px -32px;
387
+ }
388
 
389
  .ui-icon-arrowstop-1-n {
390
+ background-position: -192px -32px;
391
+ }
392
 
393
  .ui-icon-arrowstop-1-e {
394
+ background-position: -208px -32px;
395
+ }
396
 
397
  .ui-icon-arrowstop-1-s {
398
+ background-position: -224px -32px;
399
+ }
400
 
401
  .ui-icon-arrowstop-1-w {
402
+ background-position: -240px -32px;
403
+ }
404
 
405
  .ui-icon-arrowthick-1-n {
406
+ background-position: 1px -48px;
407
+ }
408
 
409
  .ui-icon-arrowthick-1-ne {
410
+ background-position: -16px -48px;
411
+ }
412
 
413
  .ui-icon-arrowthick-1-e {
414
+ background-position: -32px -48px;
415
+ }
416
 
417
  .ui-icon-arrowthick-1-se {
418
+ background-position: -48px -48px;
419
+ }
420
 
421
  .ui-icon-arrowthick-1-s {
422
+ background-position: -64px -48px;
423
+ }
424
 
425
  .ui-icon-arrowthick-1-sw {
426
+ background-position: -80px -48px;
427
+ }
428
 
429
  .ui-icon-arrowthick-1-w {
430
+ background-position: -96px -48px;
431
+ }
432
 
433
  .ui-icon-arrowthick-1-nw {
434
+ background-position: -112px -48px;
435
+ }
436
 
437
  .ui-icon-arrowthick-2-n-s {
438
+ background-position: -128px -48px;
439
+ }
440
 
441
  .ui-icon-arrowthick-2-ne-sw {
442
+ background-position: -144px -48px;
443
+ }
444
 
445
  .ui-icon-arrowthick-2-e-w {
446
+ background-position: -160px -48px;
447
+ }
448
 
449
  .ui-icon-arrowthick-2-se-nw {
450
+ background-position: -176px -48px;
451
+ }
452
 
453
  .ui-icon-arrowthickstop-1-n {
454
+ background-position: -192px -48px;
455
+ }
456
 
457
  .ui-icon-arrowthickstop-1-e {
458
+ background-position: -208px -48px;
459
+ }
460
 
461
  .ui-icon-arrowthickstop-1-s {
462
+ background-position: -224px -48px;
463
+ }
464
 
465
  .ui-icon-arrowthickstop-1-w {
466
+ background-position: -240px -48px;
467
+ }
468
 
469
  .ui-icon-arrowreturnthick-1-w {
470
+ background-position: 0 -64px;
471
+ }
472
 
473
  .ui-icon-arrowreturnthick-1-n {
474
+ background-position: -16px -64px;
475
+ }
476
 
477
  .ui-icon-arrowreturnthick-1-e {
478
+ background-position: -32px -64px;
479
+ }
480
 
481
  .ui-icon-arrowreturnthick-1-s {
482
+ background-position: -48px -64px;
483
+ }
484
 
485
  .ui-icon-arrowreturn-1-w {
486
+ background-position: -64px -64px;
487
+ }
488
 
489
  .ui-icon-arrowreturn-1-n {
490
+ background-position: -80px -64px;
491
+ }
492
 
493
  .ui-icon-arrowreturn-1-e {
494
+ background-position: -96px -64px;
495
+ }
496
 
497
  .ui-icon-arrowreturn-1-s {
498
+ background-position: -112px -64px;
499
+ }
500
 
501
  .ui-icon-arrowrefresh-1-w {
502
+ background-position: -128px -64px;
503
+ }
504
 
505
  .ui-icon-arrowrefresh-1-n {
506
+ background-position: -144px -64px;
507
+ }
508
 
509
  .ui-icon-arrowrefresh-1-e {
510
+ background-position: -160px -64px;
511
+ }
512
 
513
  .ui-icon-arrowrefresh-1-s {
514
+ background-position: -176px -64px;
515
+ }
516
 
517
  .ui-icon-arrow-4 {
518
+ background-position: 0 -80px;
519
+ }
520
 
521
  .ui-icon-arrow-4-diag {
522
+ background-position: -16px -80px;
523
+ }
524
 
525
  .ui-icon-extlink {
526
+ background-position: -32px -80px;
527
+ }
528
 
529
  .ui-icon-newwin {
530
+ background-position: -48px -80px;
531
+ }
532
 
533
  .ui-icon-refresh {
534
+ background-position: -64px -80px;
535
+ }
536
 
537
  .ui-icon-shuffle {
538
+ background-position: -80px -80px;
539
+ }
540
 
541
  .ui-icon-transfer-e-w {
542
+ background-position: -96px -80px;
543
+ }
544
 
545
  .ui-icon-transferthick-e-w {
546
+ background-position: -112px -80px;
547
+ }
548
 
549
  .ui-icon-folder-collapsed {
550
+ background-position: 0 -96px;
551
+ }
552
 
553
  .ui-icon-folder-open {
554
+ background-position: -16px -96px;
555
+ }
556
 
557
  .ui-icon-document {
558
+ background-position: -32px -96px;
559
+ }
560
 
561
  .ui-icon-document-b {
562
+ background-position: -48px -96px;
563
+ }
564
 
565
  .ui-icon-note {
566
+ background-position: -64px -96px;
567
+ }
568
 
569
  .ui-icon-mail-closed {
570
+ background-position: -80px -96px;
571
+ }
572
 
573
  .ui-icon-mail-open {
574
+ background-position: -96px -96px;
575
+ }
576
 
577
  .ui-icon-suitcase {
578
+ background-position: -112px -96px;
579
+ }
580
 
581
  .ui-icon-comment {
582
+ background-position: -128px -96px;
583
+ }
584
 
585
  .ui-icon-person {
586
+ background-position: -144px -96px;
587
+ }
588
 
589
  .ui-icon-print {
590
+ background-position: -160px -96px;
591
+ }
592
 
593
  .ui-icon-trash {
594
+ background-position: -176px -96px;
595
+ }
596
 
597
  .ui-icon-locked {
598
+ background-position: -192px -96px;
599
+ }
600
 
601
  .ui-icon-unlocked {
602
+ background-position: -208px -96px;
603
+ }
604
 
605
  .ui-icon-bookmark {
606
+ background-position: -224px -96px;
607
+ }
608
 
609
  .ui-icon-tag {
610
+ background-position: -240px -96px;
611
+ }
612
 
613
  .ui-icon-home {
614
+ background-position: 0 -112px;
615
+ }
616
 
617
  .ui-icon-flag {
618
+ background-position: -16px -112px;
619
+ }
620
 
621
  .ui-icon-calendar {
622
+ background-position: -32px -112px;
623
+ }
624
 
625
  .ui-icon-cart {
626
+ background-position: -48px -112px;
627
+ }
628
 
629
  .ui-icon-pencil {
630
+ background-position: -64px -112px;
631
+ }
632
 
633
  .ui-icon-clock {
634
+ background-position: -80px -112px;
635
+ }
636
 
637
  .ui-icon-disk {
638
+ background-position: -96px -112px;
639
+ }
640
 
641
  .ui-icon-calculator {
642
+ background-position: -112px -112px;
643
+ }
644
 
645
  .ui-icon-zoomin {
646
+ background-position: -128px -112px;
647
+ }
648
 
649
  .ui-icon-zoomout {
650
+ background-position: -144px -112px;
651
+ }
652
 
653
  .ui-icon-search {
654
+ background-position: -160px -112px;
655
+ }
656
 
657
  .ui-icon-wrench {
658
+ background-position: -176px -112px;
659
+ }
660
 
661
  .ui-icon-gear {
662
+ background-position: -192px -112px;
663
+ }
664
 
665
  .ui-icon-heart {
666
+ background-position: -208px -112px;
667
+ }
668
 
669
  .ui-icon-star {
670
+ background-position: -224px -112px;
671
+ }
672
 
673
  .ui-icon-link {
674
+ background-position: -240px -112px;
675
+ }
676
 
677
  .ui-icon-cancel {
678
+ background-position: 0 -128px;
679
+ }
680
 
681
  .ui-icon-plus {
682
+ background-position: -16px -128px;
683
+ }
684
 
685
  .ui-icon-plusthick {
686
+ background-position: -32px -128px;
687
+ }
688
 
689
  .ui-icon-minus {
690
+ background-position: -48px -128px;
691
+ }
692
 
693
  .ui-icon-minusthick {
694
+ background-position: -64px -128px;
695
+ }
696
 
697
  .ui-icon-close {
698
+ background-position: -80px -128px;
699
+ }
700
 
701
  .ui-icon-closethick {
702
+ background-position: -96px -128px;
703
+ }
704
 
705
  .ui-icon-key {
706
+ background-position: -112px -128px;
707
+ }
708
 
709
  .ui-icon-lightbulb {
710
+ background-position: -128px -128px;
711
+ }
712
 
713
  .ui-icon-scissors {
714
+ background-position: -144px -128px;
715
+ }
716
 
717
  .ui-icon-clipboard {
718
+ background-position: -160px -128px;
719
+ }
720
 
721
  .ui-icon-copy {
722
+ background-position: -176px -128px;
723
+ }
724
 
725
  .ui-icon-contact {
726
+ background-position: -192px -128px;
727
+ }
728
 
729
  .ui-icon-image {
730
+ background-position: -208px -128px;
731
+ }
732
 
733
  .ui-icon-video {
734
+ background-position: -224px -128px;
735
+ }
736
 
737
  .ui-icon-script {
738
+ background-position: -240px -128px;
739
+ }
740
 
741
  .ui-icon-alert {
742
+ background-position: 0 -144px;
743
+ }
744
 
745
  .ui-icon-info {
746
+ background-position: -16px -144px;
747
+ }
748
 
749
  .ui-icon-notice {
750
+ background-position: -32px -144px;
751
+ }
752
 
753
  .ui-icon-help {
754
+ background-position: -48px -144px;
755
+ }
756
 
757
  .ui-icon-check {
758
+ background-position: -64px -144px;
759
+ }
760
 
761
  .ui-icon-bullet {
762
+ background-position: -80px -144px;
763
+ }
764
 
765
  .ui-icon-radio-on {
766
+ background-position: -96px -144px;
767
+ }
768
 
769
  .ui-icon-radio-off {
770
+ background-position: -112px -144px;
771
+ }
772
 
773
  .ui-icon-pin-w {
774
+ background-position: -128px -144px;
775
+ }
776
 
777
  .ui-icon-pin-s {
778
+ background-position: -144px -144px;
779
+ }
780
 
781
  .ui-icon-play {
782
+ background-position: 0 -160px;
783
+ }
784
 
785
  .ui-icon-pause {
786
+ background-position: -16px -160px;
787
+ }
788
 
789
  .ui-icon-seek-next {
790
+ background-position: -32px -160px;
791
+ }
792
 
793
  .ui-icon-seek-prev {
794
+ background-position: -48px -160px;
795
+ }
796
 
797
  .ui-icon-seek-end {
798
+ background-position: -64px -160px;
799
+ }
800
 
801
  .ui-icon-seek-start {
802
+ background-position: -80px -160px;
803
+ }
804
 
805
  /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
806
  .ui-icon-seek-first {
807
+ background-position: -80px -160px;
808
+ }
809
 
810
  .ui-icon-stop {
811
+ background-position: -96px -160px;
812
+ }
813
 
814
  .ui-icon-eject {
815
+ background-position: -112px -160px;
816
+ }
817
 
818
  .ui-icon-volume-off {
819
+ background-position: -128px -160px;
820
+ }
821
 
822
  .ui-icon-volume-on {
823
+ background-position: -144px -160px;
824
+ }
825
 
826
  .ui-icon-power {
827
+ background-position: 0 -176px;
828
+ }
829
 
830
  .ui-icon-signal-diag {
831
+ background-position: -16px -176px;
832
+ }
833
 
834
  .ui-icon-signal {
835
+ background-position: -32px -176px;
836
+ }
837
 
838
  .ui-icon-battery-0 {
839
+ background-position: -48px -176px;
840
+ }
841
 
842
  .ui-icon-battery-1 {
843
+ background-position: -64px -176px;
844
+ }
845
 
846
  .ui-icon-battery-2 {
847
+ background-position: -80px -176px;
848
+ }
849
 
850
  .ui-icon-battery-3 {
851
+ background-position: -96px -176px;
852
+ }
853
 
854
  .ui-icon-circle-plus {
855
+ background-position: 0 -192px;
856
+ }
857
 
858
  .ui-icon-circle-minus {
859
+ background-position: -16px -192px;
860
+ }
861
 
862
  .ui-icon-circle-close {
863
+ background-position: -32px -192px;
864
+ }
865
 
866
  .ui-icon-circle-triangle-e {
867
+ background-position: -48px -192px;
868
+ }
869
 
870
  .ui-icon-circle-triangle-s {
871
+ background-position: -64px -192px;
872
+ }
873
 
874
  .ui-icon-circle-triangle-w {
875
+ background-position: -80px -192px;
876
+ }
877
 
878
  .ui-icon-circle-triangle-n {
879
+ background-position: -96px -192px;
880
+ }
881
 
882
  .ui-icon-circle-arrow-e {
883
+ background-position: -112px -192px;
884
+ }
885
 
886
  .ui-icon-circle-arrow-s {
887
+ background-position: -128px -192px;
888
+ }
889
 
890
  .ui-icon-circle-arrow-w {
891
+ background-position: -144px -192px;
892
+ }
893
 
894
  .ui-icon-circle-arrow-n {
895
+ background-position: -160px -192px;
896
+ }
897
 
898
  .ui-icon-circle-zoomin {
899
+ background-position: -176px -192px;
900
+ }
901
 
902
  .ui-icon-circle-zoomout {
903
+ background-position: -192px -192px;
904
+ }
905
 
906
  .ui-icon-circle-check {
907
+ background-position: -208px -192px;
908
+ }
909
 
910
  .ui-icon-circlesmall-plus {
911
+ background-position: 0 -208px;
912
+ }
913
 
914
  .ui-icon-circlesmall-minus {
915
+ background-position: -16px -208px;
916
+ }
917
 
918
  .ui-icon-circlesmall-close {
919
+ background-position: -32px -208px;
920
+ }
921
 
922
  .ui-icon-squaresmall-plus {
923
+ background-position: -48px -208px;
924
+ }
925
 
926
  .ui-icon-squaresmall-minus {
927
+ background-position: -64px -208px;
928
+ }
929
 
930
  .ui-icon-squaresmall-close {
931
+ background-position: -80px -208px;
932
+ }
933
 
934
  .ui-icon-grip-dotted-vertical {
935
+ background-position: 0 -224px;
936
+ }
937
 
938
  .ui-icon-grip-dotted-horizontal {
939
+ background-position: -16px -224px;
940
+ }
941
 
942
  .ui-icon-grip-solid-vertical {
943
+ background-position: -32px -224px;
944
+ }
945
 
946
  .ui-icon-grip-solid-horizontal {
947
+ background-position: -48px -224px;
948
+ }
949
 
950
  .ui-icon-gripsmall-diagonal-se {
951
+ background-position: -64px -224px;
952
+ }
953
 
954
  .ui-icon-grip-diagonal-se {
955
+ background-position: -80px -224px;
956
+ }
957
 
958
  /* Corner radius */
959
  .ui-corner-all,
960
  .ui-corner-top,
961
  .ui-corner-left,
962
  .ui-corner-tl {
963
+ border-top-left-radius: 3px;
964
+ }
965
 
966
  .ui-corner-all,
967
  .ui-corner-top,
968
  .ui-corner-right,
969
  .ui-corner-tr {
970
+ border-top-right-radius: 3px;
971
+ }
972
 
973
  .ui-corner-all,
974
  .ui-corner-bottom,
975
  .ui-corner-left,
976
  .ui-corner-bl {
977
+ border-bottom-left-radius: 3px;
978
+ }
979
 
980
  .ui-corner-all,
981
  .ui-corner-bottom,
982
  .ui-corner-right,
983
  .ui-corner-br {
984
+ border-bottom-right-radius: 3px;
985
+ }
986
 
987
  .emr_upload_form form {
988
+ display: flex;
989
+ }
990
+ .emr_upload_form form .upsell-wrapper {
991
+ margin-left: 10px;
992
+ }
993
  .emr_upload_form .wrapper {
994
  padding: 18px;
995
+ border: 1px solid #ccc;
996
+ }
997
+ .emr_upload_form .wrapper .section-header {
998
+ font-size: 18px;
999
+ border-bottom: 1px solid #ccc;
1000
+ padding: 6px 0;
1001
+ margin: 0 0 15px 0;
1002
+ }
1003
  .emr_upload_form .image_chooser.wrapper {
1004
+ min-height: 350px;
1005
+ }
1006
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area {
1007
+ border: 4px dashed #b4b9be;
1008
+ max-width: 600px;
1009
+ padding: 28px 14px;
1010
+ text-align: center;
1011
+ position: relative;
1012
+ }
1013
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area h1 {
1014
+ display: none;
1015
+ }
1016
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area .drop-wrapper {
1017
+ margin: 0 auto;
1018
+ }
1019
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout {
1020
+ position: fixed;
1021
+ left: 0;
1022
+ right: 0;
1023
+ bottom: 0;
1024
+ top: 0;
1025
+ max-width: none;
1026
+ border-color: #83b4d8;
1027
+ border-width: 10px;
1028
+ z-index: 999999;
1029
+ background-color: rgba(68, 68, 68, 0.7);
1030
+ }
1031
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout h1 {
1032
+ color: #fff;
1033
+ position: absolute;
1034
+ font-size: 50px;
1035
+ line-height: 50px;
1036
+ margin-top: -25px;
1037
+ top: 50%;
1038
+ width: 100%;
1039
+ text-align: center;
1040
+ display: block;
1041
+ }
1042
+ .emr_upload_form .image_chooser.wrapper .emr_drop_area.drop_breakout .drop-wrapper {
1043
+ display: none;
1044
+ }
1045
+ .emr_upload_form .image_chooser.wrapper .image_previews {
1046
+ margin: 15px 0;
1047
+ }
1048
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder {
1049
+ position: relative;
1050
+ display: inline-block;
1051
+ margin-right: 25px;
1052
+ margin-bottom: 10px;
1053
+ border: 1px solid #ddd;
1054
+ vertical-align: top;
1055
+ max-height: 500px;
1056
+ }
1057
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .textlayer {
1058
+ font-size: 25px;
1059
+ line-height: 25px;
1060
+ opacity: 0.7;
1061
+ position: absolute;
1062
+ color: #ccc;
1063
+ left: 48%;
1064
+ top: 50%;
1065
+ transform: translate(-50%, -50%);
1066
+ border: 1px dashed #eee;
1067
+ background-color: #333;
1068
+ padding: 8px;
1069
+ }
1070
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .dashicons {
1071
+ font-size: 60px;
1072
+ position: absolute;
1073
+ top: 50%;
1074
+ margin-top: -30px;
1075
+ left: 50%;
1076
+ margin-left: -30px;
1077
+ opacity: 0.5;
1078
+ }
1079
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder .image_size {
1080
+ text-align: center;
1081
+ position: absolute;
1082
+ bottom: -25px;
1083
+ width: 100%;
1084
+ }
1085
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.is_image .dashicons::before, .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.is_image .dashicons {
1086
+ display: none;
1087
+ }
1088
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image img {
1089
+ display: none;
1090
+ }
1091
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image .textlayer {
1092
+ display: none;
1093
+ }
1094
+ .emr_upload_form .image_chooser.wrapper .image_previews .image_placeholder.not_image.is_document .textlayer {
1095
+ font-size: 18px;
1096
+ line-height: 20px;
1097
+ display: block;
1098
+ }
1099
  .emr_upload_form .form-error, .emr_upload_form .form-warning {
1100
  background: #fff;
1101
  padding: 8px;
1102
  border-left: 4px solid #ff0000;
1103
  margin: 10px 0;
1104
+ display: none;
1105
+ }
1106
+ .emr_upload_form .form-error p, .emr_upload_form .form-warning p {
1107
+ margin: 0;
1108
+ font-size: 12px;
1109
+ font-weight: 700;
1110
+ }
1111
  .emr_upload_form .form-warning {
1112
+ border-left: 4px solid #ffb900;
1113
+ }
1114
  .emr_upload_form .option-flex-wrapper {
1115
+ display: flex;
1116
+ }
1117
  .emr_upload_form .replace_type.wrapper {
1118
  flex: 1;
1119
  border: 1px solid #ccc;
1120
+ margin: 15px 0;
1121
+ }
1122
+ .emr_upload_form .replace_type.wrapper .option {
1123
+ position: relative;
1124
+ z-index: 1;
1125
+ }
1126
+ .emr_upload_form .replace_type.wrapper .option label {
1127
+ font-size: 1.2em;
1128
+ }
1129
+ .emr_upload_form .replace_type.wrapper .option .nofeature-notice {
1130
+ border: 1px solid #ccc;
1131
+ padding: 8px;
1132
+ margin: 0;
1133
+ position: absolute;
1134
+ left: 0;
1135
+ right: 0;
1136
+ top: 0;
1137
+ bottom: 0;
1138
+ opacity: 0.8;
1139
+ z-index: 9;
1140
+ background: #444;
1141
+ }
1142
+ .emr_upload_form .replace_type.wrapper .option .nofeature-notice p {
1143
+ text-align: center;
1144
+ color: #fff;
1145
+ margin: 15px 0;
1146
+ }
1147
  .emr_upload_form .options.wrapper {
1148
  flex: 1;
1149
  border: 1px solid #ccc;
1150
  padding: 15px;
1151
+ margin: 15px 0 15px 35px;
1152
+ }
1153
+ .emr_upload_form .options.wrapper .custom_date .emr_datepicker {
1154
+ width: 150px;
1155
+ }
1156
+ .emr_upload_form .options.wrapper .custom_date .emr_hour, .emr_upload_form .options.wrapper .custom_date .emr_minute {
1157
+ width: 45px;
1158
+ }
1159
+ .emr_upload_form .options.wrapper .replace_custom_date {
1160
+ margin-left: 5px;
1161
+ }
1162
+ .emr_upload_form .options.wrapper .replace_custom_date:hover {
1163
+ text-decoration: underline;
1164
+ cursor: pointer;
1165
+ }
1166
+ .emr_upload_form .options.wrapper ul li input {
1167
+ margin-right: 8px;
1168
+ }
1169
+ .emr_upload_form .options.wrapper .option label {
1170
+ vertical-align: top;
1171
+ }
1172
+ .emr_upload_form .options.wrapper .small {
1173
+ font-size: 10px;
1174
+ vertical-align: top;
1175
+ margin-left: 8px;
1176
+ }
1177
+ .emr_upload_form .options.wrapper .custom_date {
1178
+ margin: 8px 0 0 25px;
1179
+ visibility: hidden;
1180
+ opacity: 0;
1181
+ }
1182
+ .emr_upload_form .options.wrapper .custom_date span.field-title {
1183
+ display: inline-block;
1184
+ margin-bottom: 4px;
1185
+ color: #444;
1186
+ font-size: 12px;
1187
+ width: 100%;
1188
+ text-align: left;
1189
+ vertical-align: middle;
1190
+ line-height: 26px;
1191
+ }
1192
+ .emr_upload_form .options.wrapper .custom_date span.field-title::before {
1193
+ font-size: 20px;
1194
+ vertical-align: top;
1195
+ margin-right: 4px;
1196
+ }
1197
+ .emr_upload_form .options.wrapper .location_option {
1198
+ display: none;
1199
+ margin-top: 12px;
1200
+ }
1201
+ .emr_upload_form .options.wrapper .location_option label {
1202
+ vertical-align: baseline;
1203
+ margin-right: 8px;
1204
+ }
1205
  .emr_upload_form .form_controls.wrapper {
1206
  clear: both;
1207
  margin: 8px 0 15px 0;
1208
  border: 0;
1209
+ padding: 0;
1210
+ }
1211
+ .emr_upload_form .form_controls.wrapper .button {
1212
+ padding-left: 20px;
1213
+ padding-right: 20px;
1214
+ }
1215
  .emr_upload_form .shortpixel.notice {
1216
+ padding: 12px;
1217
+ }
1218
  .emr_upload_form .shortpixel-offer {
1219
  background: #fff;
1220
  width: 250px;
1221
  min-height: 270px;
1222
  border: 1px solid #ccc;
1223
+ padding: 10px;
1224
+ margin-bottom: 10px;
1225
  float: right;
1226
+ clear: both;
1227
+ background-color: #dcfdff;
1228
+ }
1229
+ .emr_upload_form .shortpixel-offer h3 {
1230
+ color: #00d0e5;
1231
+ font-size: 18px;
1232
+ text-align: center;
1233
+ margin: 0;
1234
+ line-height: 1.3em;
1235
+ }
1236
+ .emr_upload_form .shortpixel-offer h4 {
1237
+ font-size: 16px;
1238
+ text-align: center;
1239
+ }
1240
+ .emr_upload_form .shortpixel-offer .red {
1241
+ color: #ff0000;
1242
+ }
1243
+ .emr_upload_form .shortpixel-offer .cyan {
1244
+ color: #00d0e5;
1245
+ }
1246
+ .emr_upload_form .shortpixel-offer .grey {
1247
+ color: grey;
1248
+ }
1249
+ .emr_upload_form .shortpixel-offer .ucase {
1250
+ text-transform: uppercase;
1251
+ }
1252
+ .emr_upload_form .shortpixel-offer a {
1253
+ text-decoration: none;
1254
+ }
1255
+ .emr_upload_form .shortpixel-offer .button-wrapper {
1256
+ text-align: center;
1257
+ margin-top: 35px;
1258
+ }
1259
+ .emr_upload_form .shortpixel-offer .button-wrapper a {
1260
+ background-color: #ff0000;
1261
+ color: #fff;
1262
+ display: inline-block;
1263
+ padding: 8px;
1264
+ text-decoration: none;
1265
+ font-weight: 700;
1266
+ font-size: 20px;
1267
+ text-transform: uppercase;
1268
+ }
1269
+ .emr_upload_form .shortpixel-offer .hidden {
1270
+ display: none !important;
1271
+ }
1272
+ .emr_upload_form .shortpixel-offer .img-wrapper {
1273
+ text-align: center;
1274
+ margin: 0 0 25px 0;
1275
+ }
1276
+ .emr_upload_form .shortpixel-offer .img-wrapper img {
1277
+ max-width: 140px;
1278
+ max-height: 140px;
1279
+ margin: 0;
1280
+ }
1281
+ .emr_upload_form .shortpixel-offer.envira-shortpixel-install {
1282
+ background: #fff;
1283
+ }
1284
  @media (max-width: 1200px) {
1285
  .emr_upload_form .image_previews {
1286
+ text-align: center;
1287
+ }
1288
  .emr_upload_form .option-flex-wrapper {
1289
+ flex-direction: column;
1290
+ }
1291
+ .emr_upload_form .option-flex-wrapper .options.wrapper {
1292
+ margin-left: 0;
1293
+ }
1294
+ }
1295
  @media (max-width: 960px) {
1296
  .emr_upload_form .upsell-wrapper {
1297
+ display: none;
1298
+ }
1299
+ }
1300
+ @media (max-width: 450px) {
1301
+ .emr_upload_form .replace_custom_date_wrapper {
1302
+ display: block;
1303
+ margin-top: 15px;
1304
+ font-size: 16px;
1305
+ }
1306
+ .emr_upload_form .location_option label {
1307
+ margin: 25px 0;
1308
+ display: inline-block;
1309
+ }
1310
+ }
1311
+
1312
+ /*# sourceMappingURL=admin.css.map */
css/admin.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sourceRoot":"","sources":["../scss/_datepicker.scss","../scss/admin.scss"],"names":[],"mappings":"AAEA;EACC;EACA;EACA;;;AAID;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;EACA;EACA;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;AACA;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAED;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAGD;AACA;EAAiB;;;AACjB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAuB;;;AACvB;EAAyB;;;AACzB;EAAuB;;;AACvB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA4B;;;AAC5B;EAA8B;;;AAC9B;EAA4B;;;AAC5B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAAmB;;;AACnB;EAAwB;;;AACxB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAwB;;;AACxB;EAA6B;;;AAC7B;EAA4B;;;AAC5B;EAAuB;;;AACvB;EAAoB;;;AACpB;EAAsB;;;AACtB;EAAgB;;;AAChB;EAAuB;;;AACvB;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAe;;;AACf;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAoB;;;AACpB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAsB;;;AACtB;EAAkB;;;AAClB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAe;;;AACf;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAqB;;;AACrB;EAAgB;;;AAChB;EAAmB;;;AACnB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAoB;;;AACpB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAsB;;;AACtB;AACA;EAAsB;;;AACtB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAuB;;;AACvB;EAAkB;;;AAClB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAuB;;;AACvB;EAAwB;;;AACxB;EAAwB;;;AACxB;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAAwB;;;AACxB;EAA4B;;;AAC5B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA4B;;;AAC5B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAAgC;;;AAChC;EAAkC;;;AAClC;EAA+B;;;AAC/B;EAAiC;;;AACjC;EAAiC;;;AACjC;EAA4B;;;AAE5B;AACA;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AC/ZC;EAEE;;AACA;EAEE;;AAIJ;EAGE;EACA;;AAEA;EAEE;EAEA;EACA;EACA;;AAIJ;EAEE;;AAEA;EAEE;EACA;EACA;EACA;EACA;;AACA;EAAK;;AACL;EAEE;;AAGF;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EAAgB;;AAGtB;EAEE;;AACA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEG;EACA;EACA;EACA;;AAID;EAAiC;;AAMjC;EAAM;;AACN;EAAa;;AAEX;EACE;EACA;EACA;;AASZ;EAEE;EACA;EACA;EAEA;EACA;;AACA;EACI;EACA;EACA;;AAIN;EAEE;;AAGF;EAEE;;AAGF;EAEE;EACA;EACA;;AACA;EAEE;EACA;;AAKA;EAEE;;AAEF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAOR;EAEE;EACA;EACA;EACA;;AAGE;EACE;;AAEF;EAEE;;AAGN;EAEE;;AACA;EACC;EACA;;AAOG;EAEE;;AAMJ;EAAQ;;AAEV;EAEE;EACA;EACA;;AAEF;EAEE;EACA;EACA;;AACA;EACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AACA;EAEE;EACA;EACA;;AAIN;EAEE;EACA;;AACA;EAEE;EACA;;AAKN;EAEE;EACA;EACA;EACA;;AACA;EAEE;EACA;;AAIJ;EAEG;;AAEH;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACF;;AACE;EACE;EACA;EACA;EACA;EACA;;AAEJ;EAEE;EACA;;AAEF;EAAO;;AACP;EAAQ;;AACR;EAAQ;;AACR;EAAS;;AACR;EACE;;AAED;EAEE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACJ;;AAGF;EAAU;;AAER;EAEE;EACA;;AACA;EAAM;EAAkB;EAAmB;;AAS/C;EAEE;;AAIF;EAEI;IAEG;;EAEH;IACE;;EACA;IACE;;;AAGR;EAEE;IAAkB;;;AAErB;EAEE;IACE;IACA;IACA;;EAIA;IACE;IACD","file":"admin.css"}
css/edit_attachment.css CHANGED
@@ -3,18 +3,23 @@
3
  display: inline-block;
4
  position: relative;
5
  clear: both;
6
- margin: 3px 0; }
7
- #emr-replace-box .previewwrapper img, #emr-showthumbs-box .previewwrapper img {
8
- max-width: 100%; }
9
- #emr-replace-box .previewwrapper span.label, #emr-showthumbs-box .previewwrapper span.label {
10
- font-size: 14px;
11
- color: #fff;
12
- position: absolute;
13
- line-height: 16px;
14
- margin-top: -8px;
15
- top: 50%;
16
- left: 0;
17
- right: 0;
18
- background: rgba(0, 0, 0, 0.5);
19
- text-align: center;
20
- padding: 4px 0; }
 
 
 
 
 
3
  display: inline-block;
4
  position: relative;
5
  clear: both;
6
+ margin: 3px 0;
7
+ }
8
+ #emr-replace-box .previewwrapper img, #emr-showthumbs-box .previewwrapper img {
9
+ max-width: 100%;
10
+ }
11
+ #emr-replace-box .previewwrapper span.label, #emr-showthumbs-box .previewwrapper span.label {
12
+ font-size: 14px;
13
+ color: #fff;
14
+ position: absolute;
15
+ line-height: 16px;
16
+ margin-top: -8px;
17
+ top: 50%;
18
+ left: 0;
19
+ right: 0;
20
+ background: rgba(0, 0, 0, 0.5);
21
+ text-align: center;
22
+ padding: 4px 0;
23
+ }
24
+
25
+ /*# sourceMappingURL=edit_attachment.css.map */
css/edit_attachment.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sourceRoot":"","sources":["../scss/edit_attachment.scss"],"names":[],"mappings":"AACA;AAGE;EAEE;EACA;EACA;EACA;;AAEA;EAAM;;AACN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAAS;EACT;EACA;EACA","file":"edit_attachment.css"}
enable-media-replace.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Enable Media Replace
4
  * Plugin URI: https://wordpress.org/plugins/enable-media-replace/
5
  * Description: Enable replacing media files by uploading a new file in the "Edit Media" section of the WordPress Media Library.
6
- * Version: 3.5.0
7
  * Author: ShortPixel
8
  * Author URI: https://shortpixel.com
9
  * GitHub Plugin URI: https://github.com/short-pixel-optimizer/enable-media-replace
@@ -27,7 +27,7 @@
27
 
28
  namespace EnableMediaReplace;
29
 
30
- define('EMR_VERSION', '3.5.0');
31
 
32
  if ( ! defined( 'ABSPATH' ) ) {
33
  exit; // Exit if accessed directly.
@@ -46,6 +46,21 @@ if(!defined("SHORTPIXEL_AFFILIATE_CODE")) {
46
  define("SHORTPIXEL_AFFILIATE_CODE", 'VKG6LYN28044');
47
  }
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  $plugin_path = plugin_dir_path(EMR_ROOT_FILE);
50
 
51
  require_once($plugin_path . 'build/shortpixel/autoload.php');
@@ -59,11 +74,12 @@ require_once($plugin_path . 'classes/emr-plugin.php');
59
  require_once($plugin_path . 'classes/externals.php');
60
  require_once($plugin_path . 'classes/external/elementor.php');
61
  require_once($plugin_path . 'classes/external/wpbakery.php');
 
62
  require_once($plugin_path . 'thumbnail_updater.php');
63
 
64
  $emr_plugin = EnableMediaReplacePlugin::get();
65
 
66
- register_uninstall_hook(__FILE__, 'emr_uninstall');
67
 
68
  function emr_uninstall()
69
  {
3
  * Plugin Name: Enable Media Replace
4
  * Plugin URI: https://wordpress.org/plugins/enable-media-replace/
5
  * Description: Enable replacing media files by uploading a new file in the "Edit Media" section of the WordPress Media Library.
6
+ * Version: 3.6.0
7
  * Author: ShortPixel
8
  * Author URI: https://shortpixel.com
9
  * GitHub Plugin URI: https://github.com/short-pixel-optimizer/enable-media-replace
27
 
28
  namespace EnableMediaReplace;
29
 
30
+ define('EMR_VERSION', '3.6.0');
31
 
32
  if ( ! defined( 'ABSPATH' ) ) {
33
  exit; // Exit if accessed directly.
46
  define("SHORTPIXEL_AFFILIATE_CODE", 'VKG6LYN28044');
47
  }
48
 
49
+ /** Usage:
50
+ * Define in wp-config.php
51
+ * // User must have this capability to replace all
52
+ * define('EMR_CAPABILITY' ,'edit_upload_all' );
53
+ * // User must have first capability to replace all OR second capability to replace only own files
54
+ * define('EMR_CAPABILITY' ,array('edit_upload_all', 'edit_upload_user') );
55
+ *
56
+ *
57
+ **/
58
+ if (! defined('EMR_CAPABILITY'))
59
+ define('EMR_CAPABILITY', false);
60
+
61
+ /* if (! defined('EMR_CAPABILITY_USERONLY'))
62
+ define('EMR_CAPABILITY_USERONLY', false); */
63
+
64
  $plugin_path = plugin_dir_path(EMR_ROOT_FILE);
65
 
66
  require_once($plugin_path . 'build/shortpixel/autoload.php');
74
  require_once($plugin_path . 'classes/externals.php');
75
  require_once($plugin_path . 'classes/external/elementor.php');
76
  require_once($plugin_path . 'classes/external/wpbakery.php');
77
+ require_once($plugin_path . 'classes/external/upsell_installer.php');
78
  require_once($plugin_path . 'thumbnail_updater.php');
79
 
80
  $emr_plugin = EnableMediaReplacePlugin::get();
81
 
82
+ register_uninstall_hook(__FILE__, '\EnableMediaReplace\emr_uninstall');
83
 
84
  function emr_uninstall()
85
  {
img/envira-logo.png ADDED
Binary file
img/shortpixel.png DELETED
Binary file
img/sp-logo-regular.svg ADDED
@@ -0,0 +1,436 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="51.877094mm"
13
+ height="53.161201mm"
14
+ viewBox="0 0 51.877094 53.161201"
15
+ version="1.1"
16
+ id="svg985"
17
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
18
+ sodipodi:docname="SHORTPIXEL Robot Regular.svg">
19
+ <defs
20
+ id="defs979" />
21
+ <sodipodi:namedview
22
+ id="base"
23
+ pagecolor="#ffffff"
24
+ bordercolor="#666666"
25
+ borderopacity="1.0"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pageshadow="2"
28
+ inkscape:zoom="0.35"
29
+ inkscape:cx="-407.38638"
30
+ inkscape:cy="99.20227"
31
+ inkscape:document-units="mm"
32
+ inkscape:current-layer="layer1"
33
+ showgrid="false"
34
+ fit-margin-top="0"
35
+ fit-margin-left="0"
36
+ fit-margin-right="0"
37
+ fit-margin-bottom="0"
38
+ inkscape:window-width="1853"
39
+ inkscape:window-height="1025"
40
+ inkscape:window-x="67"
41
+ inkscape:window-y="27"
42
+ inkscape:window-maximized="1" />
43
+ <metadata
44
+ id="metadata982">
45
+ <rdf:RDF>
46
+ <cc:Work
47
+ rdf:about="">
48
+ <dc:format>image/svg+xml</dc:format>
49
+ <dc:type
50
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
51
+ <dc:title></dc:title>
52
+ </cc:Work>
53
+ </rdf:RDF>
54
+ </metadata>
55
+ <g
56
+ inkscape:label="Layer 1"
57
+ inkscape:groupmode="layer"
58
+ id="layer1"
59
+ transform="translate(-79.061456,-121.9194)">
60
+ <g
61
+ id="g6698"
62
+ transform="matrix(0.72173333,0,0,0.72173333,220.51847,157.29398)">
63
+ <g
64
+ transform="matrix(0.35277777,0,0,-0.35277777,-171.70416,8.601389)"
65
+ id="g1336">
66
+ <path
67
+ inkscape:connector-curvature="0"
68
+ id="path1338"
69
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
70
+ d="m 0,0 c 0,0 -4.484,-4.226 -4.484,-14.851 0,-10.625 16.769,-30.625 56.384,-30.625 39.616,0 53.116,13.875 53.116,25.25 0,11.375 -2.792,12.708 -2.792,12.708 z" />
71
+ </g>
72
+ <g
73
+ transform="matrix(0.35277777,0,0,-0.35277777,-170.27428,8.482539)"
74
+ id="g1340">
75
+ <path
76
+ inkscape:connector-curvature="0"
77
+ id="path1342"
78
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
79
+ d="m 0,0 -4.086,-0.337 c 0,0 -1.243,-11.309 -1.243,-14.687 0,-7.673 15.443,-27.664 52.565,-27.664 31.872,0 50.935,9.953 50.935,22.099 0,3.253 0,13.985 0,13.985 l -7.591,3.897 z" />
80
+ </g>
81
+ <g
82
+ transform="matrix(0.35277777,0,0,-0.35277777,-170.80208,5.020899)"
83
+ id="g1344">
84
+ <path
85
+ inkscape:connector-curvature="0"
86
+ id="path1346"
87
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
88
+ d="m 0,0 c 0,0 -2.59,-1.499 -2.59,-12.169 0,-7.581 15.257,-27.331 51.933,-27.331 31.49,0 50.324,9.833 50.324,21.833 0,14.5 -7.5,17.667 -7.5,17.667 z" />
89
+ </g>
90
+ <g
91
+ transform="matrix(0.35277777,0,0,-0.35277777,-177.76203,-43.276561)"
92
+ id="g1348">
93
+ <path
94
+ inkscape:connector-curvature="0"
95
+ id="path1350"
96
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
97
+ d="m 0,0 -28.562,-27.74 v -95.166 l 29.624,-11.75 z" />
98
+ </g>
99
+ <g
100
+ transform="matrix(0.35277777,0,0,-0.35277777,-157.45526,7.534449)"
101
+ id="g1352">
102
+ <path
103
+ inkscape:connector-curvature="0"
104
+ id="path1354"
105
+ style="fill:#d7292a;fill-opacity:1;fill-rule:nonzero;stroke:none"
106
+ d="m 0,0 0.574,7.125 h -38.407 c 0,0 -2.591,-1.499 -2.591,-12.169 0,-2.132 1.207,-5.227 3.758,-8.575 z" />
107
+ </g>
108
+ <g
109
+ transform="matrix(0.35277777,0,0,-0.35277777,-148.37123,8.601389)"
110
+ id="g1356">
111
+ <path
112
+ inkscape:connector-curvature="0"
113
+ id="path1358"
114
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none"
115
+ d="m 0,0 c 0,-3.266 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.647 -14.24,5.913 0,3.267 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.267 0,0" />
116
+ </g>
117
+ <path
118
+ inkscape:connector-curvature="0"
119
+ id="path1360"
120
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
121
+ d="m -148.37123,5.791719 h -10.04711 v 2.80988 h 10.04711 z" />
122
+ <g
123
+ transform="matrix(0.35277777,0,0,-0.35277777,-148.37123,5.791579)"
124
+ id="g1362">
125
+ <path
126
+ inkscape:connector-curvature="0"
127
+ id="path1364"
128
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none"
129
+ d="m 0,0 c 0,-3.267 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.646 -14.24,5.913 0,3.266 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.266 0,0" />
130
+ </g>
131
+ <path
132
+ inkscape:connector-curvature="0"
133
+ id="path1366"
134
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
135
+ d="m -148.37123,3.903659 h -10.04711 v 1.73461 h 10.04711 z" />
136
+ <g
137
+ transform="matrix(0.35277777,0,0,-0.35277777,-150.92887,-44.367981)"
138
+ id="g1368">
139
+ <path
140
+ inkscape:connector-curvature="0"
141
+ id="path1370"
142
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
143
+ d="m 0,0 h -68 c -6.6,0 -12,-5.4 -12,-12 v -116 c 0,-6.6 5.4,-12 12,-12 H 0 Z" />
144
+ </g>
145
+ <g
146
+ transform="matrix(0.35277777,0,0,-0.35277777,-128.35109,-44.367981)"
147
+ id="g1372">
148
+ <path
149
+ inkscape:connector-curvature="0"
150
+ id="path1374"
151
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
152
+ d="M 0,0 H -64 V -140 H 0 c 6.6,0 12,5.4 12,12 V -12 C 12,-5.4 6.6,0 0,0" />
153
+ </g>
154
+ <g
155
+ transform="matrix(0.35277777,0,0,-0.35277777,-146.69554,-48.380831)"
156
+ id="g1376">
157
+ <path
158
+ inkscape:connector-curvature="0"
159
+ id="path1378"
160
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
161
+ d="m 0,0 v -5.5 l 32.648,-4.046 0.227,8.171 z" />
162
+ </g>
163
+ <g
164
+ transform="matrix(0.35277777,0,0,-0.35277777,-153.48651,-47.807571)"
165
+ id="g1380">
166
+ <path
167
+ inkscape:connector-curvature="0"
168
+ id="path1382"
169
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
170
+ d="M 0,0 -41.083,3.418 -41.5,-6.666 -0.375,-6.5 Z" />
171
+ </g>
172
+ <g
173
+ transform="matrix(0.35277777,0,0,-0.35277777,-181.97331,-17.909651)"
174
+ id="g1384">
175
+ <path
176
+ inkscape:connector-curvature="0"
177
+ id="path1386"
178
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
179
+ d="m 0,0 c 0,-15.33 -7.219,-27.758 -16.125,-27.758 -8.906,0 -16.125,12.428 -16.125,27.758 0,15.33 7.219,27.758 16.125,27.758 C -7.219,27.758 0,15.33 0,0" />
180
+ </g>
181
+ <g
182
+ transform="matrix(0.35277777,0,0,-0.35277777,-187.5466,-26.596801)"
183
+ id="g1388">
184
+ <path
185
+ inkscape:connector-curvature="0"
186
+ id="path1390"
187
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
188
+ d="m 0,0 c -0.108,0 -5.711,0.023 -5.82,0.023 -6.93,0 -12.548,-11.037 -12.548,-24.636 0,-13.6 5.618,-24.631 12.548,-24.631 0.109,0 5.712,-0.012 5.82,-0.012 6.931,0 12.548,11.027 12.548,24.628 C 12.548,-11.027 6.931,0 0,0" />
189
+ </g>
190
+ <g
191
+ transform="matrix(0.35277777,0,0,-0.35277777,-185.23651,-17.909651)"
192
+ id="g1392">
193
+ <path
194
+ inkscape:connector-curvature="0"
195
+ id="path1394"
196
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
197
+ d="m 0,0 c 0,-13.6 -5.578,-24.625 -12.458,-24.625 -6.881,0 -12.459,11.025 -12.459,24.625 0,13.6 5.578,24.625 12.459,24.625 C -5.578,24.625 0,13.6 0,0" />
198
+ </g>
199
+ <g
200
+ transform="matrix(0.35277777,0,0,-0.35277777,-189.55803,-18.130141)"
201
+ id="g1396">
202
+ <path
203
+ inkscape:connector-curvature="0"
204
+ id="path1398"
205
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
206
+ d="m 0,0 c 0,-3.383 -1.679,-6.125 -3.75,-6.125 -2.071,0 -3.75,2.742 -3.75,6.125 0,3.383 1.679,6.125 3.75,6.125 C -1.679,6.125 0,3.383 0,0" />
207
+ </g>
208
+ <g
209
+ transform="matrix(0.35277777,0,0,-0.35277777,-191.45422,-20.290901)"
210
+ id="g1400">
211
+ <path
212
+ inkscape:connector-curvature="0"
213
+ id="path1402"
214
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
215
+ d="m 0,0 h -10.875 c -1.104,0 -2,-2.742 -2,-6.125 0,-3.383 0.896,-6.125 2,-6.125 H 0 c 1.104,0 2,2.742 2,6.125 C 2,-2.742 1.104,0 0,0" />
216
+ </g>
217
+ <g
218
+ transform="matrix(0.35277777,0,0,-0.35277777,-139.99276,-31.551531)"
219
+ id="g1404">
220
+ <path
221
+ inkscape:connector-curvature="0"
222
+ id="path1406"
223
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
224
+ d="m 0,0 c -1.042,0.008 -4.266,0.84 -4.349,0.832 -12.234,-1.086 -20.401,-9.461 -20.401,-20.127 0,-10.666 8.908,-19.326 19.896,-19.326 0.084,0 3.812,-0.002 4.854,-0.002 z" />
225
+ </g>
226
+ <g
227
+ transform="matrix(0.35277777,0,0,-0.35277777,-133.23124,-24.943161)"
228
+ id="g1408">
229
+ <path
230
+ inkscape:connector-curvature="0"
231
+ id="path1410"
232
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
233
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0" />
234
+ </g>
235
+ <g
236
+ transform="matrix(0.35277777,0,0,-0.35277777,-135.0387,-25.075451)"
237
+ id="g1412">
238
+ <path
239
+ inkscape:connector-curvature="0"
240
+ id="path1414"
241
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
242
+ d="m 0,0 c 0,-7.951 -6.446,-14.398 -14.398,-14.398 -7.952,0 -14.398,6.447 -14.398,14.398 0,7.951 6.446,14.398 14.398,14.398 C -6.446,14.398 0,7.951 0,0" />
243
+ </g>
244
+ <g
245
+ transform="matrix(0.35277777,0,0,-0.35277777,-137.49128,-25.031351)"
246
+ id="g1416">
247
+ <path
248
+ inkscape:connector-curvature="0"
249
+ id="path1418"
250
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
251
+ d="m 0,0 c 0,-4.182 -3.39,-7.57 -7.571,-7.57 -4.181,0 -7.571,3.388 -7.571,7.57 0,4.182 3.39,7.57 7.571,7.57 C -3.39,7.57 0,4.182 0,0" />
252
+ </g>
253
+ <g
254
+ transform="matrix(0.35277777,0,0,-0.35277777,-159.39554,-31.551531)"
255
+ id="g1420">
256
+ <path
257
+ inkscape:connector-curvature="0"
258
+ id="path1422"
259
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
260
+ d="m 0,0 c -1.042,0.008 -4.266,0.84 -4.349,0.832 -12.234,-1.086 -20.401,-9.461 -20.401,-20.127 0,-10.666 8.908,-19.326 19.896,-19.326 0.084,0 3.812,-0.002 4.854,-0.002 z" />
261
+ </g>
262
+ <g
263
+ transform="matrix(0.35277777,0,0,-0.35277777,-152.63402,-24.943161)"
264
+ id="g1424">
265
+ <path
266
+ inkscape:connector-curvature="0"
267
+ id="path1426"
268
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
269
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0" />
270
+ </g>
271
+ <g
272
+ transform="matrix(0.35277777,0,0,-0.35277777,-154.44148,-25.075451)"
273
+ id="g1428">
274
+ <path
275
+ inkscape:connector-curvature="0"
276
+ id="path1430"
277
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
278
+ d="m 0,0 c 0,-7.951 -6.446,-14.398 -14.398,-14.398 -7.952,0 -14.398,6.447 -14.398,14.398 0,7.951 6.446,14.398 14.398,14.398 C -6.446,14.398 0,7.951 0,0" />
279
+ </g>
280
+ <g
281
+ transform="matrix(0.35277777,0,0,-0.35277777,-156.89406,-25.031351)"
282
+ id="g1432">
283
+ <path
284
+ inkscape:connector-curvature="0"
285
+ id="path1434"
286
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
287
+ d="m 0,0 c 0,-4.182 -3.39,-7.57 -7.571,-7.57 -4.181,0 -7.571,3.388 -7.571,7.57 0,4.182 3.39,7.57 7.571,7.57 C -3.39,7.57 0,4.182 0,0" />
288
+ </g>
289
+ <g
290
+ transform="matrix(0.35277777,0,0,-0.35277777,-156.80498,-7.286001)"
291
+ id="g1436">
292
+ <path
293
+ inkscape:connector-curvature="0"
294
+ id="path1438"
295
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
296
+ d="m 0,0 c 0.07,-4.725 -3.702,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.07,4.723 3.702,8.608 8.426,8.678 C -3.956,8.495 -0.07,4.724 0,0" />
297
+ </g>
298
+ <g
299
+ transform="matrix(0.35277777,0,0,-0.35277777,-138.27367,-7.560241)"
300
+ id="g1440">
301
+ <path
302
+ inkscape:connector-curvature="0"
303
+ id="path1442"
304
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
305
+ d="m 0,0 c 0.07,-4.724 -3.702,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.07,4.724 3.702,8.609 8.425,8.679 C -3.956,8.495 -0.07,4.724 0,0" />
306
+ </g>
307
+ <g
308
+ transform="matrix(0.35277777,0,0,-0.35277777,-139.38005,-5.182771)"
309
+ id="g1444">
310
+ <path
311
+ inkscape:connector-curvature="0"
312
+ id="path1446"
313
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
314
+ d="m 0,0 c 0,0 -11.162,-12.342 -32.756,-12.661 -18.804,-0.278 -31.421,12.65 -31.421,12.65 l 12.321,11.853 c 0,0 9.5,-8.029 19.708,-7.822 13.944,0.28 20.337,8.343 20.337,8.343 z" />
315
+ </g>
316
+ <g
317
+ transform="matrix(0.35277777,0,0,-0.35277777,-156.51906,-8.281291)"
318
+ id="g1448">
319
+ <path
320
+ inkscape:connector-curvature="0"
321
+ id="path1450"
322
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
323
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.788,0 -8.669,3.882 -8.669,8.67 0,4.787 3.881,8.668 8.669,8.668 C -3.881,8.668 0,4.787 0,0" />
324
+ </g>
325
+ <g
326
+ transform="matrix(0.35277777,0,0,-0.35277777,-137.73674,-8.281291)"
327
+ id="g1452">
328
+ <path
329
+ inkscape:connector-curvature="0"
330
+ id="path1454"
331
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
332
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.789,0 -8.669,3.882 -8.669,8.67 0,4.787 3.88,8.668 8.669,8.668 C -3.881,8.668 0,4.787 0,0" />
333
+ </g>
334
+ <g
335
+ transform="matrix(0.35277777,0,0,-0.35277777,-138.89343,-5.888321)"
336
+ id="g1456">
337
+ <path
338
+ inkscape:connector-curvature="0"
339
+ id="path1458"
340
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
341
+ d="m 0,0 c 0,0 -11.496,-12.338 -33.383,-12.338 -19.058,0 -31.65,13.291 -31.65,13.291 l 12.663,11.824 c 0,0 9.507,-8.277 19.853,-8.222 14.135,0.076 20.734,8.15 20.734,8.15 z" />
342
+ </g>
343
+ <path
344
+ inkscape:connector-curvature="0"
345
+ id="path1460"
346
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
347
+ d="m -149.10854,-3.483861 h -1.47496 v -1.88701 h 1.47496 z" />
348
+ <g
349
+ transform="matrix(0.35277777,0,0,-0.35277777,-151.67284,-3.580141)"
350
+ id="g1462">
351
+ <path
352
+ inkscape:connector-curvature="0"
353
+ id="path1464"
354
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
355
+ d="M 0,0 -4.076,0.926 -2.893,6.143 1.185,5.217 Z" />
356
+ </g>
357
+ <g
358
+ transform="matrix(0.35277777,0,0,-0.35277777,-154.05857,-4.178521)"
359
+ id="g1466">
360
+ <path
361
+ inkscape:connector-curvature="0"
362
+ id="path1468"
363
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
364
+ d="m 0,0 -3.894,1.521 1.946,4.982 3.894,-1.52 z" />
365
+ </g>
366
+ <g
367
+ transform="matrix(0.35277777,0,0,-0.35277777,-156.28908,-5.076651)"
368
+ id="g1470">
369
+ <path
370
+ inkscape:connector-curvature="0"
371
+ id="path1472"
372
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
373
+ d="M 0,0 -3.727,1.894 -1.304,6.662 2.423,4.769 Z" />
374
+ </g>
375
+ <g
376
+ transform="matrix(0.35277777,0,0,-0.35277777,-158.47725,-6.252141)"
377
+ id="g1474">
378
+ <path
379
+ inkscape:connector-curvature="0"
380
+ id="path1476"
381
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
382
+ d="M 0,0 -3.383,2.456 -0.241,6.783 3.142,4.327 Z" />
383
+ </g>
384
+ <path
385
+ inkscape:connector-curvature="0"
386
+ id="path1478"
387
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
388
+ d="m -150.5835,-3.483861 h 1.47496 v -1.88701 h -1.47496 z" />
389
+ <g
390
+ transform="matrix(0.35277777,0,0,-0.35277777,-148.01898,-3.580141)"
391
+ id="g1480">
392
+ <path
393
+ inkscape:connector-curvature="0"
394
+ id="path1482"
395
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
396
+ d="M 0,0 4.076,0.926 2.893,6.143 -1.185,5.217 Z" />
397
+ </g>
398
+ <g
399
+ transform="matrix(0.35277777,0,0,-0.35277777,-145.63325,-4.178521)"
400
+ id="g1484">
401
+ <path
402
+ inkscape:connector-curvature="0"
403
+ id="path1486"
404
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
405
+ d="M 0,0 3.894,1.521 1.948,6.503 -1.946,4.983 Z" />
406
+ </g>
407
+ <g
408
+ transform="matrix(0.35277777,0,0,-0.35277777,-143.40271,-5.076651)"
409
+ id="g1488">
410
+ <path
411
+ inkscape:connector-curvature="0"
412
+ id="path1490"
413
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
414
+ d="M 0,0 3.727,1.894 1.304,6.662 -2.423,4.769 Z" />
415
+ </g>
416
+ <g
417
+ transform="matrix(0.35277777,0,0,-0.35277777,-141.21457,-6.252141)"
418
+ id="g1492">
419
+ <path
420
+ inkscape:connector-curvature="0"
421
+ id="path1494"
422
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
423
+ d="M 0,0 3.383,2.456 0.241,6.783 -3.142,4.327 Z" />
424
+ </g>
425
+ <g
426
+ transform="matrix(0.35277777,0,0,-0.35277777,-132.42508,-42.839041)"
427
+ id="g1496">
428
+ <path
429
+ inkscape:connector-curvature="0"
430
+ id="path1498"
431
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
432
+ d="m 0,0 v -3.166 c 0,0 6.917,0.75 11.333,-3.666 4.416,-4.417 4,-10.668 4,-10.668 h 3 c 0,0 1.334,9.668 -3.833,14.168 C 9.333,1.168 0,0 0,0" />
433
+ </g>
434
+ </g>
435
+ </g>
436
+ </svg>
img/sp-logo-wink.svg ADDED
@@ -0,0 +1,418 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="52.027439mm"
13
+ height="53.148357mm"
14
+ viewBox="0 0 52.027439 53.148357"
15
+ version="1.1"
16
+ id="svg4043"
17
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
18
+ sodipodi:docname="SHORTPIXEL Robot Winky.svg">
19
+ <defs
20
+ id="defs4037" />
21
+ <sodipodi:namedview
22
+ id="base"
23
+ pagecolor="#ffffff"
24
+ bordercolor="#666666"
25
+ borderopacity="1.0"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pageshadow="2"
28
+ inkscape:zoom="0.35"
29
+ inkscape:cx="-1798.8233"
30
+ inkscape:cy="486.15214"
31
+ inkscape:document-units="mm"
32
+ inkscape:current-layer="layer1"
33
+ showgrid="false"
34
+ fit-margin-top="0"
35
+ fit-margin-left="0"
36
+ fit-margin-right="0"
37
+ fit-margin-bottom="0"
38
+ inkscape:window-width="1853"
39
+ inkscape:window-height="1025"
40
+ inkscape:window-x="67"
41
+ inkscape:window-y="27"
42
+ inkscape:window-maximized="1" />
43
+ <metadata
44
+ id="metadata4040">
45
+ <rdf:RDF>
46
+ <cc:Work
47
+ rdf:about="">
48
+ <dc:format>image/svg+xml</dc:format>
49
+ <dc:type
50
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
51
+ <dc:title></dc:title>
52
+ </cc:Work>
53
+ </rdf:RDF>
54
+ </metadata>
55
+ <g
56
+ inkscape:label="Layer 1"
57
+ inkscape:groupmode="layer"
58
+ id="layer1"
59
+ transform="translate(-447.21247,-224.31273)">
60
+ <g
61
+ id="g6944"
62
+ transform="matrix(-0.53078769,0,0,0.53078769,489.41328,252.13805)">
63
+ <g
64
+ transform="matrix(0.35277777,0,0,-0.35277777,46.460542,25.88487)"
65
+ id="g997">
66
+ <path
67
+ inkscape:connector-curvature="0"
68
+ id="path999"
69
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
70
+ d="m 0,0 c 0,0 6.101,-5.748 6.101,-20.201 0,-14.454 -22.813,-41.661 -76.704,-41.661 -53.889,0 -72.254,18.875 -72.254,34.348 0,15.475 3.796,17.287 3.796,17.287 z" />
71
+ </g>
72
+ <g
73
+ transform="matrix(0.35277777,0,0,-0.35277777,44.515462,25.72298)"
74
+ id="g1001">
75
+ <path
76
+ inkscape:connector-curvature="0"
77
+ id="path1003"
78
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
79
+ d="m 0,0 5.559,-0.459 c 0,0 1.689,-15.385 1.689,-19.979 0,-10.438 -21.007,-37.632 -71.505,-37.632 -43.358,0 -69.29,13.539 -69.29,30.062 v 19.024 l 10.327,5.301 z" />
80
+ </g>
81
+ <g
82
+ transform="matrix(0.35277777,0,0,-0.35277777,45.233402,21.01421)"
83
+ id="g1005">
84
+ <path
85
+ inkscape:connector-curvature="0"
86
+ id="path1007"
87
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
88
+ d="m 0,0 c 0,0 3.523,-2.039 3.523,-16.554 0,-10.312 -20.755,-37.179 -70.647,-37.179 -42.837,0 -68.458,13.377 -68.458,29.7 0,19.725 10.202,24.033 10.202,24.033 z" />
89
+ </g>
90
+ <g
91
+ transform="matrix(0.35277777,0,0,-0.35277777,54.701222,-44.619004)"
92
+ id="g1009">
93
+ <path
94
+ inkscape:connector-curvature="0"
95
+ id="path1011"
96
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
97
+ d="m 0,0 38.855,-37.736 v -129.459 l -40.3,-15.984 z" />
98
+ </g>
99
+ <g
100
+ transform="matrix(0.35277777,0,0,-0.35277777,27.077062,24.43347)"
101
+ id="g1013">
102
+ <path
103
+ inkscape:connector-curvature="0"
104
+ id="path1015"
105
+ style="fill:#d7292a;fill-opacity:1;fill-rule:nonzero;stroke:none"
106
+ d="m 0,0 -0.781,9.692 h 52.248 c 0,0 3.523,-2.039 3.523,-16.553 0,-2.9 -1.641,-7.112 -5.111,-11.665 z" />
107
+ </g>
108
+ <g
109
+ transform="matrix(0.35277777,0,0,-0.35277777,14.719852,25.9531)"
110
+ id="g1017">
111
+ <path
112
+ inkscape:connector-curvature="0"
113
+ id="path1019"
114
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none"
115
+ d="m 0,0 c 0,-4.442 8.672,-8.044 19.371,-8.044 10.699,0 19.372,3.602 19.372,8.044 0,4.444 -8.673,8.044 -19.372,8.044 C 8.672,8.044 0,4.444 0,0" />
116
+ </g>
117
+ <path
118
+ inkscape:connector-curvature="0"
119
+ id="path1021"
120
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
121
+ d="m 14.719822,22.13075 h 13.66767 v 3.82235 h -13.66767 z" />
122
+ <g
123
+ transform="matrix(0.35277777,0,0,-0.35277777,14.719852,22.13075)"
124
+ id="g1023">
125
+ <path
126
+ inkscape:connector-curvature="0"
127
+ id="path1025"
128
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none"
129
+ d="m 0,0 c 0,-4.443 8.672,-8.044 19.371,-8.044 10.699,0 19.372,3.601 19.372,8.044 0,4.442 -8.673,8.044 -19.372,8.044 C 8.672,8.044 0,4.442 0,0" />
130
+ </g>
131
+ <path
132
+ inkscape:connector-curvature="0"
133
+ id="path1027"
134
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
135
+ d="m 14.719822,19.56253 h 13.66767 v 2.56822 h -13.66767 z" />
136
+ <g
137
+ transform="matrix(0.35277777,0,0,-0.35277777,17.822852,-46.01357)"
138
+ id="g1029">
139
+ <path
140
+ inkscape:connector-curvature="0"
141
+ id="path1031"
142
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
143
+ d="M 0,0 H 93.569 C 102.547,0 109,-7.092 109,-16.069 v -157.8 C 109,-182.847 102.547,-190 93.569,-190 H 0 Z" />
144
+ </g>
145
+ <g
146
+ transform="matrix(0.35277777,0,0,-0.35277777,-12.514658,-46.01357)"
147
+ id="g1033">
148
+ <path
149
+ inkscape:connector-curvature="0"
150
+ id="path1035"
151
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
152
+ d="M 0,0 H 85.996 V -190 H 0 c -8.978,0 -17.004,7.153 -17.004,16.131 v 157.8 C -17.004,-7.092 -8.978,0 0,0" />
153
+ </g>
154
+ <g
155
+ transform="matrix(0.35277777,0,0,-0.35277777,12.178412,-51.562235)"
156
+ id="g1037">
157
+ <path
158
+ inkscape:connector-curvature="0"
159
+ id="path1039"
160
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
161
+ d="m 0,0 v -7.481 l -44.041,-5.504 -0.494,11.115 z" />
162
+ </g>
163
+ <g
164
+ transform="matrix(0.35277777,0,0,-0.35277777,21.678252,-50.782631)"
165
+ id="g1041">
166
+ <path
167
+ inkscape:connector-curvature="0"
168
+ id="path1043"
169
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
170
+ d="M 0,0 55.889,4.649 56.454,-9.068 0.51,-8.843 Z" />
171
+ </g>
172
+ <g
173
+ transform="matrix(0.35277777,0,0,-0.35277777,60.430082,-10.1112)"
174
+ id="g1045">
175
+ <path
176
+ inkscape:connector-curvature="0"
177
+ id="path1047"
178
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
179
+ d="m 0,0 c 0,-20.854 9.82,-37.761 21.936,-37.761 12.115,0 21.935,16.907 21.935,37.761 0,20.854 -9.82,37.76 -21.935,37.76 C 9.82,37.76 0,20.854 0,0" />
180
+ </g>
181
+ <g
182
+ transform="matrix(0.35277777,0,0,-0.35277777,68.012052,-21.92855)"
183
+ id="g1049">
184
+ <path
185
+ inkscape:connector-curvature="0"
186
+ id="path1051"
187
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
188
+ d="m 0,0 c 0.146,0 7.769,0.032 7.916,0.032 9.428,0 17.069,-15.014 17.069,-33.514 0,-18.5 -7.641,-33.506 -17.069,-33.506 -0.147,0 -7.77,-0.017 -7.916,-0.017 -9.43,0 -17.071,15.001 -17.071,33.503 C -17.071,-15.001 -9.43,0 0,0" />
189
+ </g>
190
+ <g
191
+ transform="matrix(0.35277777,0,0,-0.35277777,64.869082,-10.1112)"
192
+ id="g1053">
193
+ <path
194
+ inkscape:connector-curvature="0"
195
+ id="path1055"
196
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
197
+ d="m 0,0 c 0,-18.5 7.588,-33.499 16.947,-33.499 9.361,0 16.948,14.999 16.948,33.499 0,18.5 -7.587,33.498 -16.948,33.498 C 7.588,33.498 0,18.5 0,0" />
198
+ </g>
199
+ <g
200
+ transform="matrix(0.35277777,0,0,-0.35277777,70.747772,-10.41092)"
201
+ id="g1057">
202
+ <path
203
+ inkscape:connector-curvature="0"
204
+ id="path1059"
205
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
206
+ d="m 0,0 c 0,-4.602 2.285,-8.332 5.102,-8.332 2.816,0 5.101,3.73 5.101,8.332 0,4.603 -2.285,8.333 -5.101,8.333 C 2.285,8.333 0,4.603 0,0" />
207
+ </g>
208
+ <g
209
+ transform="matrix(0.35277777,0,0,-0.35277777,73.327462,-13.35062)"
210
+ id="g1061">
211
+ <path
212
+ inkscape:connector-curvature="0"
213
+ id="path1063"
214
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
215
+ d="m 0,0 h 14.793 c 1.503,0 2.721,-3.73 2.721,-8.333 0,-4.602 -1.218,-8.332 -2.721,-8.332 H 0 c -1.503,0 -2.721,3.73 -2.721,8.332 C -2.721,-3.73 -1.503,0 0,0" />
216
+ </g>
217
+ <g
218
+ transform="matrix(0.35277777,0,0,-0.35277777,29.464522,-28.6689)"
219
+ id="g1065">
220
+ <path
221
+ inkscape:connector-curvature="0"
222
+ id="path1067"
223
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
224
+ d="m 0,0 c 3,0.011 6.16,1.143 6.273,1.132 16.645,-1.478 27.931,-12.87 27.931,-27.38 0,-14.51 -12.386,-26.29 -27.334,-26.29 -0.114,0 -3.87,-0.003 -6.87,-0.003 z" />
225
+ </g>
226
+ <g
227
+ transform="matrix(0.35277777,0,0,-0.35277777,20.518992,-19.67927)"
228
+ id="g1069">
229
+ <path
230
+ inkscape:connector-curvature="0"
231
+ id="path1071"
232
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
233
+ d="m 0,0 c 0,-14.948 12.117,-27.066 27.065,-27.066 14.949,0 27.067,12.118 27.067,27.066 0,14.947 -12.118,27.065 -27.067,27.065 C 12.117,27.065 0,14.947 0,0" />
234
+ </g>
235
+ <g
236
+ transform="matrix(0.35277777,0,0,-0.35277777,22.977392,-19.85908)"
237
+ id="g1073">
238
+ <path
239
+ inkscape:connector-curvature="0"
240
+ id="path1075"
241
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
242
+ d="m 0,0 c 0,-10.816 8.77,-19.587 19.587,-19.587 10.816,0 19.585,8.771 19.585,19.587 0,10.816 -8.769,19.587 -19.585,19.587 C 8.77,19.587 0,10.816 0,0" />
243
+ </g>
244
+ <g
245
+ transform="matrix(0.35277777,0,0,-0.35277777,26.313652,-19.79915)"
246
+ id="g1077">
247
+ <path
248
+ inkscape:connector-curvature="0"
249
+ id="path1079"
250
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
251
+ d="m 0,0 c 0,-5.688 4.611,-10.299 10.3,-10.299 5.686,0 10.298,4.611 10.298,10.299 0,5.688 -4.612,10.298 -10.298,10.298 C 4.611,10.298 0,5.688 0,0" />
252
+ </g>
253
+ <g
254
+ transform="matrix(0.35277777,0,0,-0.35277777,26.192362,4.34062)"
255
+ id="g1081">
256
+ <path
257
+ inkscape:connector-curvature="0"
258
+ id="path1083"
259
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
260
+ d="M 0,0 C -0.095,-6.427 5.036,-11.713 11.462,-11.808 17.889,-11.903 23.174,-6.771 23.27,-0.344 23.365,6.08 18.232,11.366 11.807,11.461 5.381,11.557 0.096,6.426 0,0" />
261
+ </g>
262
+ <g
263
+ transform="matrix(0.35277777,0,0,-0.35277777,0.9835719,3.96753)"
264
+ id="g1085">
265
+ <path
266
+ inkscape:connector-curvature="0"
267
+ id="path1087"
268
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
269
+ d="M 0,0 C -0.096,-6.426 5.035,-11.713 11.462,-11.808 17.889,-11.903 23.174,-6.771 23.27,-0.345 23.365,6.081 18.233,11.367 11.808,11.462 5.38,11.556 0.096,6.426 0,0" />
270
+ </g>
271
+ <g
272
+ transform="matrix(0.35277777,0,0,-0.35277777,2.4887319,7.20179)"
273
+ id="g1089">
274
+ <path
275
+ inkscape:connector-curvature="0"
276
+ id="path1091"
277
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
278
+ d="m 0,0 c 0,0 15.184,-16.789 44.56,-17.224 25.579,-0.379 42.743,17.209 42.743,17.209 L 70.541,16.109 c 0,0 -12.923,-10.922 -26.808,-10.641 -18.97,0.382 -27.667,11.35 -27.667,11.35 z" />
279
+ </g>
280
+ <g
281
+ transform="matrix(0.35277777,0,0,-0.35277777,25.803432,2.9867)"
282
+ id="g1093">
283
+ <path
284
+ inkscape:connector-curvature="0"
285
+ id="path1095"
286
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
287
+ d="m 0,0 c 0,-6.514 5.279,-11.794 11.792,-11.794 6.514,0 11.793,5.28 11.793,11.794 0,6.512 -5.279,11.791 -11.793,11.791 C 5.279,11.791 0,6.512 0,0" />
288
+ </g>
289
+ <g
290
+ transform="matrix(0.35277777,0,0,-0.35277777,0.2535719,2.9867)"
291
+ id="g1097">
292
+ <path
293
+ inkscape:connector-curvature="0"
294
+ id="path1099"
295
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
296
+ d="m 0,0 c 0,-6.514 5.279,-11.794 11.791,-11.794 6.514,0 11.793,5.28 11.793,11.794 0,6.512 -5.279,11.791 -11.793,11.791 C 5.279,11.791 0,6.512 0,0" />
297
+ </g>
298
+ <g
299
+ transform="matrix(0.35277777,0,0,-0.35277777,1.8265719,6.24199)"
300
+ id="g1101">
301
+ <path
302
+ inkscape:connector-curvature="0"
303
+ id="path1103"
304
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
305
+ d="m 0,0 c 0,0 15.639,-16.784 45.412,-16.784 25.925,0 43.055,18.081 43.055,18.081 L 71.241,17.382 c 0,0 -12.932,-11.261 -27.007,-11.186 C 25.006,6.3 16.028,17.283 16.028,17.283 Z" />
306
+ </g>
307
+ <path
308
+ inkscape:connector-curvature="0"
309
+ id="path1105"
310
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
311
+ d="m 15.722772,9.51259 h 2.00624 V 6.94578 h -2.00624 z" />
312
+ <g
313
+ transform="matrix(0.35277777,0,0,-0.35277777,19.211212,9.38185)"
314
+ id="g1107">
315
+ <path
316
+ inkscape:connector-curvature="0"
317
+ id="path1109"
318
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
319
+ d="M 0,0 5.545,1.259 3.936,8.355 -1.612,7.097 Z" />
320
+ </g>
321
+ <g
322
+ transform="matrix(0.35277777,0,0,-0.35277777,22.456162,8.56778)"
323
+ id="g1111">
324
+ <path
325
+ inkscape:connector-curvature="0"
326
+ id="path1113"
327
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
328
+ d="M 0,0 5.298,2.069 2.65,8.846 -2.646,6.778 Z" />
329
+ </g>
330
+ <g
331
+ transform="matrix(0.35277777,0,0,-0.35277777,25.490622,7.34615)"
332
+ id="g1115">
333
+ <path
334
+ inkscape:connector-curvature="0"
335
+ id="path1117"
336
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
337
+ d="M 0,0 5.069,2.576 1.773,9.063 -3.296,6.487 Z" />
338
+ </g>
339
+ <g
340
+ transform="matrix(0.35277777,0,0,-0.35277777,28.467182,5.74694)"
341
+ id="g1119">
342
+ <path
343
+ inkscape:connector-curvature="0"
344
+ id="path1121"
345
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
346
+ d="M 0,0 4.602,3.341 0.328,9.227 -4.273,5.886 Z" />
347
+ </g>
348
+ <path
349
+ inkscape:connector-curvature="0"
350
+ id="path1123"
351
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277778"
352
+ d="m 17.728662,9.51259 h -2.00625 V 6.94578 h 2.00625 z" />
353
+ <g
354
+ transform="matrix(0.35277777,0,0,-0.35277777,14.240642,9.38185)"
355
+ id="g1125">
356
+ <path
357
+ inkscape:connector-curvature="0"
358
+ id="path1127"
359
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
360
+ d="M 0,0 -5.545,1.259 -3.936,8.355 1.61,7.097 Z" />
361
+ </g>
362
+ <g
363
+ transform="matrix(0.35277777,0,0,-0.35277777,10.995012,8.56778)"
364
+ id="g1129">
365
+ <path
366
+ inkscape:connector-curvature="0"
367
+ id="path1131"
368
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
369
+ d="M 0,0 -5.297,2.069 -2.649,8.846 2.648,6.778 Z" />
370
+ </g>
371
+ <g
372
+ transform="matrix(0.35277777,0,0,-0.35277777,7.9609119,7.34615)"
373
+ id="g1133">
374
+ <path
375
+ inkscape:connector-curvature="0"
376
+ id="path1135"
377
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
378
+ d="M 0,0 -5.069,2.576 -1.775,9.063 3.296,6.487 Z" />
379
+ </g>
380
+ <g
381
+ transform="matrix(0.35277777,0,0,-0.35277777,4.9840019,5.74694)"
382
+ id="g1137">
383
+ <path
384
+ inkscape:connector-curvature="0"
385
+ id="path1139"
386
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
387
+ d="M 0,0 -4.602,3.341 -0.327,9.227 4.274,5.886 Z" />
388
+ </g>
389
+ <g
390
+ transform="matrix(0.35277777,0,0,-0.35277777,-6.9722081,-44.023691)"
391
+ id="g1141">
392
+ <path
393
+ inkscape:connector-curvature="0"
394
+ id="path1143"
395
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
396
+ d="m 0,0 v -4.307 c 0,0 -9.411,1.02 -15.418,-4.987 -6.008,-6.009 -5.441,-14.512 -5.441,-14.512 h -4.081 c 0,0 -1.816,13.152 5.214,19.273 C -12.697,1.589 0,0 0,0" />
397
+ </g>
398
+ <g
399
+ transform="matrix(0.35277777,0,0,-0.35277777,-10.267078,-18.98197)"
400
+ id="g1145">
401
+ <path
402
+ inkscape:connector-curvature="0"
403
+ id="path1147"
404
+ style="fill:#ee2824;fill-opacity:1;fill-rule:nonzero;stroke:none"
405
+ d="m 0,0 c 0,0 8.375,10.125 21.125,10.125 12.75,0 19.125,-12.875 19.125,-12.875 l 5.375,2 c 0,0 -5.25,19.5 -24.75,19.5 C 1.375,18.75 -6.25,2.125 -6.25,2.125 Z" />
406
+ </g>
407
+ <g
408
+ transform="matrix(0.35277777,0,0,-0.35277777,-11.991348,-20.57413)"
409
+ id="g1149">
410
+ <path
411
+ inkscape:connector-curvature="0"
412
+ id="path1151"
413
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
414
+ d="M 0,0 C 0.002,0.001 11.373,9.681 26.263,9.362 39.589,9.076 46.138,3.528 46.183,3.49 42.526,8.674 36.179,14.237 25.763,14.237 10.909,14.237 2.952,4.597 0,0" />
415
+ </g>
416
+ </g>
417
+ </g>
418
+ </svg>
img/sp.png DELETED
Binary file
img/spai-logo.svg ADDED
@@ -0,0 +1,802 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="svg3767"
14
+ xml:space="preserve"
15
+ width="128"
16
+ height="128"
17
+ viewBox="0 0 128 128"
18
+ sodipodi:docname="SPAI_logo.svg"
19
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
20
+ inkscape:export-filename="/home/eros/Desktop/SPAI_logo.svg.png"
21
+ inkscape:export-xdpi="96"
22
+ inkscape:export-ydpi="96"><metadata
23
+ id="metadata3773"><rdf:RDF><cc:Work
24
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
25
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
26
+ id="defs3771"><clipPath
27
+ clipPathUnits="userSpaceOnUse"
28
+ id="clipPath3797"><path
29
+ d="M 0,972 H 1400 V 0 H 0 Z"
30
+ id="path3795"
31
+ inkscape:connector-curvature="0" /></clipPath><clipPath
32
+ clipPathUnits="userSpaceOnUse"
33
+ id="clipPath3973"><path
34
+ d="M 0,972 H 1400 V 0 H 0 Z"
35
+ id="path3971"
36
+ inkscape:connector-curvature="0" /></clipPath><clipPath
37
+ clipPathUnits="userSpaceOnUse"
38
+ id="clipPath4159"><path
39
+ d="M 0,972 H 1400 V 0 H 0 Z"
40
+ id="path4157"
41
+ inkscape:connector-curvature="0" /></clipPath><clipPath
42
+ clipPathUnits="userSpaceOnUse"
43
+ id="clipPath4193"><path
44
+ d="M 0,972 H 1400 V 0 H 0 Z"
45
+ id="path4191"
46
+ inkscape:connector-curvature="0" /></clipPath><clipPath
47
+ clipPathUnits="userSpaceOnUse"
48
+ id="clipPath4618"><g
49
+ inkscape:label="Clip"
50
+ id="use4620"><g
51
+ transform="translate(551.1328,622.08282)"
52
+ id="g4790"><path
53
+ inkscape:connector-curvature="0"
54
+ id="path4788"
55
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
56
+ d="m 0,0 c 0,0 -4.484,-4.226 -4.484,-14.851 0,-10.625 16.769,-30.625 56.384,-30.625 39.616,0 53.116,13.875 53.116,25.25 0,11.375 -2.791,12.708 -2.791,12.708 z" /></g><g
57
+ transform="translate(555.1855,622.41972)"
58
+ id="g4794"><path
59
+ inkscape:connector-curvature="0"
60
+ id="path4792"
61
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
62
+ d="m 0,0 -4.086,-0.337 c 0,0 -1.242,-11.309 -1.242,-14.687 0,-7.673 15.443,-27.664 52.564,-27.664 31.873,0 50.936,9.953 50.936,22.099 v 13.985 l -7.592,3.897 z" /></g><g
63
+ transform="translate(553.6894,632.23222)"
64
+ id="g4798"><path
65
+ inkscape:connector-curvature="0"
66
+ id="path4796"
67
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
68
+ d="m 0,0 c 0,0 -2.59,-1.499 -2.59,-12.169 0,-7.581 15.258,-27.331 51.934,-27.331 31.49,0 50.324,9.833 50.324,21.833 0,14.5 -7.5,17.667 -7.5,17.667 z" /></g><g
69
+ transform="translate(533.9609,769.13842)"
70
+ id="g4802"><path
71
+ inkscape:connector-curvature="0"
72
+ id="path4800"
73
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
74
+ d="m 0,0 -28.562,-27.74 v -95.166 l 29.624,-11.75 z" /></g><g
75
+ transform="translate(591.5234,625.10722)"
76
+ id="g4806"><path
77
+ inkscape:connector-curvature="0"
78
+ id="path4804"
79
+ style="fill:#d7292a;fill-opacity:1;fill-rule:nonzero;stroke:none"
80
+ d="m 0,0 0.574,7.125 h -38.408 c 0,0 -2.59,-1.499 -2.59,-12.169 0,-2.132 1.207,-5.227 3.758,-8.575 z" /></g><g
81
+ transform="translate(617.2734,622.08282)"
82
+ id="g4810"><path
83
+ inkscape:connector-curvature="0"
84
+ id="path4808"
85
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none"
86
+ d="m 0,0 c 0,-3.266 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.647 -14.24,5.913 0,3.267 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.267 0,0" /></g><path
87
+ inkscape:connector-curvature="0"
88
+ id="path4812"
89
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none"
90
+ d="m 617.2729,630.04723 h -28.48 v -7.96501 h 28.48 z" /><g
91
+ transform="translate(617.2734,630.04762)"
92
+ id="g4816"><path
93
+ inkscape:connector-curvature="0"
94
+ id="path4814"
95
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none"
96
+ d="m 0,0 c 0,-3.267 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.646 -14.24,5.913 0,3.266 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.266 0,0" /></g><path
97
+ inkscape:connector-curvature="0"
98
+ id="path4818"
99
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none"
100
+ d="m 617.2729,635.39922 h -28.48 v -4.917 h 28.48 z" /><g
101
+ transform="translate(609.7109,772.23222)"
102
+ id="g4822"><path
103
+ inkscape:connector-curvature="0"
104
+ id="path4820"
105
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
106
+ d="M 0,0 H -67.688 C -74.287,0 -80,-5.4 -80,-12 v -116 c 0,-6.6 5.713,-12 12.312,-12 H 0 Z" /></g><g
107
+ transform="translate(674.0234,772.23222)"
108
+ id="g4826"><path
109
+ inkscape:connector-curvature="0"
110
+ id="path4824"
111
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
112
+ d="M 0,0 H -64.313 V -140 H 0 c 6.6,0 11.688,5.4 11.688,12 V -12 C 11.688,-5.4 6.6,0 0,0" /></g><g
113
+ transform="translate(621.7109,783.60722)"
114
+ id="g4830"><path
115
+ inkscape:connector-curvature="0"
116
+ id="path4828"
117
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
118
+ d="m 0,0 v -5.5 l 32.805,-4.046 0.148,8.171 z" /></g><g
119
+ transform="translate(602.7734,781.98222)"
120
+ id="g4834"><path
121
+ inkscape:connector-curvature="0"
122
+ id="path4832"
123
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
124
+ d="M 0,0 -41.084,3.418 -41.5,-6.666 -0.375,-6.5 Z" /></g><g
125
+ transform="translate(522.0234,697.23222)"
126
+ id="g4838"><path
127
+ inkscape:connector-curvature="0"
128
+ id="path4836"
129
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
130
+ d="m 0,0 c 0,-15.33 -7.219,-27.758 -16.125,-27.758 -8.906,0 -16.125,12.428 -16.125,27.758 0,15.33 7.219,27.758 16.125,27.758 C -7.219,27.758 0,15.33 0,0" /></g><g
131
+ transform="translate(506.2246,721.85722)"
132
+ id="g4842"><path
133
+ inkscape:connector-curvature="0"
134
+ id="path4840"
135
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
136
+ d="m 0,0 c -0.107,0 -5.711,0.023 -5.818,0.023 -6.932,0 -12.549,-11.037 -12.549,-24.636 0,-13.6 5.617,-24.631 12.549,-24.631 0.107,0 5.711,-0.012 5.818,-0.012 6.932,0 12.549,11.027 12.549,24.628 C 12.549,-11.027 6.932,0 0,0" /></g><g
137
+ transform="translate(512.7734,697.23222)"
138
+ id="g4846"><path
139
+ inkscape:connector-curvature="0"
140
+ id="path4844"
141
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
142
+ d="m 0,0 c 0,-13.6 -5.578,-24.625 -12.457,-24.625 -6.881,0 -12.459,11.025 -12.459,24.625 0,13.6 5.578,24.625 12.459,24.625 C -5.578,24.625 0,13.6 0,0" /></g><g
143
+ transform="translate(500.5234,697.85722)"
144
+ id="g4850"><path
145
+ inkscape:connector-curvature="0"
146
+ id="path4848"
147
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
148
+ d="m 0,0 c 0,-3.383 -1.68,-6.125 -3.75,-6.125 -2.07,0 -3.75,2.742 -3.75,6.125 0,3.383 1.68,6.125 3.75,6.125 C -1.68,6.125 0,3.383 0,0" /></g><g
149
+ transform="translate(495.1484,703.98222)"
150
+ id="g4854"><path
151
+ inkscape:connector-curvature="0"
152
+ id="path4852"
153
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
154
+ d="m 0,0 h -10.875 c -1.104,0 -2,-2.742 -2,-6.125 0,-3.383 0.896,-6.125 2,-6.125 H 0 c 1.105,0 2,2.742 2,6.125 C 2,-2.742 1.105,0 0,0" /></g><g
155
+ transform="translate(640.7109,735.90212)"
156
+ id="g4858"><path
157
+ inkscape:connector-curvature="0"
158
+ id="path4856"
159
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
160
+ d="m 0,0 c -1,0.008 -4.109,0.84 -4.193,0.832 -12.235,-1.086 -20.323,-9.461 -20.323,-20.127 0,-10.666 8.791,-19.326 19.78,-19.326 0.084,0 3.736,-0.002 4.736,-0.002 z" /></g><g
161
+ transform="translate(660.1894,717.16972)"
162
+ id="g4862"><path
163
+ inkscape:connector-curvature="0"
164
+ id="path4860"
165
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
166
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0" /></g><g
167
+ transform="translate(655.0664,717.54472)"
168
+ id="g4866"><path
169
+ inkscape:connector-curvature="0"
170
+ id="path4864"
171
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
172
+ d="m 0,0 c 0,-7.951 -6.445,-14.398 -14.398,-14.398 -7.952,0 -14.397,6.447 -14.397,14.398 0,7.951 6.445,14.398 14.397,14.398 C -6.445,14.398 0,7.951 0,0" /></g><g
173
+ transform="translate(648.1152,717.41972)"
174
+ id="g4870"><path
175
+ inkscape:connector-curvature="0"
176
+ id="path4868"
177
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
178
+ d="m 0,0 c 0,-4.182 -3.391,-7.57 -7.572,-7.57 -4.18,0 -7.571,3.388 -7.571,7.57 0,4.182 3.391,7.57 7.571,7.57 C -3.391,7.57 0,4.182 0,0" /></g><g
179
+ transform="translate(585.7109,735.90212)"
180
+ id="g4874"><path
181
+ inkscape:connector-curvature="0"
182
+ id="path4872"
183
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
184
+ d="m 0,0 c -1,0.008 -4.109,0.84 -4.193,0.832 -12.235,-1.086 -20.323,-9.461 -20.323,-20.127 0,-10.666 8.791,-19.326 19.78,-19.326 0.084,0 3.736,-0.002 4.736,-0.002 z" /></g><g
185
+ transform="translate(605.1894,717.16972)"
186
+ id="g4878"><path
187
+ inkscape:connector-curvature="0"
188
+ id="path4876"
189
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
190
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0" /></g><g
191
+ transform="translate(600.0664,717.54472)"
192
+ id="g4882"><path
193
+ inkscape:connector-curvature="0"
194
+ id="path4880"
195
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
196
+ d="m 0,0 c 0,-7.951 -6.445,-14.398 -14.398,-14.398 -7.952,0 -14.397,6.447 -14.397,14.398 0,7.951 6.445,14.398 14.397,14.398 C -6.445,14.398 0,7.951 0,0" /></g><g
197
+ transform="translate(593.1152,717.41972)"
198
+ id="g4886"><path
199
+ inkscape:connector-curvature="0"
200
+ id="path4884"
201
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
202
+ d="m 0,0 c 0,-4.182 -3.391,-7.57 -7.572,-7.57 -4.18,0 -7.571,3.388 -7.571,7.57 0,4.182 3.391,7.57 7.571,7.57 C -3.391,7.57 0,4.182 0,0" /></g><g
203
+ transform="translate(593.3671,667.11793)"
204
+ id="g4890"><path
205
+ inkscape:connector-curvature="0"
206
+ id="path4888"
207
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
208
+ d="m 0,0 c 0.07,-4.725 -3.701,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.071,4.723 3.703,8.608 8.425,8.678 C -3.955,8.495 -0.07,4.724 0,0" /></g><g
209
+ transform="translate(645.8964,667.89532)"
210
+ id="g4894"><path
211
+ inkscape:connector-curvature="0"
212
+ id="path4892"
213
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
214
+ d="m 0,0 c 0.07,-4.724 -3.701,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.071,4.724 3.703,8.609 8.425,8.679 C -3.955,8.495 -0.07,4.724 0,0" /></g><g
215
+ transform="translate(642.7597,661.15602)"
216
+ id="g4898"><path
217
+ inkscape:connector-curvature="0"
218
+ id="path4896"
219
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
220
+ d="m 0,0 c 0,0 -11.16,-12.342 -32.756,-12.661 -18.803,-0.278 -31.42,12.65 -31.42,12.65 l 12.321,11.853 c 0,0 9.5,-8.029 19.707,-7.822 13.945,0.28 20.337,8.343 20.337,8.343 z" /></g><g
221
+ transform="translate(594.1777,669.93922)"
222
+ id="g4902"><path
223
+ inkscape:connector-curvature="0"
224
+ id="path4900"
225
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
226
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.789,0 -8.67,3.882 -8.67,8.67 0,4.787 3.881,8.668 8.67,8.668 C -3.881,8.668 0,4.787 0,0" /></g><g
227
+ transform="translate(647.4179,669.93922)"
228
+ id="g4906"><path
229
+ inkscape:connector-curvature="0"
230
+ id="path4904"
231
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
232
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.787,0 -8.668,3.882 -8.668,8.67 0,4.787 3.881,8.668 8.668,8.668 C -3.881,8.668 0,4.787 0,0" /></g><g
233
+ transform="translate(644.1406,663.15602)"
234
+ id="g4910"><path
235
+ inkscape:connector-curvature="0"
236
+ id="path4908"
237
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
238
+ d="m 0,0 c 0,0 -11.496,-12.338 -33.383,-12.338 -19.058,0 -31.65,13.291 -31.65,13.291 l 12.662,11.824 c 0,0 9.508,-8.277 19.853,-8.222 14.135,0.076 20.735,8.15 20.735,8.15 z" /></g><path
239
+ inkscape:connector-curvature="0"
240
+ id="path4912"
241
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
242
+ d="m 615.1839,656.34022 h -4.18 v 5.349 h 4.18 z" /><g
243
+ transform="translate(607.914,656.61312)"
244
+ id="g4916"><path
245
+ inkscape:connector-curvature="0"
246
+ id="path4914"
247
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
248
+ d="M 0,0 -4.076,0.926 -2.893,6.143 1.186,5.217 Z" /></g><g
249
+ transform="translate(601.1523,658.30932)"
250
+ id="g4920"><path
251
+ inkscape:connector-curvature="0"
252
+ id="path4918"
253
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
254
+ d="m 0,0 -3.895,1.521 1.948,4.982 3.892,-1.52 z" /></g><g
255
+ transform="translate(594.83,660.85523)"
256
+ id="g4924"><path
257
+ inkscape:connector-curvature="0"
258
+ id="path4922"
259
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
260
+ d="M 0,0 -3.727,1.894 -1.305,6.662 2.422,4.769 Z" /></g><g
261
+ transform="translate(588.6269,664.18732)"
262
+ id="g4928"><path
263
+ inkscape:connector-curvature="0"
264
+ id="path4926"
265
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
266
+ d="M 0,0 -3.383,2.456 -0.24,6.783 3.143,4.327 Z" /></g><path
267
+ inkscape:connector-curvature="0"
268
+ id="path4930"
269
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
270
+ d="m 611.0039,656.34022 h 4.18 v 5.349 h -4.18 z" /><g
271
+ transform="translate(618.2714,656.61312)"
272
+ id="g4934"><path
273
+ inkscape:connector-curvature="0"
274
+ id="path4932"
275
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
276
+ d="M 0,0 4.076,0.926 2.895,6.143 -1.184,5.217 Z" /></g><g
277
+ transform="translate(625.0351,658.30932)"
278
+ id="g4938"><path
279
+ inkscape:connector-curvature="0"
280
+ id="path4936"
281
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
282
+ d="M 0,0 3.895,1.521 1.947,6.503 -1.947,4.983 Z" /></g><g
283
+ transform="translate(631.3574,660.85523)"
284
+ id="g4942"><path
285
+ inkscape:connector-curvature="0"
286
+ id="path4940"
287
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
288
+ d="M 0,0 3.727,1.894 1.305,6.662 -2.422,4.769 Z" /></g><g
289
+ transform="translate(637.5605,664.18732)"
290
+ id="g4946"><path
291
+ inkscape:connector-curvature="0"
292
+ id="path4944"
293
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
294
+ d="M 0,0 3.383,2.456 0.24,6.783 -3.143,4.327 Z" /></g><g
295
+ transform="translate(662.4746,767.89823)"
296
+ id="g4950"><path
297
+ inkscape:connector-curvature="0"
298
+ id="path4948"
299
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
300
+ d="m 0,0 v -3.166 c 0,0 6.918,0.75 11.334,-3.666 4.416,-4.417 4,-10.668 4,-10.668 h 3 c 0,0 1.334,9.668 -3.834,14.168 C 9.334,1.168 0,0 0,0" /></g></g></clipPath><marker
301
+ style="overflow:visible"
302
+ id="Scissors"
303
+ orient="auto"
304
+ refY="0"
305
+ refX="0"><path
306
+ style="marker-start:none"
307
+ id="schere"
308
+ d="M 9.0898857,-3.6061018 C 8.1198849,-4.7769976 6.3697607,-4.7358294 5.0623558,-4.2327734 l -8.2124046,3.0779029 c -2.3882933,-1.3067135 -4.7482873,-0.9325372 -4.7482873,-1.5687873 0,-0.4973164 0.4566662,-0.3883222 0.3883068,-1.6831941 -0.065635,-1.2432767 -1.3635771,-2.1630796 -2.5903987,-2.0816435 -1.227271,-0.00735 -2.499439,0.9331613 -2.510341,2.2300611 -0.09143,1.3063864 1.007209,2.5196896 2.306764,2.6052316 1.5223406,0.2266616 4.218258,-0.6955566 5.482945,1.57086006 -0.9422847,1.73825774 -2.6140244,1.74307674 -4.1255107,1.65607034 -1.2548743,-0.072235 -2.7620933,0.2873979 -3.3606483,1.5208605 -0.578367,1.1820862 -0.0112,2.8646022 1.316749,3.226412 1.3401912,0.4918277 3.1806689,-0.129711 3.4993722,-1.6707242 0.2456585,-1.187823 -0.5953659,-1.7459574 -0.2725074,-2.1771537 0.2436135,-0.32536 1.7907806,-0.1368452 4.5471053,-1.3748244 L 5.6763468,4.2330688 C 6.8000164,4.5467672 8.1730685,4.5362646 9.1684433,3.4313614 l -9.22008423,-3.48508362 z m -18.3078016,-1.900504 c 1.294559,0.7227998 1.1888392,2.6835702 -0.1564272,3.0632889 -1.2165179,0.423661 -2.7710269,-0.7589694 -2.3831779,-2.0774648 0.227148,-1.0818519 1.653387,-1.480632 2.5396051,-0.9858241 z m 0.056264,8.0173649 c 1.3508301,0.4988648 1.1214429,2.7844356 -0.2522207,3.091609 -0.9110594,0.3163391 -2.2135494,-0.1387976 -2.3056964,-1.2121394 -0.177609,-1.305055 1.356085,-2.4841482 2.5579171,-1.8794696 z"
309
+ inkscape:connector-curvature="0" /></marker></defs><sodipodi:namedview
310
+ pagecolor="#ffffff"
311
+ bordercolor="#666666"
312
+ borderopacity="1"
313
+ objecttolerance="10"
314
+ gridtolerance="10"
315
+ guidetolerance="10"
316
+ inkscape:pageopacity="0"
317
+ inkscape:pageshadow="2"
318
+ inkscape:window-width="1853"
319
+ inkscape:window-height="1025"
320
+ id="namedview3769"
321
+ showgrid="false"
322
+ inkscape:zoom="3.6042856"
323
+ inkscape:cx="75.458418"
324
+ inkscape:cy="48.883031"
325
+ inkscape:window-x="67"
326
+ inkscape:window-y="27"
327
+ inkscape:window-maximized="1"
328
+ inkscape:current-layer="g3775" /><g
329
+ id="g3775"
330
+ inkscape:groupmode="layer"
331
+ inkscape:label="SP_landing_page_BF"
332
+ transform="matrix(1.3333333,0,0,-1.3333333,0,128)"><g
333
+ transform="matrix(0.3749127,0,0,0.3749127,-57.012955,-199.31617)"
334
+ id="g7806-3"><g
335
+ id="g3799-7-67"
336
+ transform="translate(220.92934,624.37578)"><path
337
+ d="m 0,0 c 0,0 -4.484,-4.226 -4.484,-14.851 0,-10.625 16.769,-30.625 56.384,-30.625 39.616,0 53.116,13.875 53.116,25.25 0,11.375 -2.791,12.708 -2.791,12.708 z"
338
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
339
+ id="path3801-6-5"
340
+ inkscape:connector-curvature="0" /></g><g
341
+ id="g3803-1-3"
342
+ transform="translate(224.98204,624.71268)"><path
343
+ d="m 0,0 -4.086,-0.337 c 0,0 -1.242,-11.309 -1.242,-14.687 0,-7.673 15.443,-27.664 52.564,-27.664 31.873,0 50.936,9.953 50.936,22.099 v 13.985 l -7.592,3.897 z"
344
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
345
+ id="path3805-3-5"
346
+ inkscape:connector-curvature="0" /></g><g
347
+ id="g3807-2-6"
348
+ transform="translate(223.48594,634.52518)"><path
349
+ d="m 0,0 c 0,0 -2.59,-1.499 -2.59,-12.169 0,-7.581 15.258,-27.331 51.934,-27.331 31.49,0 50.324,9.833 50.324,21.833 0,14.5 -7.5,17.667 -7.5,17.667 z"
350
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
351
+ id="path3809-1-29"
352
+ inkscape:connector-curvature="0" /></g><g
353
+ id="g3815-59-1"
354
+ transform="translate(261.31996,627.40018)"><path
355
+ d="m 0,0 0.574,7.125 h -38.408 c 0,0 -2.59,-1.499 -2.59,-12.169 0,-2.132 1.207,-5.227 3.758,-8.575 z"
356
+ style="fill:#d7292a;fill-opacity:1;fill-rule:nonzero;stroke:none"
357
+ id="path3817-9-2"
358
+ inkscape:connector-curvature="0" /></g><g
359
+ id="g3811-0-6"
360
+ transform="translate(203.75745,771.43138)"><path
361
+ d="m 0,0 -28.562,-27.74 v -95.166 l 29.624,-11.75 z"
362
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
363
+ id="path3813-7-0"
364
+ inkscape:connector-curvature="0" /></g><g
365
+ id="g3819-5-6"
366
+ transform="translate(287.06995,624.37578)"><path
367
+ d="m 0,0 c 0,-3.266 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.647 -14.24,5.913 0,3.267 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.267 0,0"
368
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none"
369
+ id="path3821-8-2"
370
+ inkscape:connector-curvature="0" /></g><path
371
+ d="m 287.06945,632.34019 h -28.48 v -7.96501 h 28.48 z"
372
+ style="fill:#ebeadb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994"
373
+ id="path3823-0-1"
374
+ inkscape:connector-curvature="0" /><g
375
+ id="g3825-4-8"
376
+ transform="translate(287.06995,632.34058)"><path
377
+ d="m 0,0 c 0,-3.267 -6.375,-5.913 -14.24,-5.913 -7.865,0 -14.24,2.646 -14.24,5.913 0,3.266 6.375,5.913 14.24,5.913 C -6.375,5.913 0,3.266 0,0"
378
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none"
379
+ id="path3827-8-7"
380
+ inkscape:connector-curvature="0" /></g><path
381
+ d="m 287.06945,637.69218 h -28.48 v -4.917 h 28.48 z"
382
+ style="fill:#cbcdc5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994"
383
+ id="path3829-0-9"
384
+ inkscape:connector-curvature="0" /><g
385
+ id="g3831-4-2"
386
+ transform="translate(279.50746,774.52517)"><path
387
+ d="M 0,0 H -67.688 C -74.287,0 -80,-5.4 -80,-12 v -116 c 0,-6.6 5.713,-12 12.312,-12 H 0 Z"
388
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
389
+ id="path3833-2-0"
390
+ inkscape:connector-curvature="0" /></g><g
391
+ id="g3835-9-23"
392
+ transform="translate(343.81995,774.52517)"><path
393
+ d="M 0,0 H -64.313 V -140 H 0 c 6.6,0 11.688,5.4 11.688,12 V -12 C 11.688,-5.4 6.6,0 0,0"
394
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
395
+ id="path3837-61-7"
396
+ inkscape:connector-curvature="0" /></g><g
397
+ id="g3839-0-5"
398
+ transform="translate(291.50746,785.90018)"><path
399
+ d="m 0,0 v -5.5 l 32.805,-4.046 0.148,8.171 z"
400
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
401
+ id="path3841-4-9"
402
+ inkscape:connector-curvature="0" /></g><g
403
+ id="g3843-2-2"
404
+ transform="translate(272.56996,784.27517)"><path
405
+ d="M 0,0 -41.084,3.418 -41.5,-6.666 -0.375,-6.5 Z"
406
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
407
+ id="path3845-2-2"
408
+ inkscape:connector-curvature="0" /></g><g
409
+ id="g3847-2-89"
410
+ transform="translate(191.81995,699.52518)"><path
411
+ d="m 0,0 c 0,-15.33 -7.219,-27.758 -16.125,-27.758 -8.906,0 -16.125,12.428 -16.125,27.758 0,15.33 7.219,27.758 16.125,27.758 C -7.219,27.758 0,15.33 0,0"
412
+ style="fill:#1fbfca;fill-opacity:1;fill-rule:nonzero;stroke:none"
413
+ id="path3849-0-7"
414
+ inkscape:connector-curvature="0" /></g><g
415
+ id="g3851-55-3"
416
+ transform="translate(176.02115,724.15018)"><path
417
+ d="m 0,0 c -0.107,0 -5.711,0.023 -5.818,0.023 -6.932,0 -12.549,-11.037 -12.549,-24.636 0,-13.6 5.617,-24.631 12.549,-24.631 0.107,0 5.711,-0.012 5.818,-0.012 6.932,0 12.549,11.027 12.549,24.628 C 12.549,-11.027 6.932,0 0,0"
418
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
419
+ id="path3853-2-6"
420
+ inkscape:connector-curvature="0" /></g><g
421
+ id="g3855-9-1"
422
+ transform="translate(182.56995,699.52518)"><path
423
+ d="m 0,0 c 0,-13.6 -5.578,-24.625 -12.457,-24.625 -6.881,0 -12.459,11.025 -12.459,24.625 0,13.6 5.578,24.625 12.459,24.625 C -5.578,24.625 0,13.6 0,0"
424
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
425
+ id="path3857-0-29"
426
+ inkscape:connector-curvature="0" /></g><g
427
+ id="g3859-2-3"
428
+ transform="translate(170.31995,700.15018)"><path
429
+ d="m 0,0 c 0,-3.383 -1.68,-6.125 -3.75,-6.125 -2.07,0 -3.75,2.742 -3.75,6.125 0,3.383 1.68,6.125 3.75,6.125 C -1.68,6.125 0,3.383 0,0"
430
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
431
+ id="path3861-8-1"
432
+ inkscape:connector-curvature="0" /></g><g
433
+ id="g3863-3-9"
434
+ transform="translate(164.94495,706.27518)"><path
435
+ d="m 0,0 h -10.875 c -1.104,0 -2,-2.742 -2,-6.125 0,-3.383 0.896,-6.125 2,-6.125 H 0 c 1.105,0 2,2.742 2,6.125 C 2,-2.742 1.105,0 0,0"
436
+ style="fill:#92d5e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
437
+ id="path3865-8-4"
438
+ inkscape:connector-curvature="0" /></g><g
439
+ id="g3867-0-7"
440
+ transform="translate(310.50745,738.19508)"><path
441
+ d="m 0,0 c -1,0.008 -4.109,0.84 -4.193,0.832 -12.235,-1.086 -20.323,-9.461 -20.323,-20.127 0,-10.666 8.791,-19.326 19.78,-19.326 0.084,0 3.736,-0.002 4.736,-0.002 z"
442
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
443
+ id="path3869-4-8"
444
+ inkscape:connector-curvature="0" /></g><g
445
+ id="g3871-0-4"
446
+ transform="translate(329.98595,719.46268)"><path
447
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0"
448
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
449
+ id="path3873-9-5"
450
+ inkscape:connector-curvature="0" /></g><g
451
+ id="g3875-1-0"
452
+ transform="translate(324.86295,719.83768)"><path
453
+ d="m 0,0 c 0,-7.951 -6.445,-14.398 -14.398,-14.398 -7.952,0 -14.397,6.447 -14.397,14.398 0,7.951 6.445,14.398 14.397,14.398 C -6.445,14.398 0,7.951 0,0"
454
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
455
+ id="path3877-9-3"
456
+ inkscape:connector-curvature="0" /></g><g
457
+ id="g3879-6-6"
458
+ transform="translate(317.91175,719.71268)"><path
459
+ d="m 0,0 c 0,-4.182 -3.391,-7.57 -7.572,-7.57 -4.18,0 -7.571,3.388 -7.571,7.57 0,4.182 3.391,7.57 7.571,7.57 C -3.391,7.57 0,4.182 0,0"
460
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
461
+ id="path3881-2-1"
462
+ inkscape:connector-curvature="0" /></g><g
463
+ id="g3883-5-0"
464
+ transform="translate(255.50746,738.19508)"><path
465
+ d="m 0,0 c -1,0.008 -4.109,0.84 -4.193,0.832 -12.235,-1.086 -20.323,-9.461 -20.323,-20.127 0,-10.666 8.791,-19.326 19.78,-19.326 0.084,0 3.736,-0.002 4.736,-0.002 z"
466
+ style="fill:#c22828;fill-opacity:1;fill-rule:nonzero;stroke:none"
467
+ id="path3885-4-6"
468
+ inkscape:connector-curvature="0" /></g><g
469
+ id="g3887-4-3"
470
+ transform="translate(274.98595,719.46268)"><path
471
+ d="m 0,0 c 0,-10.988 -8.908,-19.896 -19.896,-19.896 -10.989,0 -19.897,8.908 -19.897,19.896 0,10.988 8.908,19.896 19.897,19.896 C -8.908,19.896 0,10.988 0,0"
472
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
473
+ id="path3889-9-2"
474
+ inkscape:connector-curvature="0" /></g><g
475
+ id="g3891-9-0"
476
+ transform="translate(269.86295,719.83768)"><path
477
+ d="m 0,0 c 0,-7.951 -6.445,-14.398 -14.398,-14.398 -7.952,0 -14.397,6.447 -14.397,14.398 0,7.951 6.445,14.398 14.397,14.398 C -6.445,14.398 0,7.951 0,0"
478
+ style="fill:#b4d9e8;fill-opacity:1;fill-rule:nonzero;stroke:none"
479
+ id="path3893-3-6"
480
+ inkscape:connector-curvature="0" /></g><g
481
+ id="g3895-6-15"
482
+ transform="translate(262.91176,719.71268)"><path
483
+ d="m 0,0 c 0,-4.182 -3.391,-7.57 -7.572,-7.57 -4.18,0 -7.571,3.388 -7.571,7.57 0,4.182 3.391,7.57 7.571,7.57 C -3.391,7.57 0,4.182 0,0"
484
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
485
+ id="path3897-0-5"
486
+ inkscape:connector-curvature="0" /></g><g
487
+ id="g3899-5-4"
488
+ transform="translate(263.16365,669.41089)"><path
489
+ d="m 0,0 c 0.07,-4.725 -3.701,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.071,4.723 3.703,8.608 8.425,8.678 C -3.955,8.495 -0.07,4.724 0,0"
490
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
491
+ id="path3901-0-7"
492
+ inkscape:connector-curvature="0" /></g><g
493
+ id="g3903-2-6"
494
+ transform="translate(315.69295,670.18828)"><path
495
+ d="m 0,0 c 0.07,-4.724 -3.701,-8.61 -8.426,-8.68 -4.724,-0.07 -8.609,3.702 -8.679,8.427 -0.071,4.724 3.703,8.609 8.425,8.679 C -3.955,8.495 -0.07,4.724 0,0"
496
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
497
+ id="path3905-9-5"
498
+ inkscape:connector-curvature="0" /></g><g
499
+ id="g3907-4-6"
500
+ transform="translate(312.55625,663.44898)"><path
501
+ d="m 0,0 c 0,0 -11.16,-12.342 -32.756,-12.661 -18.803,-0.278 -31.42,12.65 -31.42,12.65 l 12.321,11.853 c 0,0 9.5,-8.029 19.707,-7.822 13.945,0.28 20.337,8.343 20.337,8.343 z"
502
+ style="fill:#116c7e;fill-opacity:1;fill-rule:nonzero;stroke:none"
503
+ id="path3909-3-9"
504
+ inkscape:connector-curvature="0" /></g><g
505
+ id="g3911-5-3"
506
+ transform="translate(263.97425,672.23218)"><path
507
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.789,0 -8.67,3.882 -8.67,8.67 0,4.787 3.881,8.668 8.67,8.668 C -3.881,8.668 0,4.787 0,0"
508
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
509
+ id="path3913-1-7"
510
+ inkscape:connector-curvature="0" /></g><g
511
+ id="g3915-7-45"
512
+ transform="translate(317.21446,672.23218)"><path
513
+ d="m 0,0 c 0,-4.788 -3.881,-8.67 -8.668,-8.67 -4.787,0 -8.668,3.882 -8.668,8.67 0,4.787 3.881,8.668 8.668,8.668 C -3.881,8.668 0,4.787 0,0"
514
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
515
+ id="path3917-4-2"
516
+ inkscape:connector-curvature="0" /></g><g
517
+ id="g3919-3-5"
518
+ transform="translate(313.93715,665.44898)"><path
519
+ d="m 0,0 c 0,0 -11.496,-12.338 -33.383,-12.338 -19.058,0 -31.65,13.291 -31.65,13.291 l 12.662,11.824 c 0,0 9.508,-8.277 19.853,-8.222 14.135,0.076 20.735,8.15 20.735,8.15 z"
520
+ style="fill:#ed2d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
521
+ id="path3921-1-4"
522
+ inkscape:connector-curvature="0" /></g><path
523
+ d="m 284.98045,658.63318 h -4.18 v 5.349 h 4.18 z"
524
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994"
525
+ id="path3923-4-7"
526
+ inkscape:connector-curvature="0" /><g
527
+ id="g3925-6-4"
528
+ transform="translate(277.71055,658.90608)"><path
529
+ d="M 0,0 -4.076,0.926 -2.893,6.143 1.186,5.217 Z"
530
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
531
+ id="path3927-9-4"
532
+ inkscape:connector-curvature="0" /></g><g
533
+ id="g3929-4-3"
534
+ transform="translate(270.94885,660.60228)"><path
535
+ d="m 0,0 -3.895,1.521 1.948,4.982 3.892,-1.52 z"
536
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
537
+ id="path3931-2-0"
538
+ inkscape:connector-curvature="0" /></g><g
539
+ id="g3933-2-7"
540
+ transform="translate(264.62656,663.14819)"><path
541
+ d="M 0,0 -3.727,1.894 -1.305,6.662 2.422,4.769 Z"
542
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
543
+ id="path3935-6-8"
544
+ inkscape:connector-curvature="0" /></g><g
545
+ id="g3937-4-6"
546
+ transform="translate(258.42346,666.48028)"><path
547
+ d="M 0,0 -3.383,2.456 -0.24,6.783 3.143,4.327 Z"
548
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
549
+ id="path3939-1-8"
550
+ inkscape:connector-curvature="0" /></g><path
551
+ d="m 280.80045,658.63318 h 4.18 v 5.349 h -4.18 z"
552
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994"
553
+ id="path3941-2-8"
554
+ inkscape:connector-curvature="0" /><g
555
+ id="g3943-8-4"
556
+ transform="translate(288.06796,658.90608)"><path
557
+ d="M 0,0 4.076,0.926 2.895,6.143 -1.184,5.217 Z"
558
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
559
+ id="path3945-8-3"
560
+ inkscape:connector-curvature="0" /></g><g
561
+ id="g3947-92-1"
562
+ transform="translate(294.83165,660.60228)"><path
563
+ d="M 0,0 3.895,1.521 1.947,6.503 -1.947,4.983 Z"
564
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
565
+ id="path3949-8-4"
566
+ inkscape:connector-curvature="0" /></g><g
567
+ id="g3951-8-9"
568
+ transform="translate(301.15396,663.14819)"><path
569
+ d="M 0,0 3.727,1.894 1.305,6.662 -2.422,4.769 Z"
570
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
571
+ id="path3953-8-2"
572
+ inkscape:connector-curvature="0" /></g><g
573
+ id="g3955-6-0"
574
+ transform="translate(307.35706,666.48028)"><path
575
+ d="M 0,0 3.383,2.456 0.24,6.783 -3.143,4.327 Z"
576
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
577
+ id="path3957-8-6"
578
+ inkscape:connector-curvature="0" /></g><g
579
+ id="g3959-3-8"
580
+ transform="translate(332.27115,770.19119)"><path
581
+ d="m 0,0 v -3.166 c 0,0 6.918,0.75 11.334,-3.666 4.416,-4.417 4,-10.668 4,-10.668 h 3 c 0,0 1.334,9.668 -3.834,14.168 C 9.334,1.168 0,0 0,0"
582
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
583
+ id="path3961-8-9"
584
+ inkscape:connector-curvature="0" /></g></g><g
585
+ transform="matrix(0.19045745,0,0,-0.19045745,-58.039109,104.03018)"
586
+ id="layer1-3"><g
587
+ transform="matrix(4.4799,0,0,2.9866,-22.373,-404.56)"
588
+ id="g3953"
589
+ style="stroke:#000000"><rect
590
+ x="79.462997"
591
+ y="291.39001"
592
+ width="88.001999"
593
+ height="26.205999"
594
+ id="rect2953"
595
+ style="fill:#ffcc00;stroke-width:1.5" /><g
596
+ transform="matrix(1,0,0,0.76435,0.78697,68.514)"
597
+ id="g3915-9"><rect
598
+ x="81.922997"
599
+ y="291.14001"
600
+ width="1.8688999"
601
+ height="19.539"
602
+ id="rect3725"
603
+ style="stroke-width:0.26172" /><rect
604
+ x="92.504997"
605
+ y="291.10001"
606
+ width="1.9425"
607
+ height="9.7123003"
608
+ id="rect3727"
609
+ style="stroke-width:0.18811999" /><rect
610
+ x="87.195999"
611
+ y="291.10001"
612
+ width="1.9425"
613
+ height="9.7123003"
614
+ id="rect3729"
615
+ style="stroke-width:0.18811999" /><rect
616
+ x="97.814003"
617
+ y="291.10001"
618
+ width="1.9425"
619
+ height="9.7123003"
620
+ id="rect3731"
621
+ style="stroke-width:0.18811999" /><rect
622
+ x="103.12"
623
+ y="291.10001"
624
+ width="1.9425"
625
+ height="9.7123003"
626
+ id="rect3733"
627
+ style="stroke-width:0.18811999" /><rect
628
+ x="108.47"
629
+ y="291.14001"
630
+ width="1.8688999"
631
+ height="19.539"
632
+ id="rect3765"
633
+ style="stroke-width:0.26172" /><rect
634
+ x="119.05"
635
+ y="291.10001"
636
+ width="1.9425"
637
+ height="9.7123003"
638
+ id="rect3767"
639
+ style="stroke-width:0.18811999" /><rect
640
+ x="113.74"
641
+ y="291.10001"
642
+ width="1.9425"
643
+ height="9.7123003"
644
+ id="rect3769"
645
+ style="stroke-width:0.18811999" /><rect
646
+ x="124.36"
647
+ y="291.10001"
648
+ width="1.9425"
649
+ height="9.7123003"
650
+ id="rect3771"
651
+ style="stroke-width:0.18811999" /><rect
652
+ x="129.67"
653
+ y="291.10001"
654
+ width="1.9425"
655
+ height="9.7123003"
656
+ id="rect3773"
657
+ style="stroke-width:0.18811999" /><rect
658
+ x="135.00999"
659
+ y="291.14001"
660
+ width="1.8688999"
661
+ height="19.539"
662
+ id="rect3779"
663
+ style="stroke-width:0.26172" /><rect
664
+ x="145.60001"
665
+ y="291.10001"
666
+ width="1.9425"
667
+ height="9.7123003"
668
+ id="rect3781"
669
+ style="stroke-width:0.18811999" /><rect
670
+ x="140.28999"
671
+ y="291.10001"
672
+ width="1.9425"
673
+ height="9.7123003"
674
+ id="rect3783"
675
+ style="stroke-width:0.18811999" /><rect
676
+ x="150.91"
677
+ y="291.10001"
678
+ width="1.9425"
679
+ height="9.7123003"
680
+ id="rect3785"
681
+ style="stroke-width:0.18811999" /><rect
682
+ x="156.21001"
683
+ y="291.10001"
684
+ width="1.9425"
685
+ height="9.7123003"
686
+ id="rect3787"
687
+ style="stroke-width:0.18811999" /><rect
688
+ x="161.56"
689
+ y="291.14001"
690
+ width="1.8688999"
691
+ height="19.539"
692
+ id="rect3907"
693
+ style="stroke-width:0.26172" /></g></g></g><g
694
+ transform="matrix(0,0.19045745,0.19045745,0,-8.0301814,-48.206035)"
695
+ id="layer1-3-4"><g
696
+ transform="matrix(4.4799,0,0,2.9866,-22.373,-404.56)"
697
+ id="g3953-8"
698
+ style="stroke:#000000"><rect
699
+ x="79.462997"
700
+ y="291.39001"
701
+ width="88.001999"
702
+ height="26.205999"
703
+ id="rect2953-1"
704
+ style="fill:#ffcc00;stroke-width:1.5" /><g
705
+ transform="matrix(1,0,0,0.76435,0.78697,68.514)"
706
+ id="g3915-9-2"><rect
707
+ x="81.922997"
708
+ y="291.14001"
709
+ width="1.8688999"
710
+ height="19.539"
711
+ id="rect3725-9"
712
+ style="stroke-width:0.26172" /><rect
713
+ x="92.504997"
714
+ y="291.10001"
715
+ width="1.9425"
716
+ height="9.7123003"
717
+ id="rect3727-3"
718
+ style="stroke-width:0.18811999" /><rect
719
+ x="87.195999"
720
+ y="291.10001"
721
+ width="1.9425"
722
+ height="9.7123003"
723
+ id="rect3729-9"
724
+ style="stroke-width:0.18811999" /><rect
725
+ x="97.814003"
726
+ y="291.10001"
727
+ width="1.9425"
728
+ height="9.7123003"
729
+ id="rect3731-0"
730
+ style="stroke-width:0.18811999" /><rect
731
+ x="103.12"
732
+ y="291.10001"
733
+ width="1.9425"
734
+ height="9.7123003"
735
+ id="rect3733-8"
736
+ style="stroke-width:0.18811999" /><rect
737
+ x="108.47"
738
+ y="291.14001"
739
+ width="1.8688999"
740
+ height="19.539"
741
+ id="rect3765-8"
742
+ style="stroke-width:0.26172" /><rect
743
+ x="119.05"
744
+ y="291.10001"
745
+ width="1.9425"
746
+ height="9.7123003"
747
+ id="rect3767-5"
748
+ style="stroke-width:0.18811999" /><rect
749
+ x="113.74"
750
+ y="291.10001"
751
+ width="1.9425"
752
+ height="9.7123003"
753
+ id="rect3769-0"
754
+ style="stroke-width:0.18811999" /><rect
755
+ x="124.36"
756
+ y="291.10001"
757
+ width="1.9425"
758
+ height="9.7123003"
759
+ id="rect3771-9"
760
+ style="stroke-width:0.18811999" /><rect
761
+ x="129.67"
762
+ y="291.10001"
763
+ width="1.9425"
764
+ height="9.7123003"
765
+ id="rect3773-6"
766
+ style="stroke-width:0.18811999" /><rect
767
+ x="135.00999"
768
+ y="291.14001"
769
+ width="1.8688999"
770
+ height="19.539"
771
+ id="rect3779-3"
772
+ style="stroke-width:0.26172" /><rect
773
+ x="145.60001"
774
+ y="291.10001"
775
+ width="1.9425"
776
+ height="9.7123003"
777
+ id="rect3781-8"
778
+ style="stroke-width:0.18811999" /><rect
779
+ x="140.28999"
780
+ y="291.10001"
781
+ width="1.9425"
782
+ height="9.7123003"
783
+ id="rect3783-5"
784
+ style="stroke-width:0.18811999" /><rect
785
+ x="150.91"
786
+ y="291.10001"
787
+ width="1.9425"
788
+ height="9.7123003"
789
+ id="rect3785-6"
790
+ style="stroke-width:0.18811999" /><rect
791
+ x="156.21001"
792
+ y="291.10001"
793
+ width="1.9425"
794
+ height="9.7123003"
795
+ id="rect3787-1"
796
+ style="stroke-width:0.18811999" /><rect
797
+ x="161.56"
798
+ y="291.14001"
799
+ width="1.8688999"
800
+ height="19.539"
801
+ id="rect3907-1"
802
+ style="stroke-width:0.26172" /></g></g></g></g></svg>
js/emr_admin.js CHANGED
@@ -23,6 +23,7 @@
23
  $('input[name="timestamp_replace"]').on('change', $.proxy(this.checkCustomDate, this));
24
  $('input[name="replace_type"]').on('change', $.proxy(this.showReplaceOptions, this));
25
  $('input[name="userfile"]').on('change', $.proxy(this.handleImage, this));
 
26
 
27
  // DragDrop
28
  $('.wrap.emr_upload_form').on('dragover', $.proxy(this.dragOverArea, this));
@@ -176,7 +177,7 @@
176
  this.debug(target_type + ' not ' + source_type);
177
  var falsePositive = this.checkFalsePositiveType(source_type, target_type);
178
  if (! falsePositive)
179
- this.warningFileType();
180
  }
181
 
182
  if (! is_empty && emr_options.allowed_mime.indexOf(target_type) == -1)
@@ -229,6 +230,19 @@
229
 
230
  $(preview).find('.image_size').text(size);
231
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  this.checkSubmit = function()
233
  {
234
  var check = ($('input[name="userfile"]').val().length > 0) ? true : false;
@@ -271,8 +285,10 @@
271
  $('.form-error.filesize').find('.fn').text(fileItem.name);
272
  $('.form-error.filesize').fadeIn();
273
  }
274
- this.warningFileType = function(fileItem)
275
  {
 
 
276
  $('.form-warning.filetype').fadeIn();
277
  }
278
  this.warningMimeType = function(fileItem)
23
  $('input[name="timestamp_replace"]').on('change', $.proxy(this.checkCustomDate, this));
24
  $('input[name="replace_type"]').on('change', $.proxy(this.showReplaceOptions, this));
25
  $('input[name="userfile"]').on('change', $.proxy(this.handleImage, this));
26
+ $('.replace_custom_date').on('click', $.proxy(this.updateCustomDate, this));
27
 
28
  // DragDrop
29
  $('.wrap.emr_upload_form').on('dragover', $.proxy(this.dragOverArea, this));
177
  this.debug(target_type + ' not ' + source_type);
178
  var falsePositive = this.checkFalsePositiveType(source_type, target_type);
179
  if (! falsePositive)
180
+ this.warningFileType(source_type, target_type);
181
  }
182
 
183
  if (! is_empty && emr_options.allowed_mime.indexOf(target_type) == -1)
230
 
231
  $(preview).find('.image_size').text(size);
232
  }
233
+ this.updateCustomDate = function(e)
234
+ {
235
+ var $target = $(e.target);
236
+ var min = $target.data('min');
237
+ var hour = $target.data('hour');
238
+ var date = $target.data('date');
239
+ var format = $target.data('format');
240
+
241
+ $('input[name="custom_date"]').val(date);
242
+ $('input[name="custom_hour"]').val(hour);
243
+ $('input[name="custom_minute"]').val(min);
244
+ $('input[name="custom_date_formatted"]').val(format);
245
+ }
246
  this.checkSubmit = function()
247
  {
248
  var check = ($('input[name="userfile"]').val().length > 0) ? true : false;
285
  $('.form-error.filesize').find('.fn').text(fileItem.name);
286
  $('.form-error.filesize').fadeIn();
287
  }
288
+ this.warningFileType = function(source_type, target_type)
289
  {
290
+ $('.form-warning.filetype').find('.source_type').text(source_type);
291
+ $('.form-warning.filetype').find('.target_type').text(target_type);
292
  $('.form-warning.filetype').fadeIn();
293
  }
294
  this.warningMimeType = function(fileItem)
js/upsell.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($)
2
+ {
3
+ $('.emr-installer').on('click', function(e){
4
+ e.preventDefault();
5
+ // var $this = $(this);
6
+ var button = $(this);
7
+ var plugin = button.data('plugin');
8
+ var nonce = $('#upsell-nonce').val();
9
+
10
+ button.text(emr_upsell.installing);
11
+
12
+ var enr_eg_opts = {
13
+ url: emr_upsell.ajax,
14
+ type: 'post',
15
+ async: true,
16
+ cache: false,
17
+ dataType: 'json',
18
+ data: {
19
+ action: 'emr_plugin_install',
20
+ nonce: nonce,
21
+ plugin: plugin //'https://downloads.wordpress.org/plugin/envira-gallery-lite.zip',
22
+ },
23
+ success: function(response) {
24
+ $(button).addClass('hidden');
25
+
26
+ $('.emr-activate[data-plugin="' + plugin + '"]').removeClass('hidden');
27
+
28
+ },
29
+ error: function(xhr, textStatus, e) {
30
+ },
31
+ };
32
+
33
+ $.ajax(enr_eg_opts);
34
+ });
35
+
36
+ $('.emr-activate').on('click', function(e){
37
+ e.preventDefault();
38
+
39
+ var button = $(this);
40
+ var plugin = button.data('plugin');
41
+ var nonce = $('#upsell-nonce-activate').val();
42
+
43
+ var enr_eg_opts = {
44
+ url: emr_upsell.ajax,
45
+ type: 'post',
46
+ async: true,
47
+ cache: false,
48
+ dataType: 'json',
49
+ data: {
50
+ action: 'emr_plugin_activate',
51
+ nonce: nonce,
52
+ plugin: plugin,
53
+ },
54
+ success: function(response) {
55
+ $(button).addClass('hidden')
56
+ $('.emr-activate-done[data-plugin="' + plugin + '"]').removeClass('hidden');
57
+
58
+ },
59
+ error: function(xhr, textStatus, e) {
60
+ },
61
+ };
62
+ $.ajax(enr_eg_opts);
63
+ });
64
+
65
+ });
readme.txt CHANGED
@@ -2,10 +2,10 @@
2
  Contributors: ShortPixel
3
  Donate link: https://www.paypal.me/resizeImage
4
  Tags: replace, attachment, media, files, replace image, replace jpg, change media, replace media, image, file
5
- Requires at least: 4.9
6
- Tested up to: 5.7
7
  Requires PHP: 5.6
8
- Stable tag: 3.5.0
9
 
10
  Easily replace any attached image/file by simply uploading a new file in the Media Library edit view - a real time saver!
11
 
@@ -47,6 +47,20 @@ If you want more control over the format used to display the time, you can use t
47
 
48
  == Changelog ==
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  = 3.5.0 =
51
 
52
  Release date: October 29th 2020
2
  Contributors: ShortPixel
3
  Donate link: https://www.paypal.me/resizeImage
4
  Tags: replace, attachment, media, files, replace image, replace jpg, change media, replace media, image, file
5
+ Requires at least: 4.9.7
6
+ Tested up to: 5.8.1
7
  Requires PHP: 5.6
8
+ Stable tag: 3.6.0
9
 
10
  Easily replace any attached image/file by simply uploading a new file in the Media Library edit view - a real time saver!
11
 
47
 
48
  == Changelog ==
49
 
50
+ = 3.6.0 =
51
+
52
+ Release date: October 11th, 2021
53
+ * New: Constant EMR_CAPABILITY can define extra user roles to allow and deny replacements;
54
+ * New: Replacing an usual image with an SVG file will just replace all thumbnails by the main file;
55
+ * New: Also replaces caption when set in Exif data (when replacing with updating all links);
56
+ * Tweak: Added Now and Original options to Custom Date for usability;
57
+ * Tweak: changes/updates to the banners from the EMR screen;
58
+ * Fix: EMR now respects edit_other_posts permissions using default permissions;
59
+ * Fix: EMR with ALLOW_UNFILTERED_UPLOADS enabled (and allowed role) will not limit non-allowed uploads;
60
+ * Fix: some missing and wrong text-domains are now corrected (thanks @alexclassroom);
61
+ * Fix: a missing dot in the plugin description was preventing the transaltions to properly work;
62
+ * Fix: the plugin can now be uninstalled/deleted on PHP 8.
63
+
64
  = 3.5.0 =
65
 
66
  Release date: October 29th 2020
scss/admin.scss CHANGED
@@ -11,7 +11,6 @@
11
  }
12
  }
13
 
14
-
15
  .wrapper
16
  {
17
  // margin: 15px 0;
@@ -28,8 +27,6 @@
28
  }
29
  }
30
 
31
-
32
-
33
  .image_chooser.wrapper
34
  {
35
  min-height: 350px;
@@ -222,6 +219,14 @@
222
  width: 45px;
223
  }
224
  }
 
 
 
 
 
 
 
 
225
  ul
226
  {
227
  li
@@ -300,47 +305,65 @@
300
  width: 250px;
301
  min-height: 270px;
302
  border: 1px solid #ccc;
303
- padding: 15px;
304
  //margin: 0 0 10px 25px;
305
- margin-bottom:25px;
306
  float: right;
307
  clear: both;
 
308
  h3 {
309
- line-height: 1.3em; // match size
 
 
 
 
310
  }
311
- &.site-speed
 
 
 
 
 
 
 
 
 
 
 
 
312
  {
313
- background-color: #dcfdff;
314
- .img-wrapper
315
- {
316
- text-align: center;
317
- margin: 0 0 25px 0;
318
- img { max-width: 140px; max-height: 140px; margin: 0; }
319
- }
320
- h3 {
321
- color: #00d0e5;
322
- font-size: 20px;
323
- text-align: center;
324
- margin: 0;
325
- line-height: 1.3em;
326
- }
327
- .button-wrapper
328
- {
329
- text-align: center;
330
- margin-top: 35px;
331
- a {
332
- background-color: #ff0000;
333
- color: #fff;
334
- display: inline-block;
335
- padding: 8px;
336
- text-decoration: none;
337
- font-weight: 700;
338
- font-size: 20px;
339
- }
340
- }
341
- .red { color: #ff0000; }
342
 
 
 
 
 
 
343
  }
 
 
 
 
 
 
 
 
 
 
 
344
  }
345
 
346
  @media( max-width: 1200px)
@@ -359,4 +382,20 @@
359
  {
360
  .upsell-wrapper { display: none; }
361
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  } // emr_upload_form
11
  }
12
  }
13
 
 
14
  .wrapper
15
  {
16
  // margin: 15px 0;
27
  }
28
  }
29
 
 
 
30
  .image_chooser.wrapper
31
  {
32
  min-height: 350px;
219
  width: 45px;
220
  }
221
  }
222
+ .replace_custom_date
223
+ {
224
+ margin-left: 5px;
225
+ &:hover {
226
+ text-decoration: underline;
227
+ cursor: pointer
228
+ }
229
+ }
230
  ul
231
  {
232
  li
305
  width: 250px;
306
  min-height: 270px;
307
  border: 1px solid #ccc;
308
+ padding: 10px;
309
  //margin: 0 0 10px 25px;
310
+ margin-bottom: 10px;
311
  float: right;
312
  clear: both;
313
+ background-color: #dcfdff;
314
  h3 {
315
+ color: #00d0e5;
316
+ font-size: 18px;
317
+ text-align: center;
318
+ margin: 0;
319
+ line-height: 1.3em;
320
  }
321
+ h4 {
322
+ // margin: 0;
323
+ font-size: 16px;
324
+ text-align: center;
325
+ }
326
+ .red { color: #ff0000; }
327
+ .cyan { color: #00d0e5; }
328
+ .grey { color: grey; }
329
+ .ucase { text-transform: uppercase; }
330
+ a {
331
+ text-decoration: none
332
+ }
333
+ .button-wrapper
334
  {
335
+ text-align: center;
336
+ margin-top: 35px;
337
+ a {
338
+ background-color: #ff0000;
339
+ color: #fff;
340
+ display: inline-block;
341
+ padding: 8px;
342
+ text-decoration: none;
343
+ font-weight: 700;
344
+ font-size: 20px;
345
+ text-transform: uppercase;
346
+ }
347
+ }
348
+ .hidden { display: none !important; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
+ .img-wrapper
351
+ {
352
+ text-align: center;
353
+ margin: 0 0 25px 0;
354
+ img { max-width: 140px; max-height: 140px; margin: 0; }
355
  }
356
+
357
+ &.spio // shortpixel
358
+ {
359
+ }
360
+ &.site-speed // Site speed
361
+ {
362
+ }
363
+ &.envira-shortpixel-install // envira
364
+ {
365
+ background: #fff;
366
+ }
367
  }
368
 
369
  @media( max-width: 1200px)
382
  {
383
  .upsell-wrapper { display: none; }
384
  }
385
+ @media (max-width: 450px )
386
+ {
387
+ .replace_custom_date_wrapper {
388
+ display: block;
389
+ margin-top: 15px;
390
+ font-size: 16px;
391
+
392
+ }
393
+ .location_option {
394
+ label {
395
+ margin: 25px 0;
396
+ display: inline-block;
397
+ }
398
+
399
+ }
400
+ }
401
  } // emr_upload_form
views/popup.php CHANGED
@@ -24,10 +24,17 @@ if (!current_user_can('upload_files'))
24
 
25
  global $wpdb;
26
 
27
- $table_name = $wpdb->prefix . "posts";
28
 
 
29
  $attachment_id = intval($_GET['attachment_id']);
30
  $attachment = get_post($attachment_id);
 
 
 
 
 
 
31
  $replacer = new Replacer($attachment_id);
32
 
33
  $file = $replacer->getSourceFile();
@@ -40,7 +47,7 @@ $uiHelper = new UIHelper();
40
  $uiHelper->setPreviewSizes();
41
  $uiHelper->setSourceSizes($attachment_id);
42
 
43
- $emr = EnableMediaReplacePlugin::get();
44
 
45
  $defaults = array(
46
  'replace_type' => 'replace',
@@ -69,7 +76,7 @@ $url = $uiHelper->getFormUrl($attachment_id);
69
 
70
  <div class='editor-wrapper'>
71
  <section class='image_chooser wrapper'>
72
- <div class='section-header'> <?php _e('Choose Replacement Media', 'enable-replace-media'); ?></div>
73
 
74
  <div id="message" class=""><strong><?php printf( esc_html__('NOTE: You are about to replace the media file "%s". There is no undo. Think about it!', "enable-media-replace"), $filename ); ?></strong></div>
75
 
@@ -80,14 +87,16 @@ $url = $uiHelper->getFormUrl($attachment_id);
80
  <div class='form-error filesize'><p><?php printf(__('%s f %s exceeds the maximum upload size for this site.', 'enable-media-replace'), '<span class="fn">', '</span>'); ?></p>
81
  </div>
82
 
83
- <div class='form-warning filetype'><p><?php printf(__('Replacement file is not the same filetype. This might cause unexpected issues')); ?></p></div>
 
 
84
 
85
  <div class='form-warning mimetype'><p><?php printf(__('Replacement file type doesn\'t seem to be allowed by WordPress. This might cause unexpected issues')); ?></p></div>
86
 
87
  <div class='emr_drop_area'>
88
  <div class='drop-wrapper'>
89
 
90
- <p><input type="file" name="userfile" id="userfile" /></p>
91
  <h1><?php _e('Drop File Here', 'enable-media-replace'); ?></h1>
92
  </div>
93
 
@@ -118,38 +127,41 @@ $url = $uiHelper->getFormUrl($attachment_id);
118
 
119
  <div class='option-flex-wrapper'>
120
  <section class='replace_type wrapper'>
121
- <div class='section-header'> <?php _e('Replacement Options', 'enable-replace-media'); ?></div>
122
 
123
- <?php
124
  // these are also used in externals, for checks.
125
  do_action( 'emr_before_replace_type_options' ); ?>
126
 
127
 
128
- <?php $enabled_search = apply_filters( 'emr_display_replace_type_options', true );
129
  $search_disabled = (! $enabled_search) ? 'disabled' : '';
130
  ?>
131
  <div class='option replace <?php echo $search_disabled ?>'>
132
- <label for="replace_type_1" ><input <?php checked('replace', $settings['replace_type']) ?> id="replace_type_1" type="radio" name="replace_type" value="replace" <?php echo $search_disabled ?> > <?php echo esc_html__("Just replace the file", "enable-media-replace"); ?>
133
  </label>
134
 
135
- <p class="howto">
136
  <?php printf( esc_html__("Note: This option requires you to upload a file of the same type (%s) as the one you are replacing. The name of the attachment will stay the same (%s) no matter what the file you upload is called.", "enable-media-replace"), $filetype, $filename ); ?>
137
  </p>
138
 
 
 
 
139
  <?php do_action('emr_after_search_type_options'); ?>
140
  </div>
141
 
142
- <?php $enabled_replacesearch = apply_filters( 'emr_enable_replace_and_search', true );
143
  $searchreplace_disabled = (! $enabled_replacesearch) ? 'disabled' : '';
144
  ?>
145
 
146
  <div class="option searchreplace <?php echo $searchreplace_disabled ?>">
147
- <label for="replace_type_2"><input id="replace_type_2" <?php checked('replace_and_search', $settings['replace_type']) ?> type="radio" name="replace_type" value="replace_and_search" <?php echo $searchreplace_disabled ?> > <?php echo __("Replace the file, use new file name and update all links", "enable-media-replace"); ?>
148
  </label>
149
 
150
- <p class="howto"><?php printf( esc_html__("Note: If you check this option, the name and type of the file you are about to upload will replace the old file. All links pointing to the current file (%s) will be updated to point to the new file name. (If any other websites link to the file directly, those links will no longer work. Be careful.)", "enable-media-replace"), $filename ); ?></p>
151
 
152
- <!-- <p class="howto"><?php echo esc_html__("Please note that if you upload a new image, only embeds/links of the original size image will be replaced in your posts.", "enable-media-replace"); ?></p> -->
153
 
154
  <?php do_action('emr_after_replace_type_options'); ?>
155
  </div>
@@ -160,8 +172,12 @@ $url = $uiHelper->getFormUrl($attachment_id);
160
  <div class='option timestamp'>
161
  <?php
162
  $attachment_current_date = date_i18n('d/M/Y H:i', strtotime($attachment->post_date) );
 
163
  $time = current_time('mysql');
164
- $date = new \dateTime($time);
 
 
 
165
 
166
  if ($settings['timestamp_replace'] == \EnableMediaReplace\Replacer::TIME_CUSTOM)
167
  {
@@ -170,7 +186,7 @@ $url = $uiHelper->getFormUrl($attachment_id);
170
  ?>
171
  <p><?php _e('When replacing the media, do you want to:', 'enable-media-replace'); ?></p>
172
  <ul>
173
- <li><label><input type='radio' <?php checked('1', $settings['timestamp_replace']) ?> name='timestamp_replace' value='1' /><?php _e('Replace the date', 'enable-media-replace'); ?></label></li>
174
  <li><label><input type='radio' <?php checked('2', $settings['timestamp_replace']) ?> name='timestamp_replace' value='2' /><?php printf(__('Keep the date %s(%s)%s', 'enable-media-replace'), "<span class='small'>", $attachment_current_date, "</span>"); ?></label></li>
175
  <li><label><input type='radio' <?php checked('3', $settings['timestamp_replace']) ?> name='timestamp_replace' value='3' /><?php _e('Set a Custom Date', 'enable-media-replace'); ?></label></li>
176
  </ul>
@@ -183,6 +199,14 @@ $url = $uiHelper->getFormUrl($attachment_id);
183
  @ <input type='text' name="custom_hour" class='emr_hour' value="<?php echo $date->format('H') ?>" /> &nbsp;
184
  <input type="text" name="custom_minute" class='emr_minute' value="<?php echo $date->format('i'); ?>" />
185
  <input type="hidden" name="custom_date_formatted" value="<?php echo $date->format('Y-m-d'); ?>" />
 
 
 
 
 
 
 
 
186
  </div>
187
  <?php if ($subdir = $uiHelper->getRelPathNow()):
188
 
@@ -190,7 +214,7 @@ $url = $uiHelper->getFormUrl($attachment_id);
190
  $subdir = $settings['new_location_dir'];
191
  ?>
192
  <div class='location_option'>
193
- <label><input type="checkbox" name="new_location" value="1" <?php checked($settings['new_location'], 1); ?> /> <?php _e('Put new Upload in Updated Folder: '); ?></label>
194
  <input type="text" name="location_dir" value="<?php echo $subdir ?>" />
195
  </div>
196
  <?php endif; ?>
@@ -204,44 +228,9 @@ $url = $uiHelper->getFormUrl($attachment_id);
204
  </section>
205
  </div>
206
 
 
 
207
 
208
- <?php
209
- #wp_nonce_field('enable-media-replace');
210
- $plugins = get_plugins();
211
- $spInstalled = isset($plugins['shortpixel-image-optimiser/wp-shortpixel.php']);
212
- $spActive = is_plugin_active('shortpixel-image-optimiser/wp-shortpixel.php');
213
- ?>
214
 
215
- <section class='upsell-wrapper'>
216
- <?php if(! $spInstalled) {?>
217
- <div class='shortpixel-offer'>
218
- <h3 class="" style="margin-top: 0;text-align: center;">
219
- <a href="https://shortpixel.com/wp/af/VKG6LYN28044" target="_blank">
220
- <?php echo esc_html__("Optimize your images with ShortPixel, get +50% credits!", "enable-media-replace"); ?>
221
- </a>
222
- </h3>
223
- <div class="" style="text-align: center;">
224
- <a href="https://shortpixel.com/wp/af/VKG6LYN28044" target="_blank">
225
- <img src="https://optimizingmattersblog.files.wordpress.com/2016/10/shortpixel.png">
226
- </a>
227
- </div>
228
- <div class="" style="margin-bottom: 10px;">
229
- <?php echo esc_html__("Get more Google love by compressing your site's images! Check out how much ShortPixel can save your site and get +50% credits when signing up as an Enable Media Replace user! Forever!", "enable-media-replace"); ?>
230
- </div>
231
- <div class=""><div style="text-align: <?php echo (is_rtl()) ? 'left' : 'right' ?>;">
232
- <a class="button button-primary" id="shortpixel-image-optimiser-info" href="https://shortpixel.com/wp/af/VKG6LYN28044" target="_blank">
233
- <?php echo esc_html__("More info", "enable-media-replace"); ?>
234
- </a>
235
- </div>
236
- </div>
237
- </div>
238
- <?php } ?>
239
- <div class='shortpixel-offer site-speed'>
240
- <p class='img-wrapper'><img src="<?php echo $emr->getPluginURL('img/shortpixel.png'); ?>" alt='ShortPixel'></p>
241
- <h3><?php printf(__('ARE YOU %s CONCERNED WITH %s YOUR %s %s SITE SPEED? %s', 'enable-media-replace'),'<br>', '<br>','<br>', '<span class="red">','</span>'); ?><br><br>
242
- <?php printf(__('ALLOW ShortPixel %s SPECIALISTS TO %s FIND THE %s SOLUTION FOR YOU.', 'enable-media-replace'), '<br>','<br>','<br>'); ?></h3>
243
- <p class='button-wrapper'><a href='https://shortpixel.com/lp/wso/?utm_source=EMR' target="_blank"><?php _e('FIND OUT MORE', 'enable-media-replace') ?></a></p>
244
- </div>
245
- </section>
246
  </form>
247
  </div>
24
 
25
  global $wpdb;
26
 
27
+ $emr = EnableMediaReplacePlugin::get();
28
 
29
+ $table_name = $wpdb->prefix . "posts";
30
  $attachment_id = intval($_GET['attachment_id']);
31
  $attachment = get_post($attachment_id);
32
+
33
+ if (! $emr->checkImagePermission($attachment->post_author, $attachment_id))
34
+ {
35
+ wp_die( esc_html__('You do not have permission to upload files for this author.', 'enable-media-replace') );
36
+ }
37
+
38
  $replacer = new Replacer($attachment_id);
39
 
40
  $file = $replacer->getSourceFile();
47
  $uiHelper->setPreviewSizes();
48
  $uiHelper->setSourceSizes($attachment_id);
49
 
50
+
51
 
52
  $defaults = array(
53
  'replace_type' => 'replace',
76
 
77
  <div class='editor-wrapper'>
78
  <section class='image_chooser wrapper'>
79
+ <div class='section-header'> <?php _e('Choose Replacement Media', 'enable-media-replace'); ?></div>
80
 
81
  <div id="message" class=""><strong><?php printf( esc_html__('NOTE: You are about to replace the media file "%s". There is no undo. Think about it!', "enable-media-replace"), $filename ); ?></strong></div>
82
 
87
  <div class='form-error filesize'><p><?php printf(__('%s f %s exceeds the maximum upload size for this site.', 'enable-media-replace'), '<span class="fn">', '</span>'); ?></p>
88
  </div>
89
 
90
+ <div class='form-warning filetype'><p><?php printf(__('Replacement file is not the same filetype. This might cause unexpected issues ( %s )', 'enable-media-replace'), '<span class="source_type"></span> - <span class="target_type"></span>'); ?>
91
+
92
+ </p></div>
93
 
94
  <div class='form-warning mimetype'><p><?php printf(__('Replacement file type doesn\'t seem to be allowed by WordPress. This might cause unexpected issues')); ?></p></div>
95
 
96
  <div class='emr_drop_area'>
97
  <div class='drop-wrapper'>
98
 
99
+ <p><input type="file" name="userfile" id="userfile" /></p>
100
  <h1><?php _e('Drop File Here', 'enable-media-replace'); ?></h1>
101
  </div>
102
 
127
 
128
  <div class='option-flex-wrapper'>
129
  <section class='replace_type wrapper'>
130
+ <div class='section-header'> <?php _e('Replacement Options', 'enable-media-replace'); ?></div>
131
 
132
+ <?php
133
  // these are also used in externals, for checks.
134
  do_action( 'emr_before_replace_type_options' ); ?>
135
 
136
 
137
+ <?php $enabled_search = apply_filters( 'emr_display_replace_type_options', true );
138
  $search_disabled = (! $enabled_search) ? 'disabled' : '';
139
  ?>
140
  <div class='option replace <?php echo $search_disabled ?>'>
141
+ <label for="replace_type_1" ><input <?php checked('replace', $settings['replace_type']) ?> id="replace_type_1" type="radio" name="replace_type" value="replace" <?php echo $search_disabled ?> > <?php echo esc_html__("Just replace the file", "enable-media-replace"); ?>
142
  </label>
143
 
144
+ <p class="howto">
145
  <?php printf( esc_html__("Note: This option requires you to upload a file of the same type (%s) as the one you are replacing. The name of the attachment will stay the same (%s) no matter what the file you upload is called.", "enable-media-replace"), $filetype, $filename ); ?>
146
  </p>
147
 
148
+ <p class='form-warning filetype'><?php _e('If you replace the file with a different filetype, this file might become unreadable and / or cause unexpected issues', 'enable-media-replace'); ?>
149
+ </p>
150
+
151
  <?php do_action('emr_after_search_type_options'); ?>
152
  </div>
153
 
154
+ <?php $enabled_replacesearch = apply_filters( 'emr_enable_replace_and_search', true );
155
  $searchreplace_disabled = (! $enabled_replacesearch) ? 'disabled' : '';
156
  ?>
157
 
158
  <div class="option searchreplace <?php echo $searchreplace_disabled ?>">
159
+ <label for="replace_type_2"><input id="replace_type_2" <?php checked('replace_and_search', $settings['replace_type']) ?> type="radio" name="replace_type" value="replace_and_search" <?php echo $searchreplace_disabled ?> > <?php echo __("Replace the file, use new file name and update all links", "enable-media-replace"); ?>
160
  </label>
161
 
162
+ <p class="howto"><?php printf( esc_html__("Note: If you check this option, the name and type of the file you are about to upload will replace the old file. All links pointing to the current file (%s) will be updated to point to the new file name. (If any other websites link to the file directly, those links will no longer work. Be careful.)", "enable-media-replace"), $filename ); ?></p>
163
 
164
+ <!-- <p class="howto"><?php echo esc_html__("Please note that if you upload a new image, only embeds/links of the original size image will be replaced in your posts.", "enable-media-replace"); ?></p> -->
165
 
166
  <?php do_action('emr_after_replace_type_options'); ?>
167
  </div>
172
  <div class='option timestamp'>
173
  <?php
174
  $attachment_current_date = date_i18n('d/M/Y H:i', strtotime($attachment->post_date) );
175
+ $attachment_now_date = date_i18n('d/M/Y H:i', time() );
176
  $time = current_time('mysql');
177
+ $date = $nowDate = new \dateTime($time); // default to now.
178
+ // var_dump(strtotime($attachment->post_date));
179
+ // exit();
180
+ $attachmentDate = new \dateTime($attachment->post_date);
181
 
182
  if ($settings['timestamp_replace'] == \EnableMediaReplace\Replacer::TIME_CUSTOM)
183
  {
186
  ?>
187
  <p><?php _e('When replacing the media, do you want to:', 'enable-media-replace'); ?></p>
188
  <ul>
189
+ <li><label><input type='radio' <?php checked('1', $settings['timestamp_replace']) ?> name='timestamp_replace' value='1' /><?php printf(__('Replace the date with current date %s(%s)%s', 'enable-media-replace'), "<span class='small'>", $attachment_now_date, "</span>") ; ?></label></li>
190
  <li><label><input type='radio' <?php checked('2', $settings['timestamp_replace']) ?> name='timestamp_replace' value='2' /><?php printf(__('Keep the date %s(%s)%s', 'enable-media-replace'), "<span class='small'>", $attachment_current_date, "</span>"); ?></label></li>
191
  <li><label><input type='radio' <?php checked('3', $settings['timestamp_replace']) ?> name='timestamp_replace' value='3' /><?php _e('Set a Custom Date', 'enable-media-replace'); ?></label></li>
192
  </ul>
199
  @ <input type='text' name="custom_hour" class='emr_hour' value="<?php echo $date->format('H') ?>" /> &nbsp;
200
  <input type="text" name="custom_minute" class='emr_minute' value="<?php echo $date->format('i'); ?>" />
201
  <input type="hidden" name="custom_date_formatted" value="<?php echo $date->format('Y-m-d'); ?>" />
202
+
203
+ <span class="replace_custom_date_wrapper">
204
+ <?php
205
+ printf('<a class="replace_custom_date" data-date="%s" data-hour="%s" data-min="%s" data-format="%s">%s</a>', $nowDate->format(get_option('date_format')), $nowDate->format('H'), $nowDate->format('i'), $nowDate->format('Y-m-d'), __('Now', 'enable-media-replace'));
206
+ echo " ";
207
+ printf('<a class="replace_custom_date" data-date="%s" data-hour="%s" data-min="%s" data-format="%s">%s</a>', $attachmentDate->format(get_option('date_format')), $attachmentDate->format('H'), $attachmentDate->format('i'), $attachmentDate->format('Y-m-d'), __('Original', 'enable-media-replace'));
208
+ ?>
209
+ </span>
210
  </div>
211
  <?php if ($subdir = $uiHelper->getRelPathNow()):
212
 
214
  $subdir = $settings['new_location_dir'];
215
  ?>
216
  <div class='location_option'>
217
+ <label><input type="checkbox" name="new_location" value="1" <?php checked($settings['new_location'], 1); ?> /> <?php _e('Put new Upload in Updated Folder: ', 'enable-media-replace'); ?></label>
218
  <input type="text" name="location_dir" value="<?php echo $subdir ?>" />
219
  </div>
220
  <?php endif; ?>
228
  </section>
229
  </div>
230
 
231
+ <?php include_once('upsell.php'); ?>
232
+
233
 
 
 
 
 
 
 
234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  </form>
236
  </div>
views/upload.php CHANGED
@@ -22,9 +22,19 @@ $postmeta_table_name = $wpdb->prefix . "postmeta";
22
 
23
  // Starts processing.
24
  $uihelper = new UIHelper();
 
25
 
26
  // Get old guid and filetype from DB
27
- $post_id = intval($_POST['ID']); // sanitize, post_id.
 
 
 
 
 
 
 
 
 
28
  $replacer = new Replacer($post_id);
29
 
30
  // Massage a bunch of vars
@@ -42,7 +52,7 @@ $settings = array(); // save settings and show last loaded.
42
  $settings['replace_type'] = $replace_type;
43
  $settings['timestamp_replace'] = $timestamp_replace;
44
  $settings['new_location'] = $do_new_location;
45
- $settings['new_location_dir'] = $new_location_dir;
46
 
47
  switch($timestamp_replace)
48
  {
@@ -122,7 +132,7 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
122
  }
123
 
124
 
125
- if ($filedata["ext"] == false) {
126
 
127
  Notices::addError(esc_html__("File type does not meet security guidelines. Try another.", 'enable-media-replace') );
128
  wp_safe_redirect($redirect_error);
@@ -173,7 +183,7 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
173
  exit();
174
  }
175
 
176
- Notices::addSuccess(__('File successfully replaced'));
177
 
178
  // Allow developers to override $returnurl
179
  //$returnurl = apply_filters('emr_returnurl', $returnurl);
22
 
23
  // Starts processing.
24
  $uihelper = new UIHelper();
25
+ $emr = EnableMediaReplacePlugin::get();
26
 
27
  // Get old guid and filetype from DB
28
+ $post_id = isset($_POST['ID']) ? intval($_POST['ID']) : null; // sanitize, post_id.
29
+ if (is_null($post_id))
30
+ {
31
+ wp_die( esc_html__('Error in request. Please try again', 'enable-media-replace') );
32
+ }
33
+ $attachment = get_post($post_id);
34
+
35
+ if (! $emr->checkImagePermission($attachment->post_author, $attachment->ID))
36
+ wp_die( esc_html__('You do not have permission to upload files for this author.', 'enable-media-replace') );
37
+
38
  $replacer = new Replacer($post_id);
39
 
40
  // Massage a bunch of vars
52
  $settings['replace_type'] = $replace_type;
53
  $settings['timestamp_replace'] = $timestamp_replace;
54
  $settings['new_location'] = $do_new_location;
55
+ $settings['new_location_dir'] = $new_location_dir;
56
 
57
  switch($timestamp_replace)
58
  {
132
  }
133
 
134
 
135
+ if ($filedata["ext"] == false && ! current_user_can( 'unfiltered_upload' )) {
136
 
137
  Notices::addError(esc_html__("File type does not meet security guidelines. Try another.", 'enable-media-replace') );
138
  wp_safe_redirect($redirect_error);
183
  exit();
184
  }
185
 
186
+ Notices::addSuccess(__('File successfully replaced','enable-media-replace'));
187
 
188
  // Allow developers to override $returnurl
189
  //$returnurl = apply_filters('emr_returnurl', $returnurl);
views/upsell.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace EnableMediaReplace;
3
+
4
+ //use \EnableMediaReplace\UIHelper;
5
+ use EnableMediaReplace\ShortPixelLogger\ShortPixelLogger as Log;
6
+ use EnableMediaReplace\Notices\NoticeController as Notices;
7
+
8
+ #wp_nonce_field('enable-media-replace');
9
+ $plugins = get_plugins();
10
+
11
+ $spio_installed = isset($plugins['shortpixel-image-optimiser/wp-shortpixel.php']);
12
+ $spio_active = is_plugin_active('shortpixel-image-optimiser/wp-shortpixel.php');
13
+
14
+
15
+ $spai_installed = isset($plugins['shortpixel-adaptive-images/short-pixel-ai.php']);
16
+ $spai_active = is_plugin_active('shortpixel-adaptive-images/short-pixel-ai.php');
17
+
18
+ $envira_installed = isset($plugins['envira-gallery-lite/envira-gallery-lite.php']);
19
+ $envira_active = is_plugin_active('envira-gallery-lite/envira-gallery-lite.php');
20
+ $envira_pro_active = is_plugin_active('envira-gallery/envira-gallery.php');
21
+
22
+
23
+ ?>
24
+
25
+ <input type="hidden" id='upsell-nonce' value="<?php echo wp_create_nonce( 'emr-plugin-install' ); ?>" />
26
+ <input type="hidden" id='upsell-nonce-activate' value="<?php echo wp_create_nonce( 'emr-plugin-activate' ); ?>" />
27
+ <section class='upsell-wrapper'>
28
+
29
+ <!--- SHORTPIXEL -->
30
+ <?php if(! $spio_active): ?>
31
+
32
+ <div class='shortpixel-offer spio'>
33
+ <div class='img-wrapper'>
34
+ <img width="40" height="40" src="<?php echo $emr->getPluginURL('img/sp-logo-regular.svg') ?>" alt="ShortPixel">
35
+ </div>
36
+ <h4 class="grey">
37
+ <?php echo esc_html__("ShortPixel Image Optimizer", "enable-media-replace"); ?>
38
+ </h4>
39
+ <h3 class="red ucase"><?php _e('Is your website slow?', 'enable-media-replace'); ?></h3>
40
+ <br>
41
+ <h3 class="cyan ucase"><?php printf(__('Optimize all images %s automatically', 'enable-media-replace'), '<br>'); ?></h3>
42
+ <p class='button-wrapper '>
43
+ <?php
44
+ $install_class = (! $spio_installed) ? '' : 'hidden';
45
+ $activate_class = ($spio_installed && ! $spio_active) ? '' : 'hidden';
46
+ ?>
47
+ <a class="emr-installer <?php echo $install_class ?>" data-action="install" data-plugin="spio" href="javascript:void(0)">
48
+ <?php _e('INSTALL NOW', 'enable-media-replace') ?>
49
+ </a>
50
+
51
+ <a class='emr-activate <?php echo $activate_class ?>' data-action="activate" data-plugin="spio" href="javascript:void(0)">
52
+ <?php _e('ACTIVATE', 'enable-media-replace') ?>
53
+ </a>
54
+
55
+ <h4 class='emr-activate-done hidden' data-plugin='spio'><?php _e('Shortpixel activated!', 'enable-media-replace'); ?></h4>
56
+ </p>
57
+
58
+ </div>
59
+ <?php endif; ?>
60
+ <!--- // SHORTPIXEL -->
61
+
62
+ <!--- SHORTPIXEL AI -->
63
+ <?php if(! $spai_active): ?>
64
+
65
+ <div class='shortpixel-offer spai'>
66
+ <div class='img-wrapper'>
67
+ <img width="40" height="40" src="<?php echo $emr->getPluginURL('img/spai-logo.svg') ?>" alt="ShortPixel">
68
+ </div>
69
+ <h4 class="grey">
70
+ <?php echo esc_html__("ShortPixel Adaptive Images", "enable-media-replace"); ?>
71
+ </h4>
72
+
73
+
74
+ <h3 class="cyan ucase"><?php printf(__('Start Serving %s Optimized, %s Nextgen images %s From a global CDN', 'enable-media-replace'), '<br>', '<br>', '<br>'); ?></h3>
75
+ <h3 class="red ucase"><?php _e('In Minutes', 'enable-media-replace'); ?></h3>
76
+ <p class='button-wrapper '>
77
+ <?php
78
+ $install_class = (! $spai_installed) ? '' : 'hidden';
79
+ $activate_class = ($spai_installed && ! $spai_active) ? '' : 'hidden';
80
+ ?>
81
+ <a class="emr-installer <?php echo $install_class ?>" data-action="install" data-plugin="spai" href="javascript:void(0)">
82
+ <?php _e('INSTALL NOW', 'enable-media-replace') ?>
83
+ </a>
84
+
85
+ <a class='emr-activate <?php echo $activate_class ?>' data-action="activate" data-plugin="spai" href="javascript:void(0)">
86
+ <?php _e('ACTIVATE', 'enable-media-replace') ?>
87
+ </a>
88
+
89
+ <h4 class='emr-activate-done hidden' data-plugin='spai'><?php _e('Shortpixel Adaptive Images activated!', 'enable-media-replace'); ?></h4>
90
+ </p>
91
+
92
+ </div>
93
+ <?php endif; ?>
94
+ <!--- // SHORTPIXEL -->
95
+
96
+ <!--- WPSO -->
97
+ <div class='shortpixel-offer site-speed'>
98
+ <p class='img-wrapper'><img width="40" height="40" src="<?php echo $emr->getPluginURL('img/sp-logo-wink.svg'); ?>" alt='ShortPixel'></p>
99
+ <h3><?php printf(__('GET AN ASSESSMENT FOR %s YOUR WEBSITE %s AND %s %s FIND OUT HOW TO MAKE IT FASTER %s', 'enable-media-replace'),'<br>', '<br>','<br>', '<span class="red">','</span>'); ?></h3>
100
+
101
+ <p class='button-wrapper'><a href='https://wso.shortpixel.com/?utm_source=EMR' target="_blank"><?php _e('FIND OUT MORE', 'enable-media-replace') ?></a></p>
102
+ </div>
103
+ <!--- // WPSO -->
104
+
105
+ <!--- ENVIRA -->
106
+ <?php if (! $envira_pro_active): ?>
107
+ <div class='envira-shortpixel-install shortpixel-offer'>
108
+
109
+ <p class='img-wrapper'><img src="<?php echo $emr->getPluginURL('img/envira-logo.png'); ?>" alt='Envira Gallery'></p>
110
+ <p><?php esc_html_e('Create beautiful, fast-loading photo & video galleries for your site in minutes.', 'enable-media-replace' ); ?></p>
111
+
112
+ <?php
113
+ $install_class = (! $envira_installed) ? '' : 'hidden';
114
+ $activate_class = ($envira_installed && ! $envira_active) ? '' : 'hidden';
115
+ ?>
116
+ <?php if (! $envira_active) { ?>
117
+ <p class='button-wrapper envira-emr-button-wrap'>
118
+
119
+ <a class="emr-installer button button-envira-emr emr-install-envira <?php echo $install_class ?>" data-action="install" data-plugin="envira" href='javascript:void(0)'><?php _e('Install now', 'enable-media-replace') ?></a>
120
+
121
+ <a class="emr-activate button button-envira-emr emr-activate-envira <?php echo $activate_class ?>" href='javascript:void(0)' data-action="activate" data-plugin="envira" ><?php _e('Activate', 'enable-media-replace') ?></a>
122
+
123
+ <h4 class='emr-activate-done hidden' data-plugin='envira'><?php _e('Envira Gallery activated!', 'enable-media-replace'); ?></h4>
124
+
125
+ </p>
126
+
127
+ <?php } else {
128
+ if ( is_plugin_active( 'envira-gallery-lite/envira-gallery-lite.php' ) ) {
129
+ ?>
130
+ <p class='button-wrapper envira-emr-button-wrap'><a class="button button-envira-emr" href='https://enviragallery.com/pricing' target="_blank"><?php _e('Get Pro', 'enable-media-replace') ?></a></p>
131
+
132
+ <?php } else { ?>
133
+
134
+ <?php }
135
+ } ?>
136
+ </div>
137
+ <style>
138
+ .envira-emr-button-wrap {
139
+ text-align: center;
140
+ }
141
+ .button-envira-emr {
142
+ background-color: #7cc048 !important;
143
+ border: none !important;
144
+ color: rgb(255,255,255) !important;
145
+ font-size: 21px !important;
146
+ }
147
+ .button-envira-emr:hover {
148
+ background-color: #95dc5e !important;
149
+ }
150
+ </style>
151
+ <?php endif; // envira ?>
152
+ </section>