Post Snippets - Version 3.1

Version Description

Download this release

Release Info

Developer wpexpertsio
Plugin Icon 128x128 Post Snippets
Version 3.1
Comparing to
See all releases

Code changes from version 3.0.21 to 3.1

assets/post-snippets.js CHANGED
@@ -130,7 +130,7 @@ jQuery(document).ready(function ($) {
130
  'action': 'update_post_snippet_title',
131
  'key': key,
132
  'title': title,
133
- 'save_title_nonce' : post_snippets.save_title_nonce
134
  };
135
  $.post(ajaxurl, data, function (res) {
136
  if(res.success){
130
  'action': 'update_post_snippet_title',
131
  'key': key,
132
  'title': title,
133
+ 'save_title_nonce' : post_snippets.save_title_nonce,
134
  };
135
  $.post(ajaxurl, data, function (res) {
136
  if(res.success){
post-snippets.php CHANGED
@@ -12,7 +12,7 @@
12
  * Plugin Name: Post Snippets
13
  * Plugin URI: https://www.postsnippets.com
14
  * Description: Create a library of reusable content and insert it into your posts and pages. Navigate to "Settings > Post Snippets" to get started.
15
- * Version: 3.0.21
16
  * Author: Postsnippets
17
  * Author URI: https://www.postsnippets.com
18
  * License: GPL-2.0+
@@ -44,12 +44,9 @@ if ( !function_exists( 'postsnippets_fs' ) ) {
44
  'is_require_payment' => true,
45
  ),
46
  'menu' => array(
47
- 'slug' => 'post-snippets2Fpost-snippets.php',
48
  'contact' => false,
49
  'support' => false,
50
- 'parent' => array(
51
- 'slug' => 'options-general.php',
52
- ),
53
  ),
54
  'is_live' => true,
55
  ) );
@@ -64,13 +61,13 @@ if ( !function_exists( 'postsnippets_fs' ) ) {
64
  do_action( 'postsnippets_fs_loaded' );
65
  function postsnippets_fs_settings_url()
66
  {
67
- return admin_url( 'options-general.php?page=post-snippets' );
68
  }
69
 
70
- postsnippets_fs()->add_filter( 'connect_url', 'postsnippets_fs_settings_url' );
71
- postsnippets_fs()->add_filter( 'after_skip_url', 'postsnippets_fs_settings_url' );
72
- postsnippets_fs()->add_filter( 'after_connect_url', 'postsnippets_fs_settings_url' );
73
- postsnippets_fs()->add_filter( 'after_pending_connect_url', 'postsnippets_fs_settings_url' );
74
  /**
75
  * Only show Post Snippets submenu when PS is open, not on all Settings pages
76
  */
@@ -94,7 +91,7 @@ if ( !function_exists( 'postsnippets_fs' ) ) {
94
  define( 'PS_MAIN_FILE', basename( __FILE__ ) );
95
  }
96
  if ( !defined( 'PS_VERSION' ) ) {
97
- define( 'PS_VERSION', '3.0.21' );
98
  }
99
  if ( !defined( 'PS_MAIN_FILE_PATH' ) ) {
100
  define( 'PS_MAIN_FILE_PATH', __FILE__ );
@@ -109,7 +106,7 @@ if ( !function_exists( 'postsnippets_fs' ) ) {
109
  define( 'PS_URL', plugins_url( '', __FILE__ ) . '/' );
110
  }
111
  if ( !defined( 'PS_MAIN_PAGE_URL' ) ) {
112
- define( 'PS_MAIN_PAGE_URL', esc_url( admin_url( 'options-general.php?page=post-snippets' ) ) );
113
  }
114
  class PostSnippets
115
  {
12
  * Plugin Name: Post Snippets
13
  * Plugin URI: https://www.postsnippets.com
14
  * Description: Create a library of reusable content and insert it into your posts and pages. Navigate to "Settings > Post Snippets" to get started.
15
+ * Version: 3.1
16
  * Author: Postsnippets
17
  * Author URI: https://www.postsnippets.com
18
  * License: GPL-2.0+
44
  'is_require_payment' => true,
45
  ),
46
  'menu' => array(
47
+ 'slug' => 'post-snippets',
48
  'contact' => false,
49
  'support' => false,
 
 
 
50
  ),
51
  'is_live' => true,
52
  ) );
61
  do_action( 'postsnippets_fs_loaded' );
62
  function postsnippets_fs_settings_url()
63
  {
64
+ return admin_url( 'admin.php?page=post-snippets' );
65
  }
66
 
67
+ // postsnippets_fs()->add_filter( 'connect_url', 'postsnippets_fs_settings_url' );
68
+ // postsnippets_fs()->add_filter( 'after_skip_url', 'postsnippets_fs_settings_url' );
69
+ // postsnippets_fs()->add_filter( 'after_connect_url', 'postsnippets_fs_settings_url' );
70
+ // postsnippets_fs()->add_filter( 'after_pending_connect_url', 'postsnippets_fs_settings_url' );
71
  /**
72
  * Only show Post Snippets submenu when PS is open, not on all Settings pages
73
  */
91
  define( 'PS_MAIN_FILE', basename( __FILE__ ) );
92
  }
93
  if ( !defined( 'PS_VERSION' ) ) {
94
+ define( 'PS_VERSION', '3.1' );
95
  }
96
  if ( !defined( 'PS_MAIN_FILE_PATH' ) ) {
97
  define( 'PS_MAIN_FILE_PATH', __FILE__ );
106
  define( 'PS_URL', plugins_url( '', __FILE__ ) . '/' );
107
  }
108
  if ( !defined( 'PS_MAIN_PAGE_URL' ) ) {
109
+ define( 'PS_MAIN_PAGE_URL', esc_url( admin_url( 'admin.php?page=post-snippets' ) ) );
110
  }
111
  class PostSnippets
112
  {
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: wpexpertsio
3
  Tags: custom snippet, custom shortcode, snippet, snippets, shortcode, shortcodes, block, blocks, html
4
  Requires at least: 3.3
5
- Tested up to: 5.4.1
6
  Requires PHP: 5.3
7
- Stable tag: 3.0.21
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -107,6 +107,13 @@ your clients to be able to use PHP code in a post snippet.
107
 
108
  == Changelog ==
109
 
 
 
 
 
 
 
 
110
  = Version 3.0.21 - 2 May 2020 =
111
 
112
  * Improvement - Code Optimized to improve security
2
  Contributors: wpexpertsio
3
  Tags: custom snippet, custom shortcode, snippet, snippets, shortcode, shortcodes, block, blocks, html
4
  Requires at least: 3.3
5
+ Tested up to: 5.5
6
  Requires PHP: 5.3
7
+ Stable tag: 3.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
107
 
108
  == Changelog ==
109
 
110
+ = Version 3.1 - 20 aug 2020 =
111
+
112
+ * Fix - Post Snippets Blocks throwing error in WordPress 5.5
113
+ * Improvement - Improved import functionality
114
+ * Fix - Issues in freemius redirects
115
+ * Fix - POST_SNIPPETS_ALLOW_EDIT_POSTS not working
116
+
117
  = Version 3.0.21 - 2 May 2020 =
118
 
119
  * Improvement - Code Optimized to improve security
src/PostSnippets/Admin.php CHANGED
@@ -48,25 +48,14 @@ class Admin
48
  array( 'wp-blocks', 'wp-editor' ),
49
  true
50
  );
51
- }
52
-
53
- public function js_settings()
54
- {
55
  $snippets = get_option( \PostSnippets::OPTION_KEY );
56
- /*$data = array();
57
- foreach($snippets as $snippet) {
58
- $data [] = array(
59
- "title" => $snippet["title"],
60
- "vars" => $snippet["vars"],
61
- "shortcode" => $snippet["shortcode"] == 1
62
- );
63
- }*/
64
  if(isset($snippets) && !empty($snippets) && is_array($snippets)) {
65
  usort( $snippets, function ( $a, $b ) {
66
  return strcasecmp( $a["title"], $b["title"] );
67
  } );
68
  }
69
- wp_localize_script( 'jquery', 'post_snippets_s', $snippets );
70
  }
71
 
72
  // -------------------------------------------------------------------------
@@ -79,11 +68,10 @@ class Admin
79
  */
80
  public function menu()
81
  {
82
- $capability = 'manage_options';
83
 
84
- if ( defined( 'POST_SNIPPETS_ALLOW_EDIT_POSTS' ) and current_user_can( 'edit_posts' ) ) {
85
  $allowed = true;
86
- $capability = 'edit_posts';
87
  }
88
 
89
 
@@ -91,7 +79,7 @@ class Admin
91
  $optionPage = add_menu_page(
92
  __( 'Post Snippets', 'post-snippets' ),
93
  __( 'Post Snippets', 'post-snippets' ),
94
- 'manage_options',
95
  'post-snippets',
96
  array( $this, 'optionsPage' ),
97
  PS_URL . 'assets/icon.svg'
@@ -100,7 +88,7 @@ class Admin
100
  'post-snippets',
101
  __( 'News', 'post-snippets' ),
102
  __( 'News', 'post-snippets' ),
103
- 'manage_options',
104
  'post-snippets-news',
105
  array( $this, 'newsPage' )
106
  );
@@ -140,7 +128,6 @@ class Admin
140
  true
141
  );
142
  $this->scripts();
143
- $this->js_settings();
144
  $this->registerSettings();
145
  }
146
 
@@ -990,7 +977,8 @@ class Admin
990
  if ( empty($_POST['order']) || !is_array( $_POST['order'] ) ) {
991
  wp_send_json_error( 'order data not received' );
992
  }
993
- if ( !current_user_can( 'manage_options' ) ) {
 
994
  wp_send_json_error( 'permission denied' );
995
  }
996
  $orders = array_map( 'intval', $_POST['order'] );
@@ -1016,13 +1004,13 @@ class Admin
1016
  if ( !isset( $_POST['key'] ) || empty($_POST['title']) ) {
1017
  wp_send_json_error();
1018
  }
1019
-
1020
  if ( !wp_verify_nonce( $_POST['save_title_nonce'], 'ps-save-title-nonce' ) ) {
1021
  wp_send_json_error();
1022
  }
1023
 
1024
- if ( !current_user_can( 'manage_options' ) ) {
1025
- wp_send_json_error();
 
1026
  }
1027
  $pkey = intval( $_POST['key'] );
1028
  $title = sanitize_text_field( $_POST['title'] );
@@ -1058,8 +1046,10 @@ class Admin
1058
  if ( !wp_verify_nonce( $_POST['update_snippet_nonce'], 'ps-update-snippet-nonce' ) ) {
1059
  wp_send_json_error();
1060
  }
1061
- if ( !current_user_can( 'manage_options' ) ) {
1062
- wp_send_json_error();
 
 
1063
  }
1064
  $key = intval( $_POST['key'] );
1065
  $snippets = get_option( 'post_snippets_options', array() );
@@ -1087,4 +1077,14 @@ class Admin
1087
  wp_send_json_success( $title );
1088
  }
1089
 
 
 
 
 
 
 
 
 
 
 
1090
  }
48
  array( 'wp-blocks', 'wp-editor' ),
49
  true
50
  );
51
+
 
 
 
52
  $snippets = get_option( \PostSnippets::OPTION_KEY );
 
 
 
 
 
 
 
 
53
  if(isset($snippets) && !empty($snippets) && is_array($snippets)) {
54
  usort( $snippets, function ( $a, $b ) {
55
  return strcasecmp( $a["title"], $b["title"] );
56
  } );
57
  }
58
+ wp_localize_script( 'post-snippets-block', 'post_snippets_s', $snippets );
59
  }
60
 
61
  // -------------------------------------------------------------------------
68
  */
69
  public function menu()
70
  {
71
+ $capability = $this->get_allowed_capability();
72
 
73
+ if ( $capability == 'edit_posts' ) {
74
  $allowed = true;
 
75
  }
76
 
77
 
79
  $optionPage = add_menu_page(
80
  __( 'Post Snippets', 'post-snippets' ),
81
  __( 'Post Snippets', 'post-snippets' ),
82
+ $capability,
83
  'post-snippets',
84
  array( $this, 'optionsPage' ),
85
  PS_URL . 'assets/icon.svg'
88
  'post-snippets',
89
  __( 'News', 'post-snippets' ),
90
  __( 'News', 'post-snippets' ),
91
+ $capability,
92
  'post-snippets-news',
93
  array( $this, 'newsPage' )
94
  );
128
  true
129
  );
130
  $this->scripts();
 
131
  $this->registerSettings();
132
  }
133
 
977
  if ( empty($_POST['order']) || !is_array( $_POST['order'] ) ) {
978
  wp_send_json_error( 'order data not received' );
979
  }
980
+ $capability = $this->get_allowed_capability();
981
+ if ( !current_user_can( $capability ) ) {
982
  wp_send_json_error( 'permission denied' );
983
  }
984
  $orders = array_map( 'intval', $_POST['order'] );
1004
  if ( !isset( $_POST['key'] ) || empty($_POST['title']) ) {
1005
  wp_send_json_error();
1006
  }
 
1007
  if ( !wp_verify_nonce( $_POST['save_title_nonce'], 'ps-save-title-nonce' ) ) {
1008
  wp_send_json_error();
1009
  }
1010
 
1011
+ $capability = $this->get_allowed_capability();
1012
+ if ( !current_user_can( $capability ) ) {
1013
+ wp_send_json_error('permission denied');
1014
  }
1015
  $pkey = intval( $_POST['key'] );
1016
  $title = sanitize_text_field( $_POST['title'] );
1046
  if ( !wp_verify_nonce( $_POST['update_snippet_nonce'], 'ps-update-snippet-nonce' ) ) {
1047
  wp_send_json_error();
1048
  }
1049
+
1050
+ $capability = $this->get_allowed_capability();
1051
+ if ( !current_user_can( $capability ) ) {
1052
+ wp_send_json_error('permission denied');
1053
  }
1054
  $key = intval( $_POST['key'] );
1055
  $snippets = get_option( 'post_snippets_options', array() );
1077
  wp_send_json_success( $title );
1078
  }
1079
 
1080
+ public function get_allowed_capability(){
1081
+ $capability = 'manage_options';
1082
+
1083
+ if ( defined( 'POST_SNIPPETS_ALLOW_EDIT_POSTS' ) and current_user_can( 'edit_posts' ) ) {
1084
+ $capability = 'edit_posts';
1085
+ }
1086
+
1087
+ return $capability;
1088
+ }
1089
+
1090
  }
src/PostSnippets/ImportExport.php CHANGED
@@ -65,7 +65,10 @@ class ImportExport
65
  || empty($_FILES['postsnippets_import_file'])
66
  ) {
67
  $import .=
68
- '<p>'.__('Import snippets from a post-snippets-export.zip file. Importing overwrites any existing snippets.', 'post-snippets').
 
 
 
69
  '</p>';
70
  $import .= '<form method="post" enctype="multipart/form-data">';
71
  $import .= '<input type="file" name="postsnippets_import_file"/>';
@@ -100,19 +103,43 @@ class ImportExport
100
  'post_snippets_import',
101
  $snippets
102
  );
103
- update_option(
104
- \PostSnippets::OPTION_KEY,
105
- unserialize($snippets)
106
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  }
108
 
109
  // Delete the snippet file
110
  unlink('./'.self::FILE_CFG);
111
 
112
- $import .=
113
- '<p><strong>'.
114
- __('Snippets successfully imported.', 'post-snippets').
115
- '</strong></p>';
116
  } else {
117
  $import .=
118
  '<p><strong>'.
65
  || empty($_FILES['postsnippets_import_file'])
66
  ) {
67
  $import .=
68
+ '<p>'.__('Import snippets from a post-snippets-export.zip file. Imported sinppets will get added at the bottom.', 'post-snippets').
69
+ '</p>';
70
+ $import .=
71
+ '<p>'.__('Please make sure no snippets have duplicate titles.', 'post-snippets').
72
  '</p>';
73
  $import .= '<form method="post" enctype="multipart/form-data">';
74
  $import .= '<input type="file" name="postsnippets_import_file"/>';
103
  'post_snippets_import',
104
  $snippets
105
  );
106
+
107
+ $imported_snippets = unserialize($snippets);
108
+ $current_snippets = get_option( \PostSnippets::OPTION_KEY );
109
+
110
+ $all_snippets = $current_snippets;
111
+ $duplicate_title_exist = false;
112
+ $duplicate_title = '';
113
+ foreach($imported_snippets as $snippet){
114
+ $all_snippets[]=$snippet;
115
+ foreach($current_snippets as $current){
116
+ if($current['title'] == $snippet['title']){
117
+ $duplicate_title = $snippet['title'];
118
+ $duplicate_title_exist = true;
119
+ break;
120
+ }
121
+ }
122
+ }
123
+
124
+ if ($duplicate_title_exist == false) {
125
+ update_option( \PostSnippets::OPTION_KEY, $all_snippets );
126
+ $import .=
127
+ '<p><strong>'.
128
+ __('Snippets successfully imported.', 'post-snippets').
129
+ '</strong></p>';
130
+ } else {
131
+ $import .=
132
+ '<p><strong>'.
133
+ __('All the snippets should have unique titles. The snippet in your import file with title "'.$duplicate_title.'" already exists in your site.', 'post-snippets').
134
+ '</strong></p>';
135
+ }
136
+
137
  }
138
 
139
  // Delete the snippet file
140
  unlink('./'.self::FILE_CFG);
141
 
142
+
 
 
 
143
  } else {
144
  $import .=
145
  '<p><strong>'.