CTX Feed – WooCommerce Product Feed Manager Plugin - Version 4.3.33

Version Description

(2021-02-17) = * Added: WP options feature added where wordpress built-in options can be set from the WP Options page and can be found in the product attribute dropdown list. * Added: Product custom attributes in product attribute dropdown list.

Download this release

Release Info

Developer wahid0003
Plugin Icon 128x128 CTX Feed – WooCommerce Product Feed Manager Plugin
Version 4.3.33
Comparing to
See all releases

Code changes from version 4.3.32 to 4.3.33

README.txt CHANGED
@@ -5,7 +5,7 @@ Tags: Product Feed, WooCommerce, Google Shopping, Google Merchant, Facebook Cata
5
  Requires at least: 3.6
6
  Tested Up To: 5.6.1
7
  Requires PHP: 5.6
8
- Stable tag: 4.3.32
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -498,6 +498,10 @@ Using pro version:
498
 
499
  == Changelog ==
500
 
 
 
 
 
501
  = 4.3.32 (2021-02-16) =
502
  * Added: Auto exclude url addition for caching plugins.
503
 
5
  Requires at least: 3.6
6
  Tested Up To: 5.6.1
7
  Requires PHP: 5.6
8
+ Stable tag: 4.3.33
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
498
 
499
  == Changelog ==
500
 
501
+ = 4.3.33 (2021-02-17) =
502
+ * Added: WP options feature added where wordpress built-in options can be set from the WP Options page and can be found in the product attribute dropdown list.
503
+ * Added: Product custom attributes in product attribute dropdown list.
504
+
505
  = 4.3.32 (2021-02-16) =
506
  * Added: Auto exclude url addition for caching plugins.
507
 
admin/class-woo-feed-admin.php CHANGED
@@ -232,7 +232,8 @@ class Woo_Feed_Admin {
232
  add_submenu_page( 'webappick-manage-feeds', __( 'Make Feed', 'woo-feed' ), __( 'Make Feed', 'woo-feed' ), 'manage_woocommerce', 'webappick-new-feed', 'woo_feed_generate_new_feed' );
233
  add_submenu_page( 'webappick-manage-feeds', __( 'Category Mapping', 'woo-feed' ), __( 'Category Mapping', 'woo-feed' ), 'manage_woocommerce', 'webappick-feed-category-mapping', 'woo_feed_category_mapping' );
234
  add_submenu_page( 'webappick-manage-feeds', __( 'Settings', 'woo-feed' ), __( 'Settings', 'woo-feed' ), 'manage_woocommerce', 'webappick-feed-settings', 'woo_feed_config_feed' );
235
- add_submenu_page( 'webappick-manage-feeds', __( 'Status', 'woo-feed' ), __( 'Status', 'woo-feed' ), 'manage_woocommerce', 'webappick-wp-status', 'woo_feed_system_status' );
 
236
  add_submenu_page( 'webappick-manage-feeds', __( 'Documentation', 'woo-feed' ), '<span class="woo-feed-docs">' . __( 'Docs', 'woo-feed' ) . '</span>', 'manage_woocommerce', 'webappick-feed-docs', array( WooFeedDocs::getInstance(), 'woo_feed_docs' ) );
237
  }
238
  }
@@ -250,6 +251,7 @@ class Woo_Feed_Admin {
250
  'woo_feed_manage_feed' => 'webappick-manage-feeds',
251
  'woo_feed_config_feed' => 'webappick-feed-settings',
252
  'woo_feed_pro_vs_free' => 'webappick-feed-pro-vs-free',
 
253
  );
254
  if ( 'admin.php' === $pagenow && isset( $plugin_page ) && ! empty( $plugin_page ) ) {
255
  foreach ( $redirect_to as $from => $to ) {
232
  add_submenu_page( 'webappick-manage-feeds', __( 'Make Feed', 'woo-feed' ), __( 'Make Feed', 'woo-feed' ), 'manage_woocommerce', 'webappick-new-feed', 'woo_feed_generate_new_feed' );
233
  add_submenu_page( 'webappick-manage-feeds', __( 'Category Mapping', 'woo-feed' ), __( 'Category Mapping', 'woo-feed' ), 'manage_woocommerce', 'webappick-feed-category-mapping', 'woo_feed_category_mapping' );
234
  add_submenu_page( 'webappick-manage-feeds', __( 'Settings', 'woo-feed' ), __( 'Settings', 'woo-feed' ), 'manage_woocommerce', 'webappick-feed-settings', 'woo_feed_config_feed' );
235
+ add_submenu_page( 'webappick-manage-feeds', __( 'WP Options', 'woo-feed' ), __( 'WP Options', 'woo-feed' ), 'manage_woocommerce', 'webappick-wp-options', 'woo_feed_wp_options' );
236
+ add_submenu_page( 'webappick-manage-feeds', __( 'Status', 'woo-feed' ), __( 'Status', 'woo-feed' ), 'manage_woocommerce', 'webappick-wp-status', 'woo_feed_system_status' );
237
  add_submenu_page( 'webappick-manage-feeds', __( 'Documentation', 'woo-feed' ), '<span class="woo-feed-docs">' . __( 'Docs', 'woo-feed' ) . '</span>', 'manage_woocommerce', 'webappick-feed-docs', array( WooFeedDocs::getInstance(), 'woo_feed_docs' ) );
238
  }
239
  }
251
  'woo_feed_manage_feed' => 'webappick-manage-feeds',
252
  'woo_feed_config_feed' => 'webappick-feed-settings',
253
  'woo_feed_pro_vs_free' => 'webappick-feed-pro-vs-free',
254
+ 'woo_feed_wp_options' => 'webappick-wp-options',
255
  );
256
  if ( 'admin.php' === $pagenow && isset( $plugin_page ) && ! empty( $plugin_page ) ) {
257
  foreach ( $redirect_to as $from => $to ) {
admin/class-woo-feed-option-list.php ADDED
@@ -0,0 +1,501 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php ob_start();
2
+
3
+ /**
4
+ * Category List
5
+ *
6
+ * @link https://webappick.com/
7
+ * @since 1.0.0
8
+ *
9
+ * @package Woo_Feed_List_Table
10
+ * @author Ohidul Islam <wahid@webappick.com>
11
+ */
12
+ class Woo_Feed_Option_list extends Woo_Feed_List_Table {
13
+
14
+ /** ************************************************************************
15
+ * Normally we would be querying data from a database and manipulating that
16
+ * for use in your list table. For this example, we're going to simplify it
17
+ * slightly and create a pre-built array. Think of this as the data that might
18
+ * be returned by $wpdb->query()
19
+ *
20
+ * In a real-world scenario, you would make your own custom query inside
21
+ * this class' prepare_items() method.
22
+ *
23
+ * @var array
24
+ **************************************************************************/
25
+
26
+
27
+ /** ************************************************************************
28
+ * REQUIRED. Set up a constructor that references the parent constructor. We
29
+ * use the parent reference to set some default configs.
30
+ ***************************************************************************/
31
+ function __construct() {
32
+ // Set parent defaults
33
+ parent::__construct(
34
+ array(
35
+ 'singular' => __( 'option', 'woo-feed' ), // singular name of the listed records
36
+ 'plural' => __( 'options', 'woo-feed' ), // plural name of the listed records
37
+ 'ajax' => false, // does this table support ajax?
38
+ )
39
+ );
40
+
41
+ }
42
+
43
+
44
+ /** ************************************************************************
45
+ * Recommended. This method is called when the parent class can't find a method
46
+ * specifically build for a given column. Generally, it's recommended to include
47
+ * one method for each column you want to render, keeping your package class
48
+ * neat and organized. For example, if the class needs to process a column
49
+ * named 'title', it would first see if a method named $this->column_title()
50
+ * exists - if it does, that method will be used. If it doesn't, this one will
51
+ * be used. Generally, you should try to use custom column methods as much as
52
+ * possible.
53
+ *
54
+ * Since we have defined a column_title() method later on, this method doesn't
55
+ * need to concern itself with any column with a name of 'title'. Instead, it
56
+ * needs to handle everything else.
57
+ *
58
+ * For more detailed insight into how columns are handled, take a look at
59
+ * WP_List_Table::single_row_columns()
60
+ *
61
+ * @param array $item A singular item (one full row's worth of data)
62
+ * @param array $column_name The name/slug of the column to be processed
63
+ *
64
+ * @return string Text or HTML to be placed inside the column <td>
65
+ **************************************************************************/
66
+ function column_default( $item, $column_name ) {
67
+ global $plugin_page;
68
+ switch ( $column_name ) {
69
+ case 'option_name':
70
+ $newName = str_replace( 'wf_option_', '', $item['option_name'] );
71
+
72
+ return $newName;
73
+ case 'option_value':
74
+ if( isset($item['option_id']) ) {
75
+ $option_value = get_option($item['option_id']);
76
+ if( is_array($option_value) ) {
77
+ $optionValue = implode(', ', $option_value);
78
+ }else {
79
+ $optionValue = $option_value;
80
+ }
81
+ }else {
82
+ $optionValue = "";
83
+ }
84
+
85
+ return $optionValue;
86
+ case 'action':
87
+ $delete_nonce = wp_create_nonce( 'wf_delete_option' );
88
+
89
+ return sprintf(
90
+ '<a val="?page=%s&action=%s&option=%s&_wpnonce=%s" class="button single-option-delete" style="cursor: pointer;">' . __(
91
+ 'Delete',
92
+ 'woo-feed'
93
+ ) . '</a>',
94
+ esc_attr( $plugin_page ),
95
+ 'delete-option',
96
+ $item['option_id'],
97
+ $delete_nonce
98
+ );
99
+ default:
100
+ return false;
101
+ }
102
+ }
103
+
104
+
105
+ /** ************************************************************************
106
+ * Recommended. This is a custom column method and is responsible for what
107
+ * is rendered in any column with a name/slug of 'title'. Every time the class
108
+ * needs to render a column, it first looks for a method named
109
+ * column_{$column_title} - if it exists, that method is run. If it doesn't
110
+ * exist, column_default() is called instead.
111
+ *
112
+ * This example also illustrates how to implement rollover actions. Actions
113
+ * should be an associative array formatted as 'slug'=>'link html' - and you
114
+ * will need to generate the URLs yourself. You could even ensure the links
115
+ *
116
+ * @param array $item A singular item (one full row's worth of data)
117
+ *
118
+ * @return string Text to be placed inside the column <td> (movie title only)
119
+ * *************************************************************************@see WP_List_Table::::single_row_columns()
120
+ */
121
+ function column_option_name( $item ) {
122
+ global $plugin_page;
123
+ $delete_nonce = wp_create_nonce( 'wf_delete_option' );
124
+ $newName = str_replace( 'wf_option_', '', $item['option_name'] );
125
+ $title = '<strong>' . $newName . '</strong>';
126
+ $actions = array(
127
+ 'delete' => sprintf(
128
+ '<a val="?page=%s&action=%s&option=%s&_wpnonce=%s" class="single-option-delete" style="cursor: pointer;">' . __(
129
+ 'Delete',
130
+ 'woo-feed'
131
+ ) . '</a>',
132
+ esc_attr( $plugin_page ),
133
+ 'delete-option',
134
+ $item['option_id'],
135
+ $delete_nonce
136
+ ),
137
+ );
138
+
139
+ // Return the title contents
140
+
141
+ return sprintf(
142
+ '%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
143
+ /*$1%s*/
144
+ $title,
145
+ /*$2%s*/
146
+ $item['option_id'],
147
+ /*$3%s*/
148
+ $this->row_actions( $actions )
149
+ );
150
+ }
151
+
152
+ public static function get_mappings() {
153
+
154
+ $result = get_option( 'wpfp_option' );
155
+
156
+ return ( $result ) ? $result : array();
157
+ }
158
+
159
+ /**
160
+ * Delete a contact record.
161
+ *
162
+ * @param int $id customer ID
163
+ *
164
+ * @return false|int
165
+ */
166
+ public static function delete_option( $id ) {
167
+ $options = get_option( 'wpfp_option' );
168
+ unset( $options[ $id ] );
169
+
170
+ return update_option( 'wpfp_option', $options, false );
171
+ }
172
+
173
+ /**
174
+ * Returns the count of records in the database.
175
+ *
176
+ * @return null|string
177
+ */
178
+ public static function record_count() {
179
+
180
+ return count( get_option( 'wpfp_option' ) );
181
+ }
182
+
183
+ /** Text displayed when no contact data is available */
184
+ public function no_items() {
185
+ esc_html_e( 'No option saved.', 'woo-feed' );
186
+ }
187
+
188
+
189
+ /** ************************************************************************
190
+ * REQUIRED if displaying checkboxes or using bulk actions! The 'cb' column
191
+ * is given special treatment when columns are processed. It ALWAYS needs to
192
+ * have it's own method.
193
+ *
194
+ * @param array $item A singular item (one full row's worth of data)
195
+ *
196
+ * @return string Text to be placed inside the column <td> (movie title only)
197
+ * *************************************************************************@see WP_List_Table::::single_row_columns()
198
+ */
199
+ function column_cb( $item ) {
200
+ return sprintf(
201
+ '<input type="checkbox" name="%1$s[]" value="%2$s" />',
202
+ /*$1%s*/
203
+ $this->_args['singular'], // Let's simply repurpose the table's singular label ("movie")
204
+ /*$2%s*/
205
+ $item['option_id'] // The value of the checkbox should be the record's id
206
+ );
207
+ }
208
+
209
+
210
+ function column_name( $item ) {
211
+ global $plugin_page;
212
+ $delete_nonce = wp_create_nonce( 'wf_delete_option' );
213
+ $title = '<strong>' . $item['option_name'] . '</strong>';
214
+ $actions = array(
215
+ 'delete' => sprintf(
216
+ '<a val="?page=%s&action=%s&option=%s&_wpnonce=%s" class="single-option-delete" style="cursor: pointer;">' . __(
217
+ 'Delete',
218
+ 'woo-feed'
219
+ ) . '</a>',
220
+ esc_attr( $plugin_page ),
221
+ 'delete-option',
222
+ $item['option_id'],
223
+ $delete_nonce
224
+ ),
225
+ );
226
+
227
+ return $title . $this->row_actions( $actions );
228
+ }
229
+
230
+ /** ************************************************************************
231
+ * REQUIRED! This method dictates the table's columns and titles. This should
232
+ * return an array where the key is the column slug (and class) and the value
233
+ * is the column's title text. If you need a checkbox for bulk actions, refer
234
+ * to the $columns array below.
235
+ *
236
+ * The 'cb' column is treated differently than the rest. If including a checkbox
237
+ * column in your table you must create a column_cb() method. If you don't need
238
+ * bulk actions or checkboxes, simply leave the 'cb' entry out of your array.
239
+ *
240
+ * @return array An associative array containing column information: 'slugs'=>'Visible Titles'
241
+ * *************************************************************************@see WP_List_Table::::single_row_columns()
242
+ */
243
+ function get_columns() {
244
+ $columns = array(
245
+ 'cb' => '<input type="checkbox" />', // Render a checkbox instead of text
246
+ 'option_name' => __( 'Option Name', 'woo-feed' ),
247
+ 'option_value' => __( 'Option Value', 'woo-feed' ),
248
+ 'action' => __( 'Action', 'woo-feed' ),
249
+ );
250
+
251
+ return $columns;
252
+ }
253
+
254
+
255
+ /** ************************************************************************
256
+ * Optional. If you want one or more columns to be sortable (ASC/DESC toggle),
257
+ * you will need to register it here. This should return an array where the
258
+ * key is the column that needs to be sortable, and the value is db column to
259
+ * sort by. Often, the key and value will be the same, but this is not always
260
+ * the case (as the value is a column name from the database, not the list table).
261
+ *
262
+ * This method merely defines which columns should be sortable and makes them
263
+ * clickable - it does not handle the actual sorting. You still need to detect
264
+ * the ORDERBY and ORDER querystring variables within prepare_items() and sort
265
+ * your data accordingly (usually by modifying your query).
266
+ *
267
+ * @return array An associative array containing all the columns that should be sortable: 'slugs'=>array('data_values',bool)
268
+ **************************************************************************/
269
+ function get_sortable_columns() {
270
+ $sortable_columns = array(
271
+ 'option_name' => array( 'option_name', false ),
272
+ 'option_value' => array( 'option_value', false ),
273
+ );
274
+
275
+ return $sortable_columns;
276
+ }
277
+
278
+
279
+ /** ************************************************************************
280
+ * Optional. If you need to include bulk actions in your list table, this is
281
+ * the place to define them. Bulk actions are an associative array in the format
282
+ * 'slug'=>'Visible Title'
283
+ *
284
+ * If this method returns an empty value, no bulk action will be rendered. If
285
+ * you specify any bulk actions, the bulk actions box will be rendered with
286
+ * the table automatically on display().
287
+ *
288
+ * Also note that list tables are not automatically wrapped in <form> elements,
289
+ * so you will need to create those manually in order for bulk actions to function.
290
+ *
291
+ * @return array An associative array containing all the bulk actions: 'slugs'=>'Visible Titles'
292
+ **************************************************************************/
293
+ function get_bulk_actions() {
294
+ $actions = array(
295
+ 'bulk-delete' => __( 'Delete', 'woo-feed' ),
296
+ );
297
+
298
+ return $actions;
299
+ }
300
+
301
+
302
+ /** ************************************************************************
303
+ * Optional. You can handle your bulk actions anywhere or anyhow you prefer.
304
+ * For this example package, we will handle it in the class to keep things
305
+ * clean and organized.
306
+ *
307
+ * @see $this->prepare_items()
308
+ **************************************************************************/
309
+ public function process_bulk_action() {
310
+ // Detect when a bulk action is being triggered...
311
+ if ( 'delete-option' === $this->current_action() ) {
312
+ // In our file that handles the request, verify the nonce.
313
+ $nonce = isset( $_REQUEST['_wpnonce'] ) && ! empty( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( $_REQUEST['_wpnonce'] ) : '';
314
+ if ( ! wp_verify_nonce( $nonce, 'wf_delete_option' ) ) {
315
+ // die(_e('You do not have sufficient permission to delete!'));
316
+ update_option( 'wpf_message', esc_html__( 'Failed To Delete Option. You do not have sufficient permission to delete.', 'woo-feed' ), false );
317
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=error' ) );
318
+ die();
319
+ } else {
320
+ if ( isset( $_GET['option'] ) && self::delete_option( $_GET['option'] ) ) {
321
+ update_option( 'wpf_message', esc_html__( 'Option Deleted Successfully.', 'woo-feed' ), false );
322
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=success' ) );
323
+ die();
324
+ } else {
325
+ update_option( 'wpf_message', esc_html__( 'Failed To Delete Option.', 'woo-feed' ), false );
326
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=error' ) );
327
+ die();
328
+ }
329
+ }
330
+ }
331
+ // Detect when a bulk action is being triggered...
332
+ if ( 'edit-mapping' === $this->current_action() ) {
333
+ // In our file that handles the request, verify the nonce.
334
+ $nonce = isset( $_REQUEST['_wpnonce'] ) && ! empty( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( $_REQUEST['_wpnonce'] ) : '';
335
+ if ( ! wp_verify_nonce( $nonce, 'wf_edit_mapping' ) ) {
336
+ wp_die( esc_html__( 'You do not have sufficient permission to delete!', 'woo-feed' ) );
337
+ }
338
+ }
339
+
340
+ // If the delete bulk action is triggered
341
+ if (
342
+ (
343
+ isset( $_POST['option'] ) ) &&
344
+ (
345
+ isset( $_POST['action'] ) &&
346
+ 'bulk-delete' == $_POST['action']
347
+ ) ||
348
+ (
349
+ isset( $_POST['action2'] ) &&
350
+ 'bulk-delete' == $_POST['action2']
351
+ )
352
+ ) {
353
+ if ( 'bulk-delete' === $this->current_action() ) {
354
+ $nonce = isset( $_REQUEST['_wpnonce'] ) && ! empty( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( $_REQUEST['_wpnonce'] ) : '';
355
+ if ( ! wp_verify_nonce( $nonce, 'bulk-' . $this->_args['plural'] ) ) {
356
+ update_option( 'wpf_message', esc_html__( 'Failed To Delete Option. You do not have sufficient permission to delete.', 'woo-feed' ), false );
357
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=error' ) );
358
+ die();
359
+ } else {
360
+ // loop over the array of record IDs and delete them
361
+ $delete_ids = array_map( 'absint', $_POST['option'] );
362
+ $delete_ids = array_filter( $delete_ids );
363
+ // loop over the array of record IDs and delete them
364
+ if ( ! empty( $delete_ids ) ) {
365
+ $count = count( $delete_ids );
366
+ foreach ( $delete_ids as $id ) {
367
+ self::delete_option( $id );
368
+ }
369
+ $message = sprintf(
370
+ /* translators: 1: number of item deleted. */
371
+ esc_html( _n( '%d Option Successfully Deleted.', '%d Options Successfully Deleted.', $count, 'woo-feed' ) ),
372
+ $count
373
+ );
374
+ update_option( 'wpf_message', $message, false );
375
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=success' ) );
376
+ die();
377
+ }
378
+ }
379
+ }
380
+ }
381
+ }
382
+
383
+
384
+ /** ************************************************************************
385
+ * REQUIRED! This is where you prepare your data for display. This method will
386
+ * usually be used to query the database, sort and filter the data, and generally
387
+ * get it ready to be displayed. At a minimum, we should set $this->items and
388
+ * $this->set_pagination_args(), although the following properties and methods
389
+ * are frequently interacted with here...
390
+ *
391
+ * @global WPDB $wpdb
392
+ * @uses $this->_column_headers
393
+ * @uses $this->items
394
+ * @uses $this->get_columns()
395
+ * @uses $this->get_sortable_columns()
396
+ * @uses $this->get_pagenum()
397
+ * @uses $this->set_pagination_args()
398
+ **************************************************************************/
399
+ function prepare_items() {
400
+ /**
401
+ * First, lets decide how many records per page to show
402
+ */
403
+ $per_page = 10;
404
+
405
+ /**
406
+ * REQUIRED. Now we need to define our column headers. This includes a complete
407
+ * array of columns to be displayed (slugs & titles), a list of columns
408
+ * to keep hidden, and a list of columns that are sortable. Each of these
409
+ * can be defined in another method (as we've done here) before being
410
+ * used to build the value for our _column_headers property.
411
+ */
412
+ $columns = $this->get_columns();
413
+ $hidden = array();
414
+ $sortable = $this->get_sortable_columns();
415
+
416
+ /**
417
+ * REQUIRED. Finally, we build an array to be used by the class for column
418
+ * headers. The $this->_column_headers property takes an array which contains
419
+ * 3 other arrays. One for all columns, one for hidden columns, and one
420
+ * for sortable columns.
421
+ */
422
+ $this->_column_headers = array( $columns, $hidden, $sortable );
423
+
424
+ /**
425
+ * Optional. You can handle your bulk actions however you see fit. In this
426
+ * case, we'll handle them within our package just to keep things clean.
427
+ */
428
+ $this->process_bulk_action();
429
+
430
+ /**
431
+ * Instead of querying a database, we're going to fetch the example data
432
+ * property we created for use in this plugin. This makes this example
433
+ * package slightly different than one you might build on your own. In
434
+ * this example, we'll be using array manipulation to sort and paginate
435
+ * our data. In a real-world implementation, you will probably want to
436
+ * use sort and pagination data to build a custom query instead, as you'll
437
+ * be able to use your precisely-queried data immediately.
438
+ */
439
+ $data = $this->get_mappings();
440
+
441
+ usort( $data, 'woo_feed_usort_reorder' );
442
+
443
+ /***********************************************************************
444
+ * ---------------------------------------------------------------------
445
+ *
446
+ * In a real-world situation, this is where you would place your query.
447
+ *
448
+ * For information on making queries in WordPress, see this Codex entry:
449
+ * http://codex.wordpress.org/Class_Reference/wpdb
450
+ *
451
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
452
+ * ---------------------------------------------------------------------
453
+ */
454
+
455
+ /**
456
+ * REQUIRED for pagination. Let's figure out what page the user is currently
457
+ * looking at. We'll need this later, so you should always include it in
458
+ * your own package classes.
459
+ */
460
+ $current_page = $this->get_pagenum();
461
+
462
+ /**
463
+ * REQUIRED for pagination. Let's check how many items are in our data array.
464
+ * In real-world use, this would be the total number of items in your database,
465
+ * without filtering. We'll need this later, so you should always include it
466
+ * in your own package classes.
467
+ */
468
+ $total_items = count( $data );
469
+
470
+ /**
471
+ * The WP_List_Table class does not handle pagination for us, so we need
472
+ * to ensure that the data is trimmed to only the current page. We can use
473
+ * array_slice() to
474
+ */
475
+ $data = array_slice( $data, ( ( $current_page - 1 ) * $per_page ), $per_page );
476
+
477
+ /**
478
+ * REQUIRED. We also have to register our pagination options & calculations.
479
+ */
480
+ $this->set_pagination_args(
481
+ array(
482
+ 'total_items' => $total_items, // WE have to calculate the total number of items
483
+ 'per_page' => $per_page, // WE have to determine how many items to show on a page
484
+ 'total_pages' => ceil( $total_items / $per_page ), // WE have to calculate the total number of pages
485
+ )
486
+ );
487
+
488
+ // $this->set_pagination_args( array(
489
+ // 'total_items' => $total_items, //WE have to calculate the total number of items
490
+ // 'per_page' => $per_page //WE have to determine how many items to show on a page
491
+ // ) );
492
+
493
+ /**
494
+ * REQUIRED. Now we can add our *sorted* data to the items property, where
495
+ * it can be used by the rest of the class.
496
+ */
497
+ $this->items = $data;
498
+ }
499
+
500
+
501
+ }
admin/images/woo-feed-lite.svg CHANGED
@@ -1,33 +1,83 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="123px" height="25px" viewBox="0 0 123 25" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
4
- <title>Group 2</title>
5
- <desc>Created with Sketch.</desc>
6
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7
- <g id="Group-2" fill-rule="nonzero">
8
- <g id="logo-pro-copy">
9
- <g id="Group">
10
- <g id="file-icon-copy">
11
- <path d="M2.20818849,1 L15.1239861,1 C16.7123647,1 18,2.34876897 18,4.01255981 L18,22.0741627 C18,23.1377733 17.1768542,24 16.1614523,24 L2.72692159,24 C1.77316913,24 1,23.1901227 1,22.1910885 L1,2.24491627 C1.0107551,1.55404342 1.54854215,1 2.20818849,1 Z" id="Path" fill="#0088F7"></path>
12
- <path d="M18,5 L16.0032415,5 C14.8968818,5 14,4.10311823 14,2.99675851 L14,1 C16.2076588,1.00356938 17.9964306,2.79234118 18,5 Z" id="Path" fill="#FFFFFF"></path>
13
- <path d="M12.4217157,4 L7.60622285,4 C7.29791524,4.03394393 7.06370343,4.30873772 7.06370343,4.63652199 C7.06370343,4.96430626 7.29791524,5.23910005 7.60622285,5.27304398 L12.4217157,5.27304398 C12.7300234,5.23910005 12.9642352,4.96430626 12.9642352,4.63652199 C12.9642352,4.30873772 12.7300234,4.03394393 12.4217157,4 Z M14.8489845,15.870275 C14.7061086,15.7236907 14.5036756,15.6617927 14.3088684,15.7051233 C14.2698238,15.7051233 14.2307793,15.7051233 14.1852273,15.7464112 L14.087616,15.8083431 C14.051391,15.8306043 14.0184947,15.8584334 13.9900046,15.8909189 C13.8699366,16.0043604 13.8032723,16.1680088 13.8077968,16.3382047 C13.8077968,16.3794926 13.8077968,16.4207805 13.8077968,16.4689497 C13.8077968,16.5171189 13.8077968,16.5515255 13.8468413,16.5996948 C13.8858859,16.647864 13.8858859,16.6616266 13.9054082,16.7029146 C13.928525,16.7416341 13.9570463,16.7764341 13.9900046,16.8061343 C14.0967407,16.9338939 14.2518661,17.0045566 14.4129871,16.9988113 C14.574225,17.010968 14.7289016,16.9291861 14.8164473,16.7854904 C14.8487882,16.7569993 14.8753497,16.7218897 14.8945364,16.6822706 C14.9183677,16.6508117 14.9380683,16.6160908 14.9531032,16.5790508 C14.9758471,16.5394118 14.9892388,16.4945683 14.9921478,16.4483058 C15.0026174,16.4054272 15.0026174,16.3604393 14.9921478,16.3175607 C15.0028863,16.1542231 14.951328,15.9931395 14.8489845,15.870275 L14.8489845,15.870275 Z M11.4000504,15.7257673 L5.60193661,15.7257673 C5.2694962,15.7257673 5,16.0107479 5,16.3622893 C5,16.7138307 5.2694962,16.9988113 5.60193661,16.9988113 L11.4000504,16.9988113 C11.7324908,16.9988113 12.001987,16.7138307 12.001987,16.3622893 C12.001987,16.0107479 11.7324908,15.7257673 11.4000504,15.7257673 L11.4000504,15.7257673 Z M14.4064797,13.0833409 L5.60193661,13.0833409 C5.29362901,13.1172848 5.0594172,13.3920786 5.0594172,13.7198628 C5.0594172,14.0476471 5.29362901,14.3224409 5.60193661,14.3563848 L14.426002,14.3563848 C14.7343096,14.3224409 14.9685214,14.0476471 14.9685214,13.7198628 C14.9685214,13.3920786 14.7343096,13.1172848 14.426002,13.0833409 L14.4064797,13.0833409 Z M14.4064797,10.3652199 L5.60193661,10.3652199 C5.29362901,10.3991638 5.0594172,10.6739576 5.0594172,11.0017419 C5.0594172,11.3295262 5.29362901,11.60432 5.60193661,11.6382639 L14.426002,11.6382639 C14.7343096,11.60432 14.9685214,11.3295262 14.9685214,11.0017419 C14.9685214,10.6739576 14.7343096,10.3991638 14.426002,10.3652199 L14.4064797,10.3652199 Z" id="Shape" fill="#FFFFFF"></path>
14
- <path d="M16.2426925,5.57810754 L18.3500005,5.57810754 C18.601712,5.56822361 18.8277555,5.41765557 18.9384047,5.18617025 C18.9792645,5.10627795 19.0004043,5.01737599 19,4.92721169 L19,4.87821953 C18.9728063,3.84759771 18.6359663,2.85054994 18.0352727,2.02267642 L18.0352727,1.97368426 L17.9189602,1.82670777 L17.9189602,1.82670777 C17.8231735,1.70772681 17.713703,1.58874585 17.6042324,1.46976488 C16.7032947,0.529537129 15.4703317,0 14.1832778,0 L2.73676369,0 C1.23327049,0 0.0112761984,1.24061154 0,2.77855548 L0,22.2004479 C0,23.775196 1.24522748,25 2.31940723,25 L15.7774427,25 C17.6110743,25 18.9384047,23.8171893 18.9384047,22.2004479 L18.9384047,14.7396417 L18.9384047,7.74076151 C18.9402293,7.57184262 18.8763762,7.40910183 18.7608945,7.28834549 C18.6454127,7.16758914 18.4877635,7.09871059 18.3226329,7.09686454 L18.3226329,7.09686454 C18.1551303,7.09497104 17.993948,7.16220179 17.8754986,7.28336879 C17.7570491,7.40453579 17.6913262,7.56941596 17.6931772,7.74076151 L17.6931772,14.7396417 L17.6931772,22.1934491 C17.6931772,23.0963046 16.9337253,23.6982083 15.7979684,23.6982083 L2.31940723,23.6982083 C1.67977578,23.4926422 1.25016606,22.8791019 1.26575321,22.1934491 L1.26575321,2.77855548 C1.26392323,2.37889758 1.41831653,1.99506757 1.69458219,1.71246366 C1.97084786,1.42985975 2.34606932,1.27192428 2.73676369,1.27379624 L13.4990869,1.27379624 L13.4990869,2.77855548 C13.4990846,3.52225707 13.7883604,4.23539681 14.3030839,4.76061632 C14.8178074,5.28583583 15.5156729,5.5799668 16.2426925,5.57810754 Z M16.2426925,4.28331471 C15.8508165,4.28706575 15.4738263,4.12996031 15.1960738,3.84715082 C14.9183213,3.56434134 14.7629917,3.17943523 14.7648078,2.77855548 L14.7648078,1.33678616 C16.2367884,1.60594277 17.3890058,2.78459504 17.6521258,4.29031359 L16.2426925,4.28331471 Z" id="Shape" fill="#2E3B50"></path>
15
- </g>
16
- <g id="text-copy" transform="translate(25.000000, 5.000000)">
17
- <path d="M9.02369668,2.46990881 C9.2107425,3.14427558 9.41295419,3.84761905 9.63033175,4.57993921 C9.84770932,5.31225937 10.0701422,6.04457953 10.2976303,6.7768997 C10.5301738,7.50921986 10.7601896,8.22836879 10.9876777,8.9343465 C11.2151659,9.64032421 11.4375987,10.3067882 11.6549763,10.9337386 C11.8369668,10.2593718 12.0139021,9.52705167 12.185782,8.73677812 C12.3576619,7.94650456 12.5295419,7.12198582 12.7014218,6.26322188 C12.8733017,5.40972644 13.042654,4.53779129 13.2094787,3.64741641 C13.3763033,2.75704154 13.5279621,1.8745694 13.664455,1 L16,1 C15.5703002,3.34974671 15.0951027,5.60729483 14.5744076,7.77264438 C14.0537125,9.93799392 13.4698262,12.0058764 12.8227488,13.9762918 L10.6464455,13.9762918 C9.72638231,11.4684904 8.83917852,8.72360689 7.98483412,5.74164134 C7.53491311,7.25369807 7.07993681,8.6893617 6.61990521,10.0486322 C6.15987362,11.4079027 5.69731438,12.7250253 5.23222749,14 L3.06350711,14 C2.42654028,12.0243161 1.85781991,9.95116515 1.35734597,7.78054711 C0.856872038,5.60992908 0.404423381,3.34974671 0,1 L2.40379147,1 C2.54533965,1.84822695 2.69447077,2.71752786 2.85118483,3.60790274 C3.00789889,4.49827761 3.17219589,5.37021277 3.34407583,6.22370821 C3.51595577,7.08247214 3.69036335,7.91225937 3.86729858,8.71306991 C4.04423381,9.51388045 4.22116904,10.2514691 4.39810427,10.9258359 C4.63064771,10.2883485 4.86319115,9.61661601 5.0957346,8.9106383 C5.32827804,8.20466059 5.56082148,7.4881459 5.79336493,6.76109422 C6.02590837,6.02877406 6.24834123,5.30172239 6.46066351,4.57993921 C6.67298578,3.85815603 6.87014218,3.16008105 7.0521327,2.48571429 L9.02369668,2.46990881 Z" id="Path" fill="#2E3B50"></path>
18
- <path d="M26.9996531,8.47024937 C27.0074002,9.24137774 26.885323,10.0082129 26.6386532,10.737891 C26.4183769,11.3854613 26.0698643,11.9807813 25.6144208,12.4874572 C25.1707559,12.9715337 24.6297019,13.3538098 24.0277001,13.6085384 C23.3812481,13.8785504 22.6869098,14.0115185 21.9876306,13.9992183 C21.2898029,14.007172 20.5979545,13.868349 19.9559565,13.5915524 C19.354251,13.3251484 18.8160351,12.9312701 18.3776312,12.4364989 C17.9336031,11.9420954 17.5886161,11.3652334 17.3617941,10.737891 C17.1110599,10.0063108 16.9888819,9.23596797 17.0007942,8.46175633 C16.99351,7.68924891 17.1214122,6.92153209 17.3785848,6.19411471 C17.6113591,5.56394749 17.9651704,4.98664352 18.4196079,4.49550675 C18.8642722,4.0146967 19.4052194,3.63539151 20.0063286,3.38291854 C20.6454978,3.1189924 21.3309469,2.98897514 22.021212,3.00073175 C22.7152838,2.99508464 23.4033775,3.1308387 24.0444908,3.39990462 C24.6451553,3.65262047 25.1838678,4.03526684 25.6228161,4.52098587 C26.0719328,5.0308693 26.4171431,5.62542172 26.6386532,6.27055206 C26.8822542,6.97755454 27.0043528,7.72154353 26.9996531,8.47024937 Z M24.531421,8.47024937 C24.5822345,7.59121999 24.3526877,6.71891431 23.8765838,5.98178871 C23.4278306,5.4022344 22.7405392,5.06366156 22.0128167,5.06366156 C21.2850942,5.06366156 20.5978027,5.4022344 20.1490495,5.98178871 C19.6640801,6.71586733 19.4256406,7.58840701 19.4690264,8.47024937 C19.4114356,9.36863088 19.6410211,10.2619275 20.1238635,11.0181613 C20.568813,11.60379 21.257496,11.9470101 21.9876306,11.9470101 C22.7177653,11.9470101 23.4064482,11.60379 23.8513978,11.0181613 C24.3448474,10.2625994 24.583402,9.36580325 24.531421,8.46175633 L24.531421,8.47024937 Z" id="Shape" fill="#2E3B50"></path>
19
- <path d="M37.9992565,8.49997514 C38.0052591,9.27027664 37.8803324,10.0359406 37.6298759,10.7638742 C37.3983877,11.4076815 37.0384122,11.9970095 36.5721041,12.495588 C36.1284568,12.9770623 35.5874243,13.3572835 34.9854463,13.6106428 C34.3390199,13.8792033 33.6447091,14.0114565 32.9454577,13.9992225 C32.2476577,14.0071334 31.5558367,13.8690567 30.9138642,13.593748 C30.3167471,13.3326772 29.7816246,12.9468283 29.3439965,12.4617985 C28.9034894,11.9446538 28.5696061,11.3445091 28.3617798,10.6962951 C28.1110555,9.96864757 27.9888823,9.20244585 28.0007942,8.43239606 C27.9935103,7.66404135 28.1214073,6.90045147 28.3785698,6.1769444 C28.6113348,5.55016471 28.9651321,4.9759641 29.4195516,4.48746749 C29.8641983,4.00924209 30.405124,3.6319759 31.0062094,3.38086012 C31.6453532,3.11835275 32.3307752,2.98903441 33.0210129,3.00072782 C33.7150572,2.99511106 34.4031235,3.13013536 35.0442114,3.39775489 C35.6448521,3.64911224 36.1835432,4.02970165 36.6224741,4.51280965 C37.0715729,5.01995214 37.4167696,5.61130848 37.6382709,6.25297086 C37.8885761,6.9748872 38.0107654,7.73547146 37.9992565,8.49997514 L37.9992565,8.49997514 Z M35.5311222,8.49997514 C35.5905548,7.62186647 35.3667935,6.74790114 34.8931011,6.00799671 C34.4443657,5.43155785 33.7571015,5.09480505 33.0294079,5.09480505 C32.3017143,5.09480505 31.6144501,5.43155785 31.1657147,6.00799671 C30.6807644,6.7381292 30.4423344,7.60597846 30.4857185,8.48308037 C30.42813,9.37663254 30.6577064,10.2651271 31.1405296,11.0172957 C31.5854615,11.5997763 32.2741172,11.9411514 33.0042228,11.9411514 C33.7343285,11.9411514 34.4229842,11.5997763 34.8679161,11.0172957 C35.3536877,10.2661327 35.5862271,9.37756277 35.5311222,8.48308037 L35.5311222,8.49997514 Z" id="Shape" fill="#2E3B50"></path>
20
- <polygon id="Path" fill="#0088F7" points="40 13.9684466 40.0687023 1 48 1.0473301 48 3.05097087 42.351145 3.05097087 42.2900763 6.34830097 47.3053435 6.34830097 47.3053435 8.35194175 42.2900763 8.35194175 42.2900763 14"></polygon>
21
- <path d="M49.0054054,9.54891633 C48.9931281,8.72371947 49.1293347,7.90349841 49.4068813,7.13127314 C49.6438401,6.50205059 49.9987995,5.92914093 50.4507186,5.44650437 C50.874418,4.99794323 51.3832446,4.64780662 51.9442089,4.41879542 C52.4788002,4.16944986 53.0538158,4.02935761 53.6384371,4.00602707 C54.8473249,3.93889362 56.0227721,4.43524572 56.8502442,5.36226593 C57.6882209,6.50223635 58.0918031,7.92859041 57.9824062,9.36359176 C57.9824062,9.49837327 57.9824062,9.64719451 57.9824062,9.81005549 C57.9824062,9.97291647 57.9824062,10.1217377 57.9824062,10.2565192 L51.4142607,10.2565192 C51.4215515,10.994507 51.7108168,11.6985597 52.2172125,12.210851 C52.8368925,12.7147273 53.6108485,12.9634102 54.3932118,12.91003 C54.9081338,12.9174758 55.4223195,12.8666388 55.9268497,12.7584008 C56.3025333,12.6814039 56.6707399,12.5686188 57.0268936,12.4214471 L57.3239858,14.4010504 C57.1553967,14.4851344 56.9809129,14.5555393 56.8020671,14.6116465 C56.5380564,14.6918333 56.2699899,14.7565165 55.9991154,14.8053949 C55.7154057,14.8615539 55.4076075,14.909289 55.0757208,14.9486002 C54.7396884,14.9858483 54.4018872,15.002724 54.0640016,14.9991433 C53.2852337,15.0125012 52.5112122,14.8695376 51.7836185,14.5779511 C51.1711715,14.3312964 50.6215055,13.9391677 50.177715,13.4323084 C49.7604372,12.9450715 49.4457929,12.3709908 49.2543204,11.7475396 C49.0609684,11.0331023 48.9769511,10.2909922 49.0054054,9.54891633 L49.0054054,9.54891633 Z M55.6939937,8.50435969 C55.6974617,8.18206038 55.6541414,7.86108529 55.5655214,7.55246533 C55.486599,7.26761403 55.3557042,7.00155076 55.1801045,6.76904785 C55.0100379,6.54922961 54.7962989,6.37099103 54.5538022,6.24676953 C54.277217,6.11270217 53.975171,6.04644558 53.6705552,6.05302113 C53.3493104,6.04340229 53.0303642,6.11263184 52.7391311,6.25519338 C52.4785052,6.38712229 52.2462685,6.57343657 52.0566221,6.80274323 C51.8691199,7.03182457 51.7222673,7.29430469 51.6230282,7.57773686 C51.5192832,7.86887489 51.4465748,8.17116599 51.4062312,8.47908816 L55.6939937,8.50435969 Z" id="Shape" fill="#0088F7"></path>
22
- <path d="M60.0050243,9.47310173 C59.9927794,8.64790487 60.1286279,7.82768382 60.4054449,7.05545855 C60.6417808,6.426236 60.9958071,5.85332633 61.4465382,5.37068977 C61.8691239,4.92212864 62.3766129,4.57199203 62.9361026,4.34298082 C63.4816487,4.11649258 64.0634138,4.00211054 64.6499024,4.00602707 C65.8556124,3.93889362 67.0279697,4.43524572 67.8532666,5.36226593 C68.6890404,6.50223635 69.0915617,7.92859041 68.9824525,9.36359176 C68.9824525,9.49837327 68.9824525,9.64719451 68.9824525,9.81005549 C68.9824525,9.97853237 68.9824525,10.1301616 68.9824525,10.2565192 L62.4315727,10.2565192 C62.4388443,10.994507 62.7273492,11.6985597 63.2324138,12.210851 C63.8504648,12.7147273 64.6223863,12.9634102 65.402693,12.91003 C65.9162639,12.9175414 66.4291047,12.8667037 66.9322994,12.7584008 C67.3069955,12.6814039 67.6742341,12.5686188 68.0294516,12.4214471 L68.3257628,14.4010504 C68.1576293,14.4851649 67.9836019,14.5555707 67.8052161,14.6116465 C67.5418828,14.6917659 67.2745246,14.7564482 67.0043751,14.8053949 C66.7214113,14.8615539 66.4144222,14.909289 66.0834079,14.9486002 C65.7482601,14.985867 65.411346,15.0027428 65.0743482,14.9991433 C64.2976275,15.0125012 63.5256406,14.8695376 62.7999596,14.5779511 C62.1891225,14.3312964 61.6409015,13.9391677 61.1982775,13.4323084 C60.7822919,12.9449228 60.4684998,12.3708881 60.2773103,11.7475396 C60.0686341,11.0102194 59.9766449,10.2418219 60.0050243,9.47310173 Z M66.6760303,8.4285451 C66.6792414,8.10626272 66.6360402,7.78532678 66.5478957,7.47665074 C66.4689918,7.19187879 66.3384591,6.9258522 66.163492,6.69323326 C65.9938724,6.47341502 65.7806953,6.29517643 65.538836,6.17095494 C65.2629778,6.03688757 64.9617259,5.97063099 64.6579108,5.97720653 C64.3375105,5.9675877 64.0194027,6.03681724 63.7289352,6.17937878 C63.4689944,6.3113077 63.2373682,6.49762197 63.0482203,6.72692863 C62.8612109,6.95600997 62.7147444,7.21849009 62.6157662,7.50192227 C62.5122939,7.7930603 62.4397767,8.0953514 62.3995391,8.40327356 L66.6760303,8.4285451 Z" id="Shape" fill="#0088F7"></path>
23
- <path d="M78.9519219,13.5051782 C78.3862429,13.6547831 77.8107644,13.7698782 77.2291217,13.8497363 C76.5082085,13.9552705 75.7792523,14.0053743 75.0495792,13.9995442 C74.3298235,14.005418 73.6151833,13.8860363 72.9421539,13.6474957 C72.3379434,13.4368504 71.7907808,13.1043915 71.3395491,12.6737446 C70.8974095,12.2452579 70.5562049,11.7349374 70.3379211,11.1756661 C70.0999147,10.5277398 69.9859883,9.84565938 70.0013741,9.1607504 C69.9956862,8.48364594 70.0983188,7.8095509 70.305869,7.16081552 C70.4890015,6.61270899 70.7857852,6.10366927 71.1792886,5.66273696 C71.5541354,5.21392394 72.0374419,4.85455041 72.5895808,4.61408197 C73.1841814,4.37690263 73.8263689,4.26195113 74.4726415,4.27701429 C74.9037576,4.27207957 75.3332267,4.32762721 75.7467123,4.44180294 C76.0727361,4.53503689 76.3891777,4.65536331 76.6922491,4.80134179 L76.6922491,0.307106105 L79,0 L78.9519219,13.5051782 Z M72.3812422,9.08584648 C72.3214361,9.88959129 72.5715928,10.686776 73.0863883,11.3329643 C73.5775864,11.8783651 74.3116281,12.1799459 75.0736182,12.1494171 C75.3866427,12.1542194 75.6996971,12.1417136 76.0111421,12.1119652 C76.226472,12.0898337 76.440437,12.0573321 76.652184,12.0145901 L76.652184,6.68143038 C76.4024939,6.52834302 76.1333047,6.40504336 75.8508816,6.31440114 C75.5063502,6.1992465 75.1430269,6.14095243 74.7771364,6.1421221 C74.0577886,6.08414974 73.3585015,6.38256782 72.9341408,6.92861335 C72.525183,7.58057088 72.3327361,8.33143666 72.3812422,9.08584648 L72.3812422,9.08584648 Z" id="Shape" fill="#0088F7"></path>
24
- </g>
25
- </g>
26
- <g id="Group-2" transform="translate(107.000000, 0.000000)" fill="#0088F7">
27
- <rect id="Rectangle" x="0" y="0" width="16" height="8" rx="2"></rect>
28
- </g>
29
- </g>
30
- <path d="M112.4192,6.05600008 L112.4192,5.36480007 L110.9024,5.36480007 L110.9024,1.53760001 L110,1.53760001 L110,6.05600008 L112.4192,6.05600008 Z M113.4112,1.97920001 C113.5776,1.97920001 113.712,1.93333335 113.8144,1.84160001 C113.9168,1.74986668 113.968,1.63360001 113.968,1.49280001 C113.968,1.34773334 113.9168,1.22933334 113.8144,1.1376 C113.712,1.04586667 113.5776,1 113.4112,1 C113.2448,1 113.1104,1.04586667 113.008,1.1376 C112.9056,1.22933334 112.8544,1.34773334 112.8544,1.49280001 C112.8544,1.63360001 112.9056,1.74986668 113.008,1.84160001 C113.1104,1.93333335 113.2448,1.97920001 113.4112,1.97920001 Z M113.8592,6.05600008 L113.8592,2.51040002 L112.9568,2.51040002 L112.9568,6.05600008 L113.8592,6.05600008 Z M116.5728,6.05600008 L116.5728,5.28160006 L116.2208,5.28160006 C116.058667,5.28160006 115.943467,5.24746673 115.8752,5.17920006 C115.806933,5.11093339 115.7728,4.99146673 115.7728,4.82080006 L115.7728,4.82080006 L115.7728,3.27200003 L116.5664,3.27200003 L116.5664,2.51040002 L115.7728,2.51040002 L115.7728,1.63360001 L114.8704,1.63360001 L114.8704,2.51040002 L114.3776,2.51040002 L114.3776,3.27200003 L114.8704,3.27200003 L114.8704,4.80800006 C114.8704,5.25600006 114.976,5.57600007 115.1872,5.76800007 C115.3984,5.96000007 115.7024,6.05600008 116.0992,6.05600008 L116.0992,6.05600008 L116.5728,6.05600008 Z M118.8128,6.10080008 C119.1072,6.10080008 119.374933,6.04533341 119.616,5.93440007 C119.857067,5.82346674 120.0544,5.66986674 120.208,5.47360007 C120.3616,5.2773334 120.461867,5.05546673 120.5088,4.80800006 L120.5088,4.80800006 L119.5552,4.80800006 C119.5168,4.98293339 119.428267,5.12160006 119.2896,5.22400006 C119.150933,5.32640006 118.977067,5.37760007 118.768,5.37760007 C118.533333,5.37760007 118.337067,5.3029334 118.1792,5.15360006 C118.021333,5.00426673 117.936,4.77173339 117.9232,4.45600005 L117.9232,4.45600005 L120.5216,4.45600005 C120.542933,4.34080005 120.5536,4.23840005 120.5536,4.14880005 C120.5536,3.82453338 120.482133,3.5354667 120.3392,3.28160003 C120.196267,3.02773336 119.9936,2.82826669 119.7312,2.68320003 C119.4688,2.53813336 119.162667,2.46560002 118.8128,2.46560002 C118.4672,2.46560002 118.16,2.53813336 117.8912,2.68320003 C117.6224,2.82826669 117.413333,3.03840003 117.264,3.31360003 C117.114667,3.58880004 117.04,3.91200004 117.04,4.28320005 C117.04,4.65440005 117.114667,4.97653339 117.264,5.24960006 C117.413333,5.52266673 117.6224,5.73280007 117.8912,5.88000007 C118.16,6.02720007 118.4672,6.10080008 118.8128,6.10080008 Z M119.6448,4.05920005 L117.9232,4.05920005 C117.940267,3.76906671 118.032,3.54933337 118.1984,3.40000004 C118.3648,3.2506667 118.5696,3.17600003 118.8128,3.17600003 C119.051733,3.17600003 119.253333,3.2506667 119.4176,3.40000004 C119.581867,3.54933337 119.6576,3.76906671 119.6448,4.05920005 L119.6448,4.05920005 Z" id="Lite" fill="#FFFFFF"></path>
31
- </g>
32
- </g>
33
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 106.3 25" style="enable-background:new 0 0 106.3 25;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#0088F7;}
7
+ .st1{fill:#FFFFFF;}
8
+ .st2{fill:#2F3C50;}
9
+ .st3{fill:#488EFF;}
10
+ </style>
11
+ <desc>Created with Sketch.</desc>
12
+ <g id="Group-2" transform="translate(107.000000, 0.000000)">
13
+ <path id="Rectangle" class="st0" d="M-15.4,0H-2c0.7,0,1.3,0.6,1.3,1.3v5.4C-0.7,7.4-1.3,8-2,8h-13.4c-0.7,0-1.3-0.6-1.3-1.3V1.3
14
+ C-16.7,0.6-16.1,0-15.4,0z"/>
15
+ </g>
16
+ <path id="Lite" class="st1" d="M95.7,6.1V5.4h-1.5V1.5h-0.9v4.5H95.7z M96.7,2c0.2,0,0.3,0,0.4-0.1s0.2-0.2,0.2-0.3
17
+ c0-0.1-0.1-0.3-0.2-0.4C97,1,96.9,1,96.7,1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.1,0.1,0.3,0.2,0.3
18
+ C96.4,1.9,96.5,2,96.7,2z M97.1,6.1V2.5h-0.9v3.5H97.1z M99.9,6.1V5.3h-0.4c-0.2,0-0.3,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4l0,0V3.3
19
+ h0.8V2.5h-0.8V1.6h-0.9v0.9h-0.5v0.8h0.5v1.5c0,0.4,0.1,0.8,0.3,1C98.7,6,99,6.1,99.4,6.1l0,0H99.9z M102.1,6.1
20
+ c0.3,0,0.6-0.1,0.8-0.2s0.4-0.3,0.6-0.5s0.3-0.4,0.3-0.7l0,0h-1c0,0.2-0.1,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.2
21
+ c-0.2,0-0.4-0.1-0.6-0.2c-0.2-0.1-0.2-0.4-0.3-0.7l0,0h2.6c0-0.1,0-0.2,0-0.3c0-0.3-0.1-0.6-0.2-0.9c-0.1-0.3-0.3-0.5-0.6-0.6
22
+ c-0.3-0.1-0.6-0.2-0.9-0.2c-0.3,0-0.7,0.1-0.9,0.2c-0.3,0.1-0.5,0.4-0.6,0.6s-0.2,0.6-0.2,1c0,0.4,0.1,0.7,0.2,1
23
+ c0.1,0.3,0.4,0.5,0.6,0.6C101.4,6,101.8,6.1,102.1,6.1z M102.9,4.1h-1.7c0-0.3,0.1-0.5,0.3-0.7c0.2-0.1,0.4-0.2,0.6-0.2
24
+ c0.2,0,0.4,0.1,0.6,0.2C102.9,3.5,102.9,3.8,102.9,4.1L102.9,4.1z"/>
25
+ <g>
26
+ <g>
27
+ <path class="st2" d="M30,18.4c-1.7,0-3-0.5-3.8-1.4c-0.9-0.9-1.3-2.3-1.3-4c0-0.8,0.1-1.6,0.4-2.3c0.3-0.7,0.6-1.3,1.1-1.7
28
+ c0.5-0.5,1-0.8,1.7-1c0.6-0.2,1.3-0.3,2.1-0.3c0.4,0,0.8,0,1.2,0.1c0.3,0.1,0.7,0.1,1,0.2c0.3,0.1,0.5,0.1,0.7,0.3
29
+ c0.2,0.1,0.3,0.1,0.4,0.2l-0.7,1.9c-0.3-0.1-0.7-0.3-1.1-0.4c-0.4-0.1-0.9-0.2-1.5-0.2c-0.3,0-0.7,0.1-1,0.2s-0.6,0.3-0.9,0.6
30
+ c-0.3,0.3-0.5,0.6-0.6,1s-0.2,0.9-0.2,1.5c0,0.5,0.1,0.9,0.1,1.3c0.1,0.4,0.3,0.8,0.5,1c0.2,0.3,0.6,0.6,0.9,0.7
31
+ c0.3,0.2,0.8,0.3,1.4,0.3c0.3,0,0.6,0,0.9-0.1c0.3-0.1,0.5-0.1,0.7-0.1c0.2-0.1,0.4-0.1,0.6-0.2c0.1-0.1,0.3-0.1,0.4-0.2l0.6,1.9
32
+ c-0.3,0.2-0.8,0.3-1.4,0.6C31.5,18.3,30.8,18.4,30,18.4z"/>
33
+ <path class="st2" d="M43,7.8v2h-3.1v8.3h-2.4V9.9h-3.1v-2C34.4,7.8,43,7.8,43,7.8z"/>
34
+ <path class="st2" d="M50.8,18.2c-0.3-0.6-0.6-1.2-1-1.7c-0.3-0.6-0.8-1.1-1.2-1.5c-0.1,0.1-0.3,0.3-0.6,0.6s-0.4,0.6-0.6,0.9
35
+ c-0.2,0.3-0.4,0.6-0.6,1c-0.2,0.3-0.3,0.6-0.4,0.8h-2.6c0.4-0.8,1-1.7,1.5-2.5c0.6-0.8,1.3-1.8,2-2.7l-3.4-5.1h2.8l1.9,3l2-3h2.6
36
+ l-3.3,5c0.9,1.1,1.6,2.1,2.2,3.1c0.6,0.9,1,1.7,1.3,2.3L50.8,18.2L50.8,18.2z"/>
37
+ <path class="st3" d="M54.9,18.2V7.8h6.9v1.9h-4.6v2.2h4.1v1.9h-4.1v4.2L54.9,18.2L54.9,18.2z"/>
38
+ <path class="st3" d="M62.8,14.3c0-0.7,0.1-1.3,0.3-1.8c0.2-0.6,0.5-1,0.8-1.3c0.3-0.3,0.8-0.6,1.2-0.8c0.5-0.2,0.9-0.3,1.4-0.3
39
+ c1.1,0,2,0.3,2.6,1c0.6,0.7,1,1.7,1,3c0,0.1,0,0.3,0,0.4s0,0.3,0,0.4h-5.1c0.1,0.5,0.3,0.8,0.6,1.1c0.3,0.3,0.9,0.4,1.5,0.4
40
+ c0.4,0,0.8-0.1,1.2-0.1c0.4-0.1,0.7-0.1,1-0.3l0.3,1.8c-0.1,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.7,0.1
41
+ c-0.3,0.1-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1c-0.7,0-1.3-0.1-1.9-0.3c-0.6-0.2-1-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3
42
+ C62.9,15.4,62.8,14.9,62.8,14.3z M68.1,13.5c0-0.2-0.1-0.3-0.1-0.6c-0.1-0.2-0.1-0.3-0.3-0.5s-0.3-0.3-0.4-0.3
43
+ c-0.2-0.1-0.4-0.1-0.6-0.1c-0.3,0-0.5,0.1-0.6,0.1c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.5c-0.1,0.2-0.1,0.3-0.1,0.6
44
+ H68.1z"/>
45
+ <path class="st3" d="M71.5,14.3c0-0.7,0.1-1.3,0.3-1.8c0.2-0.6,0.5-1,0.8-1.3c0.3-0.3,0.8-0.6,1.2-0.8c0.5-0.2,0.9-0.3,1.4-0.3
46
+ c1.1,0,2,0.3,2.6,1c0.6,0.7,1,1.7,1,3c0,0.1,0,0.3,0,0.4s0,0.3,0,0.4h-5.1c0.1,0.5,0.3,0.8,0.6,1.1c0.3,0.3,0.9,0.4,1.5,0.4
47
+ c0.4,0,0.8-0.1,1.2-0.1c0.4-0.1,0.7-0.1,1-0.3l0.3,1.8c-0.1,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.7,0.1
48
+ c-0.3,0.1-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1c-0.7,0-1.3-0.1-1.9-0.3c-0.6-0.2-1-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3
49
+ C71.6,15.4,71.5,14.9,71.5,14.3z M76.7,13.5c0-0.2-0.1-0.3-0.1-0.6c-0.1-0.2-0.1-0.3-0.3-0.5c-0.1-0.1-0.3-0.3-0.4-0.3
50
+ c-0.2-0.1-0.4-0.1-0.6-0.1c-0.3,0-0.5,0.1-0.6,0.1c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.5c-0.1,0.2-0.1,0.3-0.1,0.6
51
+ H76.7z"/>
52
+ <path class="st3" d="M87.5,17.9c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0.1-0.6,0.1-0.8,0.1s-0.6,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1
53
+ c-0.6,0-1.3-0.1-1.7-0.3c-0.5-0.2-0.9-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3c-0.2-0.5-0.3-1-0.3-1.7s0.1-1.2,0.2-1.7
54
+ c0.1-0.5,0.4-1,0.7-1.3s0.7-0.6,1.1-0.8c0.4-0.2,0.9-0.3,1.5-0.3c0.3,0,0.6,0,0.8,0.1c0.3,0.1,0.5,0.1,0.8,0.3V6.9l2.2-0.3
55
+ L87.5,17.9L87.5,17.9z M82.5,14.2c0,0.7,0.1,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.4,0.6c0.2,0,0.4,0,0.6,0c0.1,0,0.3,0,0.4-0.1v-4
56
+ c-0.1-0.1-0.3-0.1-0.6-0.2c-0.2-0.1-0.4-0.1-0.7-0.1C83.1,12.1,82.5,12.8,82.5,14.2z"/>
57
+ </g>
58
+ </g>
59
+ <g>
60
+ <path class="st3" d="M1.9,0.8h13.7c0.8,0,1.6,0.3,2.2,0.9c0.6,0.6,0.9,1.4,0.9,2.2v18.3c0,0.5-0.2,1-0.6,1.4
61
+ c-0.3,0.3-0.8,0.6-1.4,0.6H2.5c-0.5,0-1-0.2-1.3-0.6c-0.3-0.3-0.6-0.8-0.6-1.3V2.1c0-0.3,0.1-0.7,0.4-0.9C1.3,1,1.6,0.8,1.9,0.8
62
+ L1.9,0.8z"/>
63
+ <path class="st1" d="M18.8,4.9h-2.2c-0.6,0-1.1-0.2-1.5-0.6s-0.6-1-0.6-1.5V0.6c1.1,0,2.2,0.5,3.1,1.2C18.3,2.7,18.8,3.8,18.8,4.9
64
+ L18.8,4.9z"/>
65
+ <path class="st1" d="M12.3,4.3H7.1c-0.1,0-0.3,0.1-0.4,0.2C6.6,4.7,6.5,4.8,6.5,4.9s0.1,0.3,0.1,0.4c0.1,0.1,0.3,0.2,0.4,0.2h5.2
66
+ c0.1,0,0.3-0.1,0.4-0.2s0.1-0.3,0.1-0.4s-0.1-0.3-0.1-0.4C12.6,4.4,12.4,4.3,12.3,4.3z M11.2,16.3H4.9c-0.1,0-0.3,0.1-0.5,0.2
67
+ c-0.1,0.1-0.2,0.3-0.2,0.5c0,0.1,0.1,0.3,0.2,0.5s0.3,0.2,0.5,0.2h6.2c0.1,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5
68
+ c0-0.1-0.1-0.3-0.2-0.5C11.5,16.3,11.4,16.3,11.2,16.3z M14.4,13.5H4.9c-0.1,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.1,0.3-0.1,0.4
69
+ s0.1,0.3,0.1,0.4c0.1,0.1,0.3,0.2,0.4,0.2h9.5c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.4s-0.1-0.3-0.1-0.4
70
+ C14.8,13.6,14.6,13.5,14.4,13.5L14.4,13.5z M14.4,10.8H4.9c-0.1,0-0.3,0.1-0.4,0.2s-0.1,0.3-0.1,0.4c0,0.1,0.1,0.3,0.1,0.4
71
+ C4.7,11.9,4.8,12,4.9,12h9.5c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.4S14.9,11,14.9,11C14.8,10.8,14.6,10.8,14.4,10.8
72
+ L14.4,10.8z"/>
73
+ <path class="st2" d="M16.6,5.6h2.2c0.1,0,0.3-0.1,0.3-0.1c0.1-0.1,0.2-0.1,0.3-0.3c0.1,0,0.1-0.1,0.1-0.2V4.9c0-1-0.3-2-1-2.8V1.9
74
+ l-0.1-0.1c-0.1-0.1-0.2-0.2-0.3-0.3c-0.5-0.5-1-0.8-1.6-1.1C15.8,0.1,15.1,0,14.5,0H2.8C2.1,0,1.3,0.3,0.8,0.8C0.3,1.3,0,2,0,2.8
75
+ v19.4C0,23.8,1.3,25,2.4,25h13.8c1.9,0,3.3-1.2,3.3-2.8v-7.5v-7c0-0.1,0-0.1-0.1-0.3c0-0.1-0.1-0.1-0.1-0.2C19.1,7.2,19,7.1,19,7.1
76
+ c-0.1,0-0.1-0.1-0.3-0.1l0,0c-0.1,0-0.1,0-0.3,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.1,0.2S18,7.6,18,7.7v7v7.5
77
+ c0,0.9-0.8,1.5-1.9,1.5H2.4c-0.3-0.1-0.6-0.3-0.8-0.6c-0.2-0.3-0.3-0.6-0.3-0.9V2.8c0-0.2,0.1-0.4,0.1-0.6C1.5,2,1.7,1.9,1.8,1.7
78
+ C1.9,1.6,2,1.5,2.2,1.4c0.2-0.1,0.3-0.1,0.6-0.1h11v1.5c0,0.3,0.1,0.8,0.2,1c0.1,0.3,0.3,0.6,0.6,0.9s0.6,0.5,0.9,0.6
79
+ C15.9,5.5,16.3,5.6,16.6,5.6L16.6,5.6z M16.6,4.3c-0.2,0-0.4-0.1-0.6-0.1c-0.2-0.1-0.3-0.2-0.5-0.3s-0.3-0.3-0.3-0.5
80
+ c-0.1-0.2-0.1-0.3-0.1-0.6V1.3c0.8,0.1,1.4,0.5,1.9,1s0.9,1.2,1,1.9H16.6z"/>
81
+ <circle class="st1" cx="13.3" cy="16.8" r="0.7"/>
82
+ </g>
83
+ </svg>
admin/images/woo-feed-pro.svg CHANGED
@@ -1,31 +1,84 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="123px" height="25px" viewBox="0 0 123 25" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
4
- <title>logo-pro</title>
5
- <desc>Created with Sketch.</desc>
6
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7
- <g id="logo-pro" fill-rule="nonzero">
8
- <g id="Group">
9
- <g id="file-icon-copy">
10
- <path d="M2.20818849,1 L15.1239861,1 C16.7123647,1 18,2.34876897 18,4.01255981 L18,22.0741627 C18,23.1377733 17.1768542,24 16.1614523,24 L2.72692159,24 C1.77316913,24 1,23.1901227 1,22.1910885 L1,2.24491627 C1.0107551,1.55404342 1.54854215,1 2.20818849,1 Z" id="Path" fill="#0088F7"></path>
11
- <path d="M18,5 L16.0032415,5 C14.8968818,5 14,4.10311823 14,2.99675851 L14,1 C16.2076588,1.00356938 17.9964306,2.79234118 18,5 Z" id="Path" fill="#FFFFFF"></path>
12
- <path d="M12.4217157,4 L7.60622285,4 C7.29791524,4.03394393 7.06370343,4.30873772 7.06370343,4.63652199 C7.06370343,4.96430626 7.29791524,5.23910005 7.60622285,5.27304398 L12.4217157,5.27304398 C12.7300234,5.23910005 12.9642352,4.96430626 12.9642352,4.63652199 C12.9642352,4.30873772 12.7300234,4.03394393 12.4217157,4 Z M14.8489845,15.870275 C14.7061086,15.7236907 14.5036756,15.6617927 14.3088684,15.7051233 C14.2698238,15.7051233 14.2307793,15.7051233 14.1852273,15.7464112 L14.087616,15.8083431 C14.051391,15.8306043 14.0184947,15.8584334 13.9900046,15.8909189 C13.8699366,16.0043604 13.8032723,16.1680088 13.8077968,16.3382047 C13.8077968,16.3794926 13.8077968,16.4207805 13.8077968,16.4689497 C13.8077968,16.5171189 13.8077968,16.5515255 13.8468413,16.5996948 C13.8858859,16.647864 13.8858859,16.6616266 13.9054082,16.7029146 C13.928525,16.7416341 13.9570463,16.7764341 13.9900046,16.8061343 C14.0967407,16.9338939 14.2518661,17.0045566 14.4129871,16.9988113 C14.574225,17.010968 14.7289016,16.9291861 14.8164473,16.7854904 C14.8487882,16.7569993 14.8753497,16.7218897 14.8945364,16.6822706 C14.9183677,16.6508117 14.9380683,16.6160908 14.9531032,16.5790508 C14.9758471,16.5394118 14.9892388,16.4945683 14.9921478,16.4483058 C15.0026174,16.4054272 15.0026174,16.3604393 14.9921478,16.3175607 C15.0028863,16.1542231 14.951328,15.9931395 14.8489845,15.870275 L14.8489845,15.870275 Z M11.4000504,15.7257673 L5.60193661,15.7257673 C5.2694962,15.7257673 5,16.0107479 5,16.3622893 C5,16.7138307 5.2694962,16.9988113 5.60193661,16.9988113 L11.4000504,16.9988113 C11.7324908,16.9988113 12.001987,16.7138307 12.001987,16.3622893 C12.001987,16.0107479 11.7324908,15.7257673 11.4000504,15.7257673 L11.4000504,15.7257673 Z M14.4064797,13.0833409 L5.60193661,13.0833409 C5.29362901,13.1172848 5.0594172,13.3920786 5.0594172,13.7198628 C5.0594172,14.0476471 5.29362901,14.3224409 5.60193661,14.3563848 L14.426002,14.3563848 C14.7343096,14.3224409 14.9685214,14.0476471 14.9685214,13.7198628 C14.9685214,13.3920786 14.7343096,13.1172848 14.426002,13.0833409 L14.4064797,13.0833409 Z M14.4064797,10.3652199 L5.60193661,10.3652199 C5.29362901,10.3991638 5.0594172,10.6739576 5.0594172,11.0017419 C5.0594172,11.3295262 5.29362901,11.60432 5.60193661,11.6382639 L14.426002,11.6382639 C14.7343096,11.60432 14.9685214,11.3295262 14.9685214,11.0017419 C14.9685214,10.6739576 14.7343096,10.3991638 14.426002,10.3652199 L14.4064797,10.3652199 Z" id="Shape" fill="#FFFFFF"></path>
13
- <path d="M16.2426925,5.57810754 L18.3500005,5.57810754 C18.601712,5.56822361 18.8277555,5.41765557 18.9384047,5.18617025 C18.9792645,5.10627795 19.0004043,5.01737599 19,4.92721169 L19,4.87821953 C18.9728063,3.84759771 18.6359663,2.85054994 18.0352727,2.02267642 L18.0352727,1.97368426 L17.9189602,1.82670777 L17.9189602,1.82670777 C17.8231735,1.70772681 17.713703,1.58874585 17.6042324,1.46976488 C16.7032947,0.529537129 15.4703317,0 14.1832778,0 L2.73676369,0 C1.23327049,0 0.0112761984,1.24061154 0,2.77855548 L0,22.2004479 C0,23.775196 1.24522748,25 2.31940723,25 L15.7774427,25 C17.6110743,25 18.9384047,23.8171893 18.9384047,22.2004479 L18.9384047,14.7396417 L18.9384047,7.74076151 C18.9402293,7.57184262 18.8763762,7.40910183 18.7608945,7.28834549 C18.6454127,7.16758914 18.4877635,7.09871059 18.3226329,7.09686454 L18.3226329,7.09686454 C18.1551303,7.09497104 17.993948,7.16220179 17.8754986,7.28336879 C17.7570491,7.40453579 17.6913262,7.56941596 17.6931772,7.74076151 L17.6931772,14.7396417 L17.6931772,22.1934491 C17.6931772,23.0963046 16.9337253,23.6982083 15.7979684,23.6982083 L2.31940723,23.6982083 C1.67977578,23.4926422 1.25016606,22.8791019 1.26575321,22.1934491 L1.26575321,2.77855548 C1.26392323,2.37889758 1.41831653,1.99506757 1.69458219,1.71246366 C1.97084786,1.42985975 2.34606932,1.27192428 2.73676369,1.27379624 L13.4990869,1.27379624 L13.4990869,2.77855548 C13.4990846,3.52225707 13.7883604,4.23539681 14.3030839,4.76061632 C14.8178074,5.28583583 15.5156729,5.5799668 16.2426925,5.57810754 Z M16.2426925,4.28331471 C15.8508165,4.28706575 15.4738263,4.12996031 15.1960738,3.84715082 C14.9183213,3.56434134 14.7629917,3.17943523 14.7648078,2.77855548 L14.7648078,1.33678616 C16.2367884,1.60594277 17.3890058,2.78459504 17.6521258,4.29031359 L16.2426925,4.28331471 Z" id="Shape" fill="#2E3B50"></path>
14
- </g>
15
- <g id="text-copy" transform="translate(25.000000, 5.000000)">
16
- <path d="M9.02369668,2.46990881 C9.2107425,3.14427558 9.41295419,3.84761905 9.63033175,4.57993921 C9.84770932,5.31225937 10.0701422,6.04457953 10.2976303,6.7768997 C10.5301738,7.50921986 10.7601896,8.22836879 10.9876777,8.9343465 C11.2151659,9.64032421 11.4375987,10.3067882 11.6549763,10.9337386 C11.8369668,10.2593718 12.0139021,9.52705167 12.185782,8.73677812 C12.3576619,7.94650456 12.5295419,7.12198582 12.7014218,6.26322188 C12.8733017,5.40972644 13.042654,4.53779129 13.2094787,3.64741641 C13.3763033,2.75704154 13.5279621,1.8745694 13.664455,1 L16,1 C15.5703002,3.34974671 15.0951027,5.60729483 14.5744076,7.77264438 C14.0537125,9.93799392 13.4698262,12.0058764 12.8227488,13.9762918 L10.6464455,13.9762918 C9.72638231,11.4684904 8.83917852,8.72360689 7.98483412,5.74164134 C7.53491311,7.25369807 7.07993681,8.6893617 6.61990521,10.0486322 C6.15987362,11.4079027 5.69731438,12.7250253 5.23222749,14 L3.06350711,14 C2.42654028,12.0243161 1.85781991,9.95116515 1.35734597,7.78054711 C0.856872038,5.60992908 0.404423381,3.34974671 0,1 L2.40379147,1 C2.54533965,1.84822695 2.69447077,2.71752786 2.85118483,3.60790274 C3.00789889,4.49827761 3.17219589,5.37021277 3.34407583,6.22370821 C3.51595577,7.08247214 3.69036335,7.91225937 3.86729858,8.71306991 C4.04423381,9.51388045 4.22116904,10.2514691 4.39810427,10.9258359 C4.63064771,10.2883485 4.86319115,9.61661601 5.0957346,8.9106383 C5.32827804,8.20466059 5.56082148,7.4881459 5.79336493,6.76109422 C6.02590837,6.02877406 6.24834123,5.30172239 6.46066351,4.57993921 C6.67298578,3.85815603 6.87014218,3.16008105 7.0521327,2.48571429 L9.02369668,2.46990881 Z" id="Path" fill="#2E3B50"></path>
17
- <path d="M26.9996531,8.47024937 C27.0074002,9.24137774 26.885323,10.0082129 26.6386532,10.737891 C26.4183769,11.3854613 26.0698643,11.9807813 25.6144208,12.4874572 C25.1707559,12.9715337 24.6297019,13.3538098 24.0277001,13.6085384 C23.3812481,13.8785504 22.6869098,14.0115185 21.9876306,13.9992183 C21.2898029,14.007172 20.5979545,13.868349 19.9559565,13.5915524 C19.354251,13.3251484 18.8160351,12.9312701 18.3776312,12.4364989 C17.9336031,11.9420954 17.5886161,11.3652334 17.3617941,10.737891 C17.1110599,10.0063108 16.9888819,9.23596797 17.0007942,8.46175633 C16.99351,7.68924891 17.1214122,6.92153209 17.3785848,6.19411471 C17.6113591,5.56394749 17.9651704,4.98664352 18.4196079,4.49550675 C18.8642722,4.0146967 19.4052194,3.63539151 20.0063286,3.38291854 C20.6454978,3.1189924 21.3309469,2.98897514 22.021212,3.00073175 C22.7152838,2.99508464 23.4033775,3.1308387 24.0444908,3.39990462 C24.6451553,3.65262047 25.1838678,4.03526684 25.6228161,4.52098587 C26.0719328,5.0308693 26.4171431,5.62542172 26.6386532,6.27055206 C26.8822542,6.97755454 27.0043528,7.72154353 26.9996531,8.47024937 Z M24.531421,8.47024937 C24.5822345,7.59121999 24.3526877,6.71891431 23.8765838,5.98178871 C23.4278306,5.4022344 22.7405392,5.06366156 22.0128167,5.06366156 C21.2850942,5.06366156 20.5978027,5.4022344 20.1490495,5.98178871 C19.6640801,6.71586733 19.4256406,7.58840701 19.4690264,8.47024937 C19.4114356,9.36863088 19.6410211,10.2619275 20.1238635,11.0181613 C20.568813,11.60379 21.257496,11.9470101 21.9876306,11.9470101 C22.7177653,11.9470101 23.4064482,11.60379 23.8513978,11.0181613 C24.3448474,10.2625994 24.583402,9.36580325 24.531421,8.46175633 L24.531421,8.47024937 Z" id="Shape" fill="#2E3B50"></path>
18
- <path d="M37.9992565,8.49997514 C38.0052591,9.27027664 37.8803324,10.0359406 37.6298759,10.7638742 C37.3983877,11.4076815 37.0384122,11.9970095 36.5721041,12.495588 C36.1284568,12.9770623 35.5874243,13.3572835 34.9854463,13.6106428 C34.3390199,13.8792033 33.6447091,14.0114565 32.9454577,13.9992225 C32.2476577,14.0071334 31.5558367,13.8690567 30.9138642,13.593748 C30.3167471,13.3326772 29.7816246,12.9468283 29.3439965,12.4617985 C28.9034894,11.9446538 28.5696061,11.3445091 28.3617798,10.6962951 C28.1110555,9.96864757 27.9888823,9.20244585 28.0007942,8.43239606 C27.9935103,7.66404135 28.1214073,6.90045147 28.3785698,6.1769444 C28.6113348,5.55016471 28.9651321,4.9759641 29.4195516,4.48746749 C29.8641983,4.00924209 30.405124,3.6319759 31.0062094,3.38086012 C31.6453532,3.11835275 32.3307752,2.98903441 33.0210129,3.00072782 C33.7150572,2.99511106 34.4031235,3.13013536 35.0442114,3.39775489 C35.6448521,3.64911224 36.1835432,4.02970165 36.6224741,4.51280965 C37.0715729,5.01995214 37.4167696,5.61130848 37.6382709,6.25297086 C37.8885761,6.9748872 38.0107654,7.73547146 37.9992565,8.49997514 L37.9992565,8.49997514 Z M35.5311222,8.49997514 C35.5905548,7.62186647 35.3667935,6.74790114 34.8931011,6.00799671 C34.4443657,5.43155785 33.7571015,5.09480505 33.0294079,5.09480505 C32.3017143,5.09480505 31.6144501,5.43155785 31.1657147,6.00799671 C30.6807644,6.7381292 30.4423344,7.60597846 30.4857185,8.48308037 C30.42813,9.37663254 30.6577064,10.2651271 31.1405296,11.0172957 C31.5854615,11.5997763 32.2741172,11.9411514 33.0042228,11.9411514 C33.7343285,11.9411514 34.4229842,11.5997763 34.8679161,11.0172957 C35.3536877,10.2661327 35.5862271,9.37756277 35.5311222,8.48308037 L35.5311222,8.49997514 Z" id="Shape" fill="#2E3B50"></path>
19
- <polygon id="Path" fill="#0088F7" points="40 13.9684466 40.0687023 1 48 1.0473301 48 3.05097087 42.351145 3.05097087 42.2900763 6.34830097 47.3053435 6.34830097 47.3053435 8.35194175 42.2900763 8.35194175 42.2900763 14"></polygon>
20
- <path d="M49.0054054,9.54891633 C48.9931281,8.72371947 49.1293347,7.90349841 49.4068813,7.13127314 C49.6438401,6.50205059 49.9987995,5.92914093 50.4507186,5.44650437 C50.874418,4.99794323 51.3832446,4.64780662 51.9442089,4.41879542 C52.4788002,4.16944986 53.0538158,4.02935761 53.6384371,4.00602707 C54.8473249,3.93889362 56.0227721,4.43524572 56.8502442,5.36226593 C57.6882209,6.50223635 58.0918031,7.92859041 57.9824062,9.36359176 C57.9824062,9.49837327 57.9824062,9.64719451 57.9824062,9.81005549 C57.9824062,9.97291647 57.9824062,10.1217377 57.9824062,10.2565192 L51.4142607,10.2565192 C51.4215515,10.994507 51.7108168,11.6985597 52.2172125,12.210851 C52.8368925,12.7147273 53.6108485,12.9634102 54.3932118,12.91003 C54.9081338,12.9174758 55.4223195,12.8666388 55.9268497,12.7584008 C56.3025333,12.6814039 56.6707399,12.5686188 57.0268936,12.4214471 L57.3239858,14.4010504 C57.1553967,14.4851344 56.9809129,14.5555393 56.8020671,14.6116465 C56.5380564,14.6918333 56.2699899,14.7565165 55.9991154,14.8053949 C55.7154057,14.8615539 55.4076075,14.909289 55.0757208,14.9486002 C54.7396884,14.9858483 54.4018872,15.002724 54.0640016,14.9991433 C53.2852337,15.0125012 52.5112122,14.8695376 51.7836185,14.5779511 C51.1711715,14.3312964 50.6215055,13.9391677 50.177715,13.4323084 C49.7604372,12.9450715 49.4457929,12.3709908 49.2543204,11.7475396 C49.0609684,11.0331023 48.9769511,10.2909922 49.0054054,9.54891633 L49.0054054,9.54891633 Z M55.6939937,8.50435969 C55.6974617,8.18206038 55.6541414,7.86108529 55.5655214,7.55246533 C55.486599,7.26761403 55.3557042,7.00155076 55.1801045,6.76904785 C55.0100379,6.54922961 54.7962989,6.37099103 54.5538022,6.24676953 C54.277217,6.11270217 53.975171,6.04644558 53.6705552,6.05302113 C53.3493104,6.04340229 53.0303642,6.11263184 52.7391311,6.25519338 C52.4785052,6.38712229 52.2462685,6.57343657 52.0566221,6.80274323 C51.8691199,7.03182457 51.7222673,7.29430469 51.6230282,7.57773686 C51.5192832,7.86887489 51.4465748,8.17116599 51.4062312,8.47908816 L55.6939937,8.50435969 Z" id="Shape" fill="#0088F7"></path>
21
- <path d="M60.0050243,9.47310173 C59.9927794,8.64790487 60.1286279,7.82768382 60.4054449,7.05545855 C60.6417808,6.426236 60.9958071,5.85332633 61.4465382,5.37068977 C61.8691239,4.92212864 62.3766129,4.57199203 62.9361026,4.34298082 C63.4816487,4.11649258 64.0634138,4.00211054 64.6499024,4.00602707 C65.8556124,3.93889362 67.0279697,4.43524572 67.8532666,5.36226593 C68.6890404,6.50223635 69.0915617,7.92859041 68.9824525,9.36359176 C68.9824525,9.49837327 68.9824525,9.64719451 68.9824525,9.81005549 C68.9824525,9.97853237 68.9824525,10.1301616 68.9824525,10.2565192 L62.4315727,10.2565192 C62.4388443,10.994507 62.7273492,11.6985597 63.2324138,12.210851 C63.8504648,12.7147273 64.6223863,12.9634102 65.402693,12.91003 C65.9162639,12.9175414 66.4291047,12.8667037 66.9322994,12.7584008 C67.3069955,12.6814039 67.6742341,12.5686188 68.0294516,12.4214471 L68.3257628,14.4010504 C68.1576293,14.4851649 67.9836019,14.5555707 67.8052161,14.6116465 C67.5418828,14.6917659 67.2745246,14.7564482 67.0043751,14.8053949 C66.7214113,14.8615539 66.4144222,14.909289 66.0834079,14.9486002 C65.7482601,14.985867 65.411346,15.0027428 65.0743482,14.9991433 C64.2976275,15.0125012 63.5256406,14.8695376 62.7999596,14.5779511 C62.1891225,14.3312964 61.6409015,13.9391677 61.1982775,13.4323084 C60.7822919,12.9449228 60.4684998,12.3708881 60.2773103,11.7475396 C60.0686341,11.0102194 59.9766449,10.2418219 60.0050243,9.47310173 Z M66.6760303,8.4285451 C66.6792414,8.10626272 66.6360402,7.78532678 66.5478957,7.47665074 C66.4689918,7.19187879 66.3384591,6.9258522 66.163492,6.69323326 C65.9938724,6.47341502 65.7806953,6.29517643 65.538836,6.17095494 C65.2629778,6.03688757 64.9617259,5.97063099 64.6579108,5.97720653 C64.3375105,5.9675877 64.0194027,6.03681724 63.7289352,6.17937878 C63.4689944,6.3113077 63.2373682,6.49762197 63.0482203,6.72692863 C62.8612109,6.95600997 62.7147444,7.21849009 62.6157662,7.50192227 C62.5122939,7.7930603 62.4397767,8.0953514 62.3995391,8.40327356 L66.6760303,8.4285451 Z" id="Shape" fill="#0088F7"></path>
22
- <path d="M78.9519219,13.5051782 C78.3862429,13.6547831 77.8107644,13.7698782 77.2291217,13.8497363 C76.5082085,13.9552705 75.7792523,14.0053743 75.0495792,13.9995442 C74.3298235,14.005418 73.6151833,13.8860363 72.9421539,13.6474957 C72.3379434,13.4368504 71.7907808,13.1043915 71.3395491,12.6737446 C70.8974095,12.2452579 70.5562049,11.7349374 70.3379211,11.1756661 C70.0999147,10.5277398 69.9859883,9.84565938 70.0013741,9.1607504 C69.9956862,8.48364594 70.0983188,7.8095509 70.305869,7.16081552 C70.4890015,6.61270899 70.7857852,6.10366927 71.1792886,5.66273696 C71.5541354,5.21392394 72.0374419,4.85455041 72.5895808,4.61408197 C73.1841814,4.37690263 73.8263689,4.26195113 74.4726415,4.27701429 C74.9037576,4.27207957 75.3332267,4.32762721 75.7467123,4.44180294 C76.0727361,4.53503689 76.3891777,4.65536331 76.6922491,4.80134179 L76.6922491,0.307106105 L79,0 L78.9519219,13.5051782 Z M72.3812422,9.08584648 C72.3214361,9.88959129 72.5715928,10.686776 73.0863883,11.3329643 C73.5775864,11.8783651 74.3116281,12.1799459 75.0736182,12.1494171 C75.3866427,12.1542194 75.6996971,12.1417136 76.0111421,12.1119652 C76.226472,12.0898337 76.440437,12.0573321 76.652184,12.0145901 L76.652184,6.68143038 C76.4024939,6.52834302 76.1333047,6.40504336 75.8508816,6.31440114 C75.5063502,6.1992465 75.1430269,6.14095243 74.7771364,6.1421221 C74.0577886,6.08414974 73.3585015,6.38256782 72.9341408,6.92861335 C72.525183,7.58057088 72.3327361,8.33143666 72.3812422,9.08584648 L72.3812422,9.08584648 Z" id="Shape" fill="#0088F7"></path>
23
- </g>
24
- </g>
25
- <g id="Group-2" transform="translate(107.000000, 0.000000)">
26
- <rect id="Rectangle" fill="#0088F7" x="0" y="0" width="16" height="8" rx="2"></rect>
27
- <path d="M3.789,6 L3.789,4.166 L4.601,4.166 C5.16566667,4.166 5.60083333,4.026 5.9065,3.746 C6.21216667,3.466 6.365,3.09033333 6.365,2.619 C6.365,2.13833333 6.21683333,1.758 5.9205,1.478 C5.62416667,1.198 5.18433333,1.058 4.601,1.058 L4.601,1.058 L2.802,1.058 L2.802,6 L3.789,6 Z M4.496,3.375 L3.789,3.375 L3.789,1.856 L4.496,1.856 C4.804,1.856 5.02566667,1.92133333 5.161,2.052 C5.29633333,2.18266667 5.364,2.37166667 5.364,2.619 C5.364,3.123 5.07466667,3.375 4.496,3.375 L4.496,3.375 Z M8.22933333,6 L8.22933333,4.131 C8.22933333,3.459 8.591,3.123 9.31433333,3.123 L9.31433333,3.123 L9.60133333,3.123 L9.60133333,2.066 C9.30733333,2.066 9.04133333,2.13716667 8.80333333,2.2795 C8.56533333,2.42183333 8.374,2.61666667 8.22933333,2.864 L8.22933333,2.864 L8.22933333,2.122 L7.24233333,2.122 L7.24233333,6 L8.22933333,6 Z M12.1726667,6.049 C12.5506667,6.049 12.8901667,5.9685 13.1911667,5.8075 C13.4921667,5.6465 13.729,5.41666667 13.9016667,5.118 C14.0743333,4.81933333 14.1606667,4.467 14.1606667,4.061 C14.1606667,3.655 14.0743333,3.3015 13.9016667,3.0005 C13.729,2.6995 13.4921667,2.46966667 13.1911667,2.311 C12.8901667,2.15233333 12.5506667,2.073 12.1726667,2.073 C11.7946667,2.073 11.4551667,2.15233333 11.1541667,2.311 C10.8531667,2.46966667 10.6163333,2.6995 10.4436667,3.0005 C10.271,3.3015 10.1846667,3.655 10.1846667,4.061 C10.1846667,4.467 10.271,4.81933333 10.4436667,5.118 C10.6163333,5.41666667 10.8531667,5.6465 11.1541667,5.8075 C11.4551667,5.9685 11.7946667,6.049 12.1726667,6.049 Z M12.1726667,5.195 C11.8973333,5.195 11.664,5.09816667 11.4726667,4.9045 C11.2813333,4.71083333 11.1856667,4.42966667 11.1856667,4.061 C11.1856667,3.69233333 11.2813333,3.41116667 11.4726667,3.2175 C11.664,3.02383333 11.8973333,2.927 12.1726667,2.927 C12.448,2.927 12.6813333,3.02383333 12.8726667,3.2175 C13.064,3.41116667 13.1596667,3.69233333 13.1596667,4.061 C13.1596667,4.42966667 13.064,4.71083333 12.8726667,4.9045 C12.6813333,5.09816667 12.448,5.195 12.1726667,5.195 Z" id="Pro" fill="#FFFFFF"></path>
28
- </g>
29
- </g>
30
- </g>
31
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 104.1 25" style="enable-background:new 0 0 104.1 25;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#0088F7;}
7
+ .st1{fill:#2F3C50;}
8
+ .st2{fill:#488EFF;}
9
+ .st3{fill:#FFFFFF;}
10
+ </style>
11
+ <desc>Created with Sketch.</desc>
12
+ <g id="Group-2" transform="translate(107.000000, 0.000000)">
13
+ <path id="Rectangle" class="st0" d="M-15.5,0h11.4c0.7,0,1.3,0.6,1.3,1.3v5.4C-2.9,7.4-3.4,8-4.2,8h-11.4c-0.7,0-1.3-0.6-1.3-1.3
14
+ V1.3C-16.9,0.6-16.3,0-15.5,0z"/>
15
+ </g>
16
+ <g>
17
+ <g>
18
+ <path class="st1" d="M30,18.4c-1.7,0-3-0.5-3.8-1.4c-0.9-0.9-1.3-2.3-1.3-4c0-0.8,0.1-1.6,0.4-2.3c0.3-0.7,0.6-1.3,1.1-1.7
19
+ c0.5-0.5,1-0.8,1.7-1c0.6-0.2,1.3-0.3,2.1-0.3c0.4,0,0.8,0,1.2,0.1c0.3,0.1,0.7,0.1,1,0.2c0.3,0.1,0.5,0.1,0.7,0.3
20
+ c0.2,0.1,0.3,0.1,0.4,0.2l-0.7,1.9c-0.3-0.1-0.7-0.3-1.1-0.4c-0.4-0.1-0.9-0.2-1.5-0.2c-0.3,0-0.7,0.1-1,0.2s-0.6,0.3-0.9,0.6
21
+ c-0.3,0.3-0.5,0.6-0.6,1s-0.2,0.9-0.2,1.5c0,0.5,0.1,0.9,0.1,1.3c0.1,0.4,0.3,0.8,0.5,1c0.2,0.3,0.6,0.6,0.9,0.7
22
+ c0.3,0.2,0.8,0.3,1.4,0.3c0.3,0,0.6,0,0.9-0.1c0.3-0.1,0.5-0.1,0.7-0.1c0.2-0.1,0.4-0.1,0.6-0.2c0.1-0.1,0.3-0.1,0.4-0.2l0.6,1.9
23
+ c-0.3,0.2-0.8,0.3-1.4,0.6C31.5,18.3,30.8,18.4,30,18.4z"/>
24
+ <path class="st1" d="M43,7.8v2h-3.1v8.3h-2.4V9.9h-3.1v-2C34.4,7.8,43,7.8,43,7.8z"/>
25
+ <path class="st1" d="M50.8,18.2c-0.3-0.6-0.6-1.2-1-1.7c-0.3-0.6-0.8-1.1-1.2-1.5c-0.1,0.1-0.3,0.3-0.6,0.6s-0.4,0.6-0.6,0.9
26
+ c-0.2,0.3-0.4,0.6-0.6,1c-0.2,0.3-0.3,0.6-0.4,0.8h-2.6c0.4-0.8,1-1.7,1.5-2.5c0.6-0.8,1.3-1.8,2-2.7l-3.4-5.1h2.8l1.9,3l2-3h2.6
27
+ l-3.3,5c0.9,1.1,1.6,2.1,2.2,3.1c0.6,0.9,1,1.7,1.3,2.3L50.8,18.2L50.8,18.2z"/>
28
+ <path class="st2" d="M54.9,18.2V7.8h6.9v1.9h-4.6v2.2h4.1v1.9h-4.1v4.2L54.9,18.2L54.9,18.2z"/>
29
+ <path class="st2" d="M62.8,14.3c0-0.7,0.1-1.3,0.3-1.8c0.2-0.6,0.5-1,0.8-1.3c0.3-0.3,0.8-0.6,1.2-0.8c0.5-0.2,0.9-0.3,1.4-0.3
30
+ c1.1,0,2,0.3,2.6,1c0.6,0.7,1,1.7,1,3c0,0.1,0,0.3,0,0.4s0,0.3,0,0.4h-5.1c0.1,0.5,0.3,0.8,0.6,1.1c0.3,0.3,0.9,0.4,1.5,0.4
31
+ c0.4,0,0.8-0.1,1.2-0.1c0.4-0.1,0.7-0.1,1-0.3l0.3,1.8c-0.1,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.7,0.1
32
+ c-0.3,0.1-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1c-0.7,0-1.3-0.1-1.9-0.3c-0.6-0.2-1-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3
33
+ C62.9,15.4,62.8,14.9,62.8,14.3z M68.1,13.5c0-0.2-0.1-0.3-0.1-0.6c-0.1-0.2-0.1-0.3-0.3-0.5s-0.3-0.3-0.4-0.3
34
+ c-0.2-0.1-0.4-0.1-0.6-0.1c-0.3,0-0.5,0.1-0.6,0.1c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.5c-0.1,0.2-0.1,0.3-0.1,0.6
35
+ H68.1z"/>
36
+ <path class="st2" d="M71.5,14.3c0-0.7,0.1-1.3,0.3-1.8c0.2-0.6,0.5-1,0.8-1.3c0.3-0.3,0.8-0.6,1.2-0.8c0.5-0.2,0.9-0.3,1.4-0.3
37
+ c1.1,0,2,0.3,2.6,1c0.6,0.7,1,1.7,1,3c0,0.1,0,0.3,0,0.4s0,0.3,0,0.4h-5.1c0.1,0.5,0.3,0.8,0.6,1.1c0.3,0.3,0.9,0.4,1.5,0.4
38
+ c0.4,0,0.8-0.1,1.2-0.1c0.4-0.1,0.7-0.1,1-0.3l0.3,1.8c-0.1,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.4,0.1-0.7,0.1
39
+ c-0.3,0.1-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1c-0.7,0-1.3-0.1-1.9-0.3c-0.6-0.2-1-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3
40
+ C71.6,15.4,71.5,14.9,71.5,14.3z M76.7,13.5c0-0.2-0.1-0.3-0.1-0.6c-0.1-0.2-0.1-0.3-0.3-0.5c-0.1-0.1-0.3-0.3-0.4-0.3
41
+ c-0.2-0.1-0.4-0.1-0.6-0.1c-0.3,0-0.5,0.1-0.6,0.1c-0.2,0.1-0.3,0.2-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.5c-0.1,0.2-0.1,0.3-0.1,0.6
42
+ H76.7z"/>
43
+ <path class="st2" d="M87.5,17.9c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0.1-0.6,0.1-0.8,0.1s-0.6,0.1-0.8,0.1c-0.3,0-0.6,0.1-0.8,0.1
44
+ c-0.6,0-1.3-0.1-1.7-0.3c-0.5-0.2-0.9-0.5-1.3-0.8c-0.3-0.3-0.6-0.8-0.8-1.3c-0.2-0.5-0.3-1-0.3-1.7s0.1-1.2,0.2-1.7
45
+ c0.1-0.5,0.4-1,0.7-1.3s0.7-0.6,1.1-0.8c0.4-0.2,0.9-0.3,1.5-0.3c0.3,0,0.6,0,0.8,0.1c0.3,0.1,0.5,0.1,0.8,0.3V6.9l2.2-0.3
46
+ L87.5,17.9L87.5,17.9z M82.5,14.2c0,0.7,0.1,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.4,0.6c0.2,0,0.4,0,0.6,0c0.1,0,0.3,0,0.4-0.1v-4
47
+ c-0.1-0.1-0.3-0.1-0.6-0.2c-0.2-0.1-0.4-0.1-0.7-0.1C83.1,12.1,82.5,12.8,82.5,14.2z"/>
48
+ </g>
49
+ </g>
50
+ <g>
51
+ <path class="st2" d="M1.9,0.8h13.7c0.8,0,1.6,0.3,2.2,0.9c0.6,0.6,0.9,1.4,0.9,2.2v18.3c0,0.5-0.2,1-0.6,1.4
52
+ c-0.3,0.3-0.8,0.6-1.4,0.6H2.5c-0.5,0-1-0.2-1.3-0.6c-0.3-0.3-0.6-0.8-0.6-1.3V2.1c0-0.3,0.1-0.7,0.4-0.9C1.3,1,1.6,0.8,1.9,0.8
53
+ L1.9,0.8z"/>
54
+ <path class="st3" d="M18.8,4.9h-2.2c-0.6,0-1.1-0.2-1.5-0.6s-0.6-1-0.6-1.5V0.6c1.1,0,2.2,0.5,3.1,1.2C18.3,2.7,18.8,3.8,18.8,4.9
55
+ L18.8,4.9z"/>
56
+ <path class="st3" d="M12.3,4.3H7.1c-0.1,0-0.3,0.1-0.4,0.2C6.6,4.7,6.5,4.8,6.5,4.9s0.1,0.3,0.1,0.4c0.1,0.1,0.3,0.2,0.4,0.2h5.2
57
+ c0.1,0,0.3-0.1,0.4-0.2s0.1-0.3,0.1-0.4s-0.1-0.3-0.1-0.4C12.6,4.4,12.4,4.3,12.3,4.3z M11.2,16.3H4.9c-0.1,0-0.3,0.1-0.5,0.2
58
+ c-0.1,0.1-0.2,0.3-0.2,0.5c0,0.1,0.1,0.3,0.2,0.5s0.3,0.2,0.5,0.2h6.2c0.1,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5
59
+ c0-0.1-0.1-0.3-0.2-0.5C11.5,16.3,11.4,16.3,11.2,16.3z M14.4,13.5H4.9c-0.1,0-0.3,0.1-0.4,0.2c-0.1,0.1-0.1,0.3-0.1,0.4
60
+ s0.1,0.3,0.1,0.4c0.1,0.1,0.3,0.2,0.4,0.2h9.5c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.4s-0.1-0.3-0.1-0.4
61
+ C14.8,13.6,14.6,13.5,14.4,13.5L14.4,13.5z M14.4,10.8H4.9c-0.1,0-0.3,0.1-0.4,0.2s-0.1,0.3-0.1,0.4c0,0.1,0.1,0.3,0.1,0.4
62
+ C4.7,11.9,4.8,12,4.9,12h9.5c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.3,0.1-0.4S14.9,11,14.9,11C14.8,10.8,14.6,10.8,14.4,10.8
63
+ L14.4,10.8z"/>
64
+ <path class="st1" d="M16.6,5.6h2.2c0.1,0,0.3-0.1,0.3-0.1c0.1-0.1,0.2-0.1,0.3-0.3c0.1,0,0.1-0.1,0.1-0.2V4.9c0-1-0.3-2-1-2.8V1.9
65
+ l-0.1-0.1c-0.1-0.1-0.2-0.2-0.3-0.3c-0.5-0.5-1-0.8-1.6-1.1C15.8,0.1,15.1,0,14.5,0H2.8C2.1,0,1.3,0.3,0.8,0.8C0.3,1.3,0,2,0,2.8
66
+ v19.4C0,23.8,1.3,25,2.4,25h13.8c1.9,0,3.3-1.2,3.3-2.8v-7.5v-7c0-0.1,0-0.1-0.1-0.3c0-0.1-0.1-0.1-0.1-0.2C19.1,7.2,19,7.1,19,7.1
67
+ c-0.1,0-0.1-0.1-0.3-0.1l0,0c-0.1,0-0.1,0-0.3,0.1c-0.1,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.1,0.2S18,7.6,18,7.7v7v7.5
68
+ c0,0.9-0.8,1.5-1.9,1.5H2.4c-0.3-0.1-0.6-0.3-0.8-0.6c-0.2-0.3-0.3-0.6-0.3-0.9V2.8c0-0.2,0.1-0.4,0.1-0.6C1.5,2,1.7,1.9,1.8,1.7
69
+ C1.9,1.6,2,1.5,2.2,1.4c0.2-0.1,0.3-0.1,0.6-0.1h11v1.5c0,0.3,0.1,0.8,0.2,1c0.1,0.3,0.3,0.6,0.6,0.9s0.6,0.5,0.9,0.6
70
+ C15.9,5.5,16.3,5.6,16.6,5.6L16.6,5.6z M16.6,4.3c-0.2,0-0.4-0.1-0.6-0.1c-0.2-0.1-0.3-0.2-0.5-0.3s-0.3-0.3-0.3-0.5
71
+ c-0.1-0.2-0.1-0.3-0.1-0.6V1.3c0.8,0.1,1.4,0.5,1.9,1s0.9,1.2,1,1.9H16.6z"/>
72
+ <circle class="st3" cx="13.3" cy="16.8" r="0.7"/>
73
+ </g>
74
+ <g>
75
+ <path class="st3" d="M94,1.7c0.5,0,0.8,0.1,1.2,0.3c0.4,0.3,0.5,0.8,0.5,1.1c0,0.2,0,0.7-0.4,1c-0.2,0.2-0.6,0.4-1.1,0.4h-0.6v1.7
76
+ h-0.9V1.7H94z M93.5,3.8h0.4c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.2-0.1-0.4-0.1-0.6-0.1h-0.3
77
+ V3.8z"/>
78
+ <path class="st3" d="M96.1,3.3h0.8v0.4c0.1-0.2,0.3-0.4,0.4-0.4c0.1-0.1,0.3-0.1,0.5-0.1c0.1,0,0.3,0,0.3,0.1L98,4
79
+ c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.4,0-0.5,0.2c-0.2,0.2-0.2,0.4-0.2,0.6v1.4h-0.8V3.3z"/>
80
+ <path class="st3" d="M101.1,3.6c0.3,0.3,0.5,0.7,0.5,1.1c0,0.5-0.2,0.9-0.5,1.1c-0.2,0.2-0.6,0.4-1.2,0.4c-0.5,0-0.9-0.2-1.2-0.4
81
+ c-0.3-0.3-0.5-0.7-0.5-1.1c0-0.5,0.2-0.9,0.5-1.1c0.2-0.2,0.6-0.4,1.2-0.4C100.5,3.2,100.9,3.4,101.1,3.6z M100.8,4.7
82
+ c0-0.5-0.3-0.8-0.8-0.8s-0.8,0.4-0.8,0.8c0,0.4,0.3,0.8,0.8,0.8C100.4,5.6,100.8,5.2,100.8,4.7z"/>
83
+ </g>
84
+ </svg>
admin/partials/woo-feed-add-option.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $wooFeedDropDown = new Woo_Feed_Dropdown(); ?>
2
+ <div class="wrap">
3
+ <h2><?php esc_html_e( 'Add Option', 'woo-feed' ); ?></h2>
4
+
5
+ <form action="" name="feed" method="post" autocomplete="off">
6
+ <?php wp_nonce_field( 'woo-feed-add-option' ); ?>
7
+ <table class="widefat" style="max-width: 440px;margin: 20px auto;padding: 20px;">
8
+ <tbody>
9
+ <tr><td colspan="2"></td></tr>
10
+ <tr>
11
+ <td style="width: 130px;max-width: 130px;"><label for="wpfp_option"><b><?php esc_html_e( 'Option Name', 'woo-feed' ); ?> <span class="requiredIn">*</span></b></label></td>
12
+ <td>
13
+ <select name="wpfp_option" id="wpfp_option" class="selectize generalInput" style="width: 100%;" placeholder="<?php esc_attr_e( 'Search Option Name', 'woo-feed' ); ?>" required><?php $wooFeedDropDown->woo_feed_get_wp_options(); ?></select>
14
+ </td>
15
+ </tr>
16
+ <tr>
17
+ <td colspan="2" style="text-align: center">
18
+ <button type="submit" class="button button-primary"><?php esc_html_e( 'Add Option', 'woo-feed' ); ?></button>
19
+ </td>
20
+ </tr>
21
+ <tr><td colspan="2"></td></tr>
22
+ </tbody>
23
+ </table>
24
+ </form>
25
+ </div>
admin/partials/woo-feed-option-list.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Category Mapping List View
4
+ *
5
+ * @link https://webappick.com/
6
+ * @since 4.3.33
7
+ *
8
+ * @package Woo_Feed
9
+ * @subpackage Woo_Feed/admin/partial
10
+ * @author Ohidul Islam <wahid@webappick.com>
11
+ */
12
+
13
+ $myListTable = new Woo_Feed_Option_list();
14
+ $myListTable->prepare_items();
15
+ global $plugin_page;
16
+ ?>
17
+ <div class="wrap">
18
+ <h2><?php esc_html_e( 'Option List', 'woo-feed' ); ?><a href="<?php echo esc_url( admin_url( 'admin.php?page=webappick-wp-options&action=add-option' ) ); ?>" class="page-title-action"><?php esc_html_e( 'Add New Option', 'woo-feed' ); ?></a></h2>
19
+ <?php WPFFWMessage()->displayMessages(); ?>
20
+ <form id="contact-filter" method="post">
21
+ <!-- For plugins, we also need to ensure that the form posts back to our current page -->
22
+ <input type="hidden" name="page" value="<?php echo esc_attr( $plugin_page ); ?>"/>
23
+ <?php // $myListTable->search_box('search', 'search_id'); ?>
24
+ <!-- Now we can render the completed list table -->
25
+ <?php $myListTable->display(); ?>
26
+ </form>
27
+ </div>
28
+
29
+ <script type="text/javascript">
30
+ (function($, window, document){
31
+ $(document).ready(function () {
32
+ $('body').find(".single-option-delete").click(function () {
33
+ if (confirm('<?php esc_html_e( 'Are You Sure to Delete?', 'woo-feed' ); ?>')) {
34
+ window.location.href = $(this).attr('val');
35
+ }
36
+ });
37
+ $('#doaction').click(function () {
38
+ return confirm('<?php esc_html_e( 'Are You Sure to Delete?', 'woo-feed' ); ?>');
39
+ });
40
+ $('#doaction2').click(function () {
41
+ return confirm('<?php esc_html_e( 'Are You Sure to Delete?', 'woo-feed' ); ?>');
42
+ });
43
+ });
44
+ })(jQuery, window, document);
45
+ </script>
includes/class-woo-feed.php CHANGED
@@ -186,6 +186,11 @@ class Woo_Feed {
186
  */
187
  require_once WOO_FEED_FREE_PATH . 'admin/class-woo-feed-manage-list.php';
188
 
 
 
 
 
 
189
  /**
190
  * The class responsible for making category list
191
  */
186
  */
187
  require_once WOO_FEED_FREE_PATH . 'admin/class-woo-feed-manage-list.php';
188
 
189
+ /**
190
+ * The class responsible for making feed list
191
+ */
192
+ require_once WOO_FEED_FREE_PATH . 'admin/class-woo-feed-option-list.php';
193
+
194
  /**
195
  * The class responsible for making category list
196
  */
includes/classes/class-woo-feed-dropdown.php CHANGED
@@ -158,6 +158,67 @@ class Woo_Feed_Dropdown {
158
 
159
  return $taxonomy;
160
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
  // Product Attribute DropDowns.
163
 
@@ -271,7 +332,6 @@ class Woo_Feed_Dropdown {
271
  }
272
  }
273
 
274
-
275
  if ( class_exists( 'WPSEO_Frontend' ) ) {
276
  //add yoast title array in the dropdown
277
  $search_key = in_array( '_aioseop_title', array_keys($attributes) ) ? '_aioseop_title' : 'title';
@@ -366,12 +426,26 @@ class Woo_Feed_Dropdown {
366
  $attributes['---3'] = '';
367
  }
368
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
369
  // Category Mapping
370
  $_category_mappings = $this->getCustomCategoryMappedAttributes();
371
  if ( ! empty( $_category_mappings ) && is_array( $_category_mappings ) ) {
372
- $attributes['--4'] = esc_html__( 'Category Mappings', 'woo-feed' );
373
  $attributes = $attributes + $_category_mappings;
374
- $attributes['---4'] = '';
375
  }
376
 
377
  return $attributes;
@@ -477,6 +551,92 @@ class Woo_Feed_Dropdown {
477
 
478
  return $options;
479
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
 
481
  // Merchant Attribute DropDown.
482
 
158
 
159
  return $taxonomy;
160
  }
161
+
162
+ /**
163
+ * Get product related post meta keys (filtered)
164
+ *
165
+ * @return array
166
+ */
167
+ protected function getCustomAttributes() {
168
+ $attributes = woo_feed_get_cached_data( 'woo_feed_dropdown_product_custom_attributes' );
169
+ if ( false === $attributes ) {
170
+ // Get Variation Attributes
171
+ global $wpdb;
172
+ $attributes = array();
173
+ $sql = "SELECT DISTINCT( meta_key ) FROM $wpdb->postmeta
174
+ WHERE post_id IN (
175
+ SELECT ID FROM $wpdb->posts WHERE post_type = 'product_variation' -- local attributes will be found on variation product meta only with attribute_ suffix
176
+ ) AND (
177
+ meta_key LIKE 'attribute_%' -- include only product attributes from meta list
178
+ AND meta_key NOT LIKE 'attribute_pa_%'
179
+ )";
180
+ // sanitization ok
181
+ $localAttributes = $wpdb->get_col( $sql ); // phpcs:ignore
182
+ foreach ( $localAttributes as $localAttribute ) {
183
+ $localAttribute = str_replace( 'attribute_', '', $localAttribute );
184
+ $attributes[ Woo_Feed_Products_v3::PRODUCT_ATTRIBUTE_PREFIX . $localAttribute ] = ucwords( str_replace( '-', ' ', $localAttribute ) );
185
+ }
186
+
187
+ // Get Product Custom Attributes
188
+ $sql = 'SELECT meta.meta_id, meta.meta_key as name, meta.meta_value as type FROM ' . $wpdb->postmeta . ' AS meta, ' . $wpdb->posts . " AS posts WHERE meta.post_id = posts.id AND posts.post_type LIKE '%product%' AND meta.meta_key='_product_attributes';";
189
+ $customAttributes = $wpdb->get_results( $sql ); // phpcs:ignore
190
+
191
+ if ( ! empty( $customAttributes ) ) {
192
+ foreach ( $customAttributes as $key => $value ) {
193
+ $product_attr = maybe_unserialize( $value->type );
194
+ if ( ! empty( $product_attr ) && is_array( $product_attr ) ) {
195
+ foreach ( $product_attr as $key => $arr_value ) {
196
+ if ( strpos( $key, 'pa_' ) === false ) {
197
+ $attributes[ Woo_Feed_Products_v3::PRODUCT_ATTRIBUTE_PREFIX . $key ] = ucwords( str_replace( '-', ' ', $arr_value['name'] ) );
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ woo_feed_set_cache_data( 'woo_feed_dropdown_product_custom_attributes', $attributes );
204
+ }
205
+
206
+ // @TODO implement filter hook
207
+ return (array) $attributes;
208
+ }
209
+
210
+ /**
211
+ * Get All Options
212
+ *
213
+ * @return array
214
+ */
215
+ protected function getAllOptions() {
216
+ $_wp_options = wp_list_pluck( get_option( 'wpfp_option', array() ), 'option_name');
217
+ $_wp_options_val = str_replace('wf_option_', '', $_wp_options);
218
+ $_wp_options = array_combine($_wp_options, $_wp_options_val);
219
+
220
+ return $_wp_options;
221
+ }
222
 
223
  // Product Attribute DropDowns.
224
 
332
  }
333
  }
334
 
 
335
  if ( class_exists( 'WPSEO_Frontend' ) ) {
336
  //add yoast title array in the dropdown
337
  $search_key = in_array( '_aioseop_title', array_keys($attributes) ) ? '_aioseop_title' : 'title';
426
  $attributes['---3'] = '';
427
  }
428
 
429
+ $_custom_attributes = $this->getCustomAttributes();
430
+ if ( ! empty( $_custom_attributes ) && is_array( $_custom_attributes ) ) {
431
+ $attributes['--4'] = esc_html__( 'Product Custom Attributes', 'woo-feed' );
432
+ $attributes = $attributes + $_custom_attributes;
433
+ $attributes['---4'] = '';
434
+ }
435
+
436
+ $_wp_options = $this->getAllOptions();
437
+ if ( ! empty( $_wp_options ) && is_array( $_wp_options ) ) {
438
+ $attributes['--5'] = esc_html__( 'WP Options', 'woo-feed' );
439
+ $attributes = $attributes + $_wp_options;
440
+ $attributes['---5'] = '';
441
+ }
442
+
443
  // Category Mapping
444
  $_category_mappings = $this->getCustomCategoryMappedAttributes();
445
  if ( ! empty( $_category_mappings ) && is_array( $_category_mappings ) ) {
446
+ $attributes['--6'] = esc_html__( 'Category Mappings', 'woo-feed' );
447
  $attributes = $attributes + $_category_mappings;
448
+ $attributes['---6'] = '';
449
  }
450
 
451
  return $attributes;
551
 
552
  return $options;
553
  }
554
+
555
+
556
+ /**
557
+ * Get WP Option Table Item List
558
+ *
559
+ * @param string $selected
560
+ */
561
+ public function woo_feed_get_wp_options( $selected = '' ) {
562
+ $options = $this->get_cached_dropdown( 'woo_feed_dropdown_wp_options', $selected );
563
+ if ( false === $options ) {
564
+ global $wpdb;
565
+ $default_exclude_keys = array(
566
+ 'db_version',
567
+ 'cron',
568
+ 'wpfp_option',
569
+ 'recovery_keys',
570
+ 'wf_schedule',
571
+ 'woo_feed_output_type_options',
572
+ 'ftp_credentials',
573
+ );
574
+
575
+ /**
576
+ * Exclude Option Names from dropdown
577
+ *
578
+ * @param array $exclude Option Names to exclude.
579
+ * @param array $default_exclude_keys Option Names by default.
580
+ */
581
+ $user_exclude = apply_filters( 'woo_feed_dropdown_exclude_option_names', null, $default_exclude_keys );
582
+
583
+ if ( is_array( $user_exclude ) && ! empty( $user_exclude ) ) {
584
+ $user_exclude = esc_sql( $user_exclude );
585
+ $default_exclude_keys = array_merge( $default_exclude_keys, $user_exclude );
586
+ }
587
+
588
+ $default_exclude_keys = array_map( 'esc_sql', $default_exclude_keys );
589
+ $exclude_keys = '\'' . implode( '\', \'', $default_exclude_keys ) . '\'';
590
+
591
+ $default_exclude_key_patterns = array(
592
+ 'mailserver_%',
593
+ '_transient%',
594
+ '_site_transient%',
595
+ 'wf_config%',
596
+ 'wf_feed_%',
597
+ 'wpfw_%',
598
+ 'wf_dattribute_%',
599
+ 'wf_cmapping_%',
600
+ 'webappick-woo%',
601
+ 'widget_%',
602
+ );
603
+
604
+ /**
605
+ * Exclude Option Name patterns from dropdown
606
+ *
607
+ * @param array $exclude Option Name Patter to exclude.
608
+ * @param array $default_exclude_key_patterns Option Name Patters by default.
609
+ */
610
+ $user_exclude_patterns = apply_filters(
611
+ 'woo_feed_dropdown_exclude_option_name_pattern',
612
+ null,
613
+ $default_exclude_key_patterns
614
+ );
615
+ if ( is_array( $user_exclude_patterns ) && ! empty( $user_exclude_patterns ) ) {
616
+ $default_exclude_key_patterns = array_merge( $default_exclude_key_patterns, $user_exclude_patterns );
617
+ }
618
+ $exclude_key_patterns = '';
619
+ foreach ( $default_exclude_key_patterns as $pattern ) {
620
+ $exclude_key_patterns .= $wpdb->prepare( ' AND option_name NOT LIKE %s', $pattern );
621
+ }
622
+
623
+ /** @noinspection SqlConstantCondition */
624
+ $query = "SELECT * FROM $wpdb->options
625
+ WHERE 1=1 AND
626
+ ( option_name NOT IN ( $exclude_keys ) $exclude_key_patterns )";
627
+ // sql escaped, cached
628
+ $options = $wpdb->get_results( $query ); // phpcs:ignore
629
+ $item = array();
630
+ if ( is_array( $options ) && ! empty( $options ) ) {
631
+ foreach ( $options as $key => $value ) {
632
+ $item[ esc_attr( $value->option_name ) . '-' . esc_attr( $value->option_name ) ] = esc_html( $value->option_name );
633
+ }
634
+ }
635
+ $options = $this->cache_dropdown( 'woo_feed_dropdown_wp_options', $item, $selected );
636
+ }
637
+ // HTML option element with escaped label and value
638
+ echo $options; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
639
+ }
640
 
641
  // Merchant Attribute DropDown.
642
 
includes/classes/class-woo-feed-engine.php CHANGED
@@ -95,8 +95,9 @@ class WF_Engine
95
  $default = $this->rules['default'];
96
 
97
 
98
- $wf_attr = array();
99
- $wf_cattr = array();
 
100
 
101
  # Map Merchant Attributes and Woo Attributes
102
  $countAttr = 0;
@@ -127,6 +128,10 @@ class WF_Engine
127
  $wf_attr[] = $attr['value'];
128
  }
129
 
 
 
 
 
130
  if (strpos($attr['value'], 'wf_cattr_') !== false) {
131
  $wf_cattr[] = $attr['value'];
132
  }
@@ -153,6 +158,15 @@ class WF_Engine
153
  $this->storeProducts[$key][$cattr_value] = $this->productClass->getProductMeta($id,$cattr_value);
154
  }
155
  }
 
 
 
 
 
 
 
 
 
156
  }
157
  }
158
  }
95
  $default = $this->rules['default'];
96
 
97
 
98
+ $wf_attr = array();
99
+ $wf_cattr = array();
100
+ $wf_option = array();
101
 
102
  # Map Merchant Attributes and Woo Attributes
103
  $countAttr = 0;
128
  $wf_attr[] = $attr['value'];
129
  }
130
 
131
+ if ( strpos( $attr['value'], Woo_Feed_Products::WP_OPTION_PREFIX ) !== false ) {
132
+ $wf_option[] = $attr['value'];
133
+ }
134
+
135
  if (strpos($attr['value'], 'wf_cattr_') !== false) {
136
  $wf_cattr[] = $attr['value'];
137
  }
158
  $this->storeProducts[$key][$cattr_value] = $this->productClass->getProductMeta($id,$cattr_value);
159
  }
160
  }
161
+
162
+ // Get WP Option Value
163
+ if ( count( $wf_option ) ) {
164
+ foreach ( $wf_option as $wf_option_key => $wf_option_value ) {
165
+ $optionName = str_replace( 'wf_option_', '', $wf_option_value );
166
+ $optionValue = get_option( $optionName );
167
+ $this->storeProducts[ $key ][ $wf_option_value ] = $optionValue;
168
+ }
169
+ }
170
  }
171
  }
172
  }
includes/classes/class-woo-feed-products-v3.php CHANGED
@@ -256,6 +256,21 @@ class Woo_Feed_Products_v3
256
  */
257
  const PRODUCT_CATEGORY_MAPPING_PREFIX = 'wf_cmapping_';
258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  public function __construct( $config ) {
260
  $this->config = woo_feed_parse_feed_rules($config);
261
  $this->queryType = woo_feed_get_options('product_query_type');
@@ -1412,6 +1427,9 @@ class Woo_Feed_Products_v3
1412
  }elseif ( false !== strpos( $attribute, self::PRODUCT_CATEGORY_MAPPING_PREFIX ) ) {
1413
  $id = $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id();
1414
  $output = woo_feed_get_category_mapping_value( $attribute, $id );
 
 
 
1415
  } elseif ( 'image_' == substr($attribute, 0, 6) ) {
1416
  // For additional image method images() will be used with extra parameter - image number
1417
  $imageKey = explode('_', $attribute);
256
  */
257
  const PRODUCT_CATEGORY_MAPPING_PREFIX = 'wf_cmapping_';
258
 
259
+ /**
260
+ * WordPress Option Prefix
261
+ *
262
+ * @since 4.3.33
263
+ * @var string
264
+ * @author Nazrul Islam Nayan
265
+ */
266
+ const WP_OPTION_PREFIX = 'wf_option_';
267
+
268
+ /**
269
+ * Woo_Feed_Products_v3 constructor.
270
+ *
271
+ * @param $config
272
+ * @return void
273
+ */
274
  public function __construct( $config ) {
275
  $this->config = woo_feed_parse_feed_rules($config);
276
  $this->queryType = woo_feed_get_options('product_query_type');
1427
  }elseif ( false !== strpos( $attribute, self::PRODUCT_CATEGORY_MAPPING_PREFIX ) ) {
1428
  $id = $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id();
1429
  $output = woo_feed_get_category_mapping_value( $attribute, $id );
1430
+ } elseif ( false !== strpos( $attribute, self::WP_OPTION_PREFIX ) ) {
1431
+ $optionName = str_replace( self::WP_OPTION_PREFIX, '', $attribute );
1432
+ $output = get_option( $optionName );
1433
  } elseif ( 'image_' == substr($attribute, 0, 6) ) {
1434
  // For additional image method images() will be used with extra parameter - image number
1435
  $imageKey = explode('_', $attribute);
includes/classes/class-woo-feed-products.php CHANGED
@@ -67,8 +67,13 @@ class Woo_Feed_Products {
67
  public $feedRule;
68
  public $idExist = array();
69
  public $pi;
70
-
71
-
 
 
 
 
 
72
 
73
  public function wooProductQuery( $arg ) {
74
 
67
  public $feedRule;
68
  public $idExist = array();
69
  public $pi;
70
+ /**
71
+ * WordPress Option Prefix
72
+ *
73
+ * @since 4.3.33
74
+ * @var string
75
+ */
76
+ const WP_OPTION_PREFIX = 'wf_option_';
77
 
78
  public function wooProductQuery( $arg ) {
79
 
includes/helper.php CHANGED
@@ -4222,5 +4222,36 @@ if ( ! function_exists('woo_feed_exclude_feed_from_hyper_cache') ) {
4222
  }
4223
  }
4224
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4225
 
4226
  // End of file helper.php.
4222
  }
4223
  }
4224
 
4225
+ if ( ! function_exists( 'woo_feed_wp_options' ) ) {
4226
+ function woo_feed_wp_options() {
4227
+ if ( isset( $_GET['action'] ) && 'add-option' == $_GET['action'] ) {
4228
+ if ( count( $_POST ) && isset( $_POST['wpfp_option'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
4229
+ check_admin_referer( 'woo-feed-add-option' );
4230
+
4231
+ $options = get_option( 'wpfp_option', array() );
4232
+ $newOption = sanitize_text_field( $_POST['wpfp_option'] );
4233
+ $id = explode( '-', $newOption );
4234
+ if ( false !== array_search( $id[0], array_column( $options, 'option_id' ) ) ) { // found
4235
+ update_option( 'wpf_message', esc_html__( 'Option Already Added.', 'woo-feed' ), false );
4236
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=error' ) );
4237
+ die();
4238
+ } else {
4239
+ $options[ $id[0] ] = array(
4240
+ 'option_id' => $id[0],
4241
+ 'option_name' => 'wf_option_' . str_replace( $id[0] . '-', '', $newOption ),
4242
+ );
4243
+ update_option( 'wpfp_option', $options, false );
4244
+ update_option( 'wpf_message', esc_html__( 'Option Successfully Added.', 'woo-feed' ), false );
4245
+ wp_safe_redirect( admin_url( 'admin.php?page=webappick-wp-options&wpf_message=success' ) );
4246
+ die();
4247
+ }
4248
+ }
4249
+ require WOO_FEED_FREE_ADMIN_PATH . 'partials/woo-feed-add-option.php';
4250
+ } else {
4251
+ require WOO_FEED_FREE_ADMIN_PATH . 'partials/woo-feed-option-list.php';
4252
+ }
4253
+ }
4254
+ }
4255
+
4256
 
4257
  // End of file helper.php.
woo-feed.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
- * Version: 4.3.32
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
@@ -38,7 +38,7 @@ if ( ! defined( 'WOO_FEED_FREE_VERSION' ) ) {
38
  * @var string
39
  * @since 3.1.6
40
  */
41
- define( 'WOO_FEED_FREE_VERSION', '4.3.32' );
42
  }
43
 
44
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
+ * Version: 4.3.33
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
38
  * @var string
39
  * @since 3.1.6
40
  */
41
+ define( 'WOO_FEED_FREE_VERSION', '4.3.33' );
42
  }
43
 
44
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {