From b76b132b6f8ceaa88f3786f476249b9786a31d3f Mon Sep 17 00:00:00 2001 From: JeroenSormani Date: Wed, 18 May 2016 21:56:03 +0200 Subject: [PATCH 01/20] Clean up the uninstall.php file --- uninstall.php | 113 ++++++++++---------------------------------------- 1 file changed, 22 insertions(+), 91 deletions(-) diff --git a/uninstall.php b/uninstall.php index 3c46361..8f42004 100644 --- a/uninstall.php +++ b/uninstall.php @@ -12,8 +12,6 @@ global $wpdb; -$kbe_tbl_prefix = $wpdb->prefix; - //=========> Delete Plugin Settings From options Table delete_option( 'kbe_settings' ); delete_option( 'kbe_bgcolor' ); @@ -30,102 +28,35 @@ delete_option( 'widget_kbe_article_widget' ); delete_option( 'widget_kbe_category_widget' ); -//=========> Delete `terms_order` Column From trms Table -$wpdb->query( 'ALTER TABLE ' . $kbe_tbl_prefix . 'terms DROP COLUMN `terms_order`' ); - -//=========> Get Knowledgebase page and Delete all relivent Data -$kbe_get_page = $wpdb->get_results( 'Select * From ' . $wpdb->prefix . "posts - Where post_content like '%[kbe_knowledgebase]%' - and post_type = 'page'" ); - -foreach ( $kbe_get_page as $get_page ) { - $kbe_page_ID = $get_page->ID; - - //Delete all Knowledgebase page Relivent data from `postmeta` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "postmeta Where post_id = $kbe_page_ID" ); - - //Delete all Knowledgebase page Child data from `posts` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "posts Where post_parent = $kbe_page_ID" ); - - //Delete Knowledgebase page from `posts` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "posts Where ID = $kbe_page_ID" ); -} - -//=========> Get all Images of `kbe_knowledgebase` post type and Delete all Images Data -$kbe_get_post_images = $wpdb->get_results( 'Select * From ' . $wpdb->prefix . "posts Where post_type = 'kbe_knowledgebase'" ); - -$kbe_upload_dir = wp_upload_dir(); - -foreach ( $kbe_get_post_images as $get_post_images ) { - $kbe_posts_img_ID = $get_post_images->ID; - - $kbe_post_imgs_qry = $wpdb->get_results( 'Select * From ' . $wpdb->prefix . "posts - Where post_parent = $kbe_posts_img_ID - And post_type = 'attachment' - And post_mime_type = 'image/jpeg'" ); - foreach ( $kbe_post_imgs_qry as $get_post_img ) { - $kbe_img_ID = $get_post_img->ID; - - // Extract path from images - $kbe_img_path = get_post_meta( $kbe_img_ID, '_wp_attached_file', true ); - $kbe_main_img_name = substr( $kbe_img_path, strrpos( $kbe_img_path, '/' )+1 ); - $kbe_sub_path = substr( $kbe_img_path, 0, strrpos( $kbe_img_path, '/' ) ); +// Delete `terms_order` Column From terms Table +$wpdb->query( "ALTER TABLE {$wpdb->terms} DROP COLUMN `terms_order`" ); - $kbe_img_meta = get_post_meta( $kbe_img_ID, '_wp_attachment_metadata', true ); - - $kbe_thumbnail = $kbe_img_meta['sizes']['thumbnail']['file']; - $kbe_medium = $kbe_img_meta['sizes']['medium']['file']; - $kbe_post_thumbnail = $kbe_img_meta['sizes']['post-thumbnail']['file']; - - $kbe_upload_path = $kbe_upload_dir['basedir']; - - unlink( $kbe_upload_path . '/' . $kbe_sub_path . '/' . $kbe_main_img_name ); - unlink( $kbe_upload_path . '/' . $kbe_sub_path . '/' . $kbe_thumbnail ); - unlink( $kbe_upload_path . '/' . $kbe_sub_path . '/' . $kbe_medium ); - unlink( $kbe_upload_path . '/' . $kbe_sub_path . '/' . $kbe_post_thumbnail ); - - //Delete all Knowledgebase Posts from `posts` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "postmeta Where post_id = $kbe_img_ID" ); - } +// Delete Knowledgebase page +if ( $post_id = kbe_get_knowledgebase_page_id() ) { + wp_delete_post( $post_id, true ); } -//=========> Get all Posts of `kbe_knowledgebase` post type and Delete all relevant Data -$kbe_get_posts = $wpdb->get_results( 'Select * From ' . $wpdb->prefix . "posts Where post_type = 'kbe_knowledgebase'" ); - -foreach ( $kbe_get_posts as $get_posts ) { - $kbe_posts_ID = $get_posts->ID; - - //Delete all Comments of `kbe_knowledgebase` posts from `comments` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "comments Where comment_post_ID = $kbe_posts_ID" ); - - //Delete all Meta Data of `kbe_knowledgebase` posts from `postmeta` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "postmeta Where post_id = $kbe_posts_ID" ); - - //Delete all `kbe_knowledgebase` posts Realtion Data from `term_relationships` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "term_relationships Where object_id = $kbe_posts_ID" ); - - //Delete all `kbe_knowledgebase` Child data from `posts` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "posts Where post_parent = $kbe_posts_ID" ); - - //Delete all Knowledgebase Posts from `posts` Table - $wpdb->query( 'Delete From ' . $wpdb->prefix . "posts Where ID = $kbe_posts_ID" ); +// Delete the articles +$kbe_get_posts = $wpdb->get_results( "SELECT ID From {$wpdb->posts} WHERE post_type = 'kbe_knowledgebase' LIMIT 500" ); +foreach ( $kbe_get_posts as $post ) { + wp_delete_post( $post->ID, true ); } //=========> Delete All Categories and Tags of Knowledgebase -$kbe_get_terms = $wpdb->get_results( 'Select kbe_term.*, kbe_tax.* - From ' . $wpdb->prefix . 'terms As kbe_term - Inner join ' . $wpdb->prefix . "term_taxonomy As kbe_tax - On kbe_term.term_id = kbe_tax.term_id - Where kbe_tax.taxonomy = 'kbe_taxonomy' - Or kbe_tax.taxonomy = 'kbe_tags'" ); - -foreach ( $kbe_get_terms as $get_term ) { - $kbe_term_ID = $get_term->term_id; - - $wpdb->query( 'Delete From ' . $wpdb->prefix . "terms Where term_id = $kbe_term_ID" ); +$kbe_get_terms = $wpdb->get_results( + "SELECT kbe_term.term_id, kbe_tax.term_id + From {$wpdb->terms} As kbe_term + Inner join {$wpdb->term_taxonomy} As kbe_tax + On kbe_term.term_id = kbe_tax.term_id + WHERE kbe_tax.taxonomy = 'kbe_taxonomy' + OR kbe_tax.taxonomy = 'kbe_tags'" +); + +foreach ( $kbe_get_terms as $term ) { + $wpdb->query( "DELETE FROM {$wpdb->terms} WHERE term_id = $term->term_id" ); } //=========> Delete All Taxonomies and Tags of Knowledgebase -$wpdb->query( 'Delete From ' . $wpdb->prefix . "term_taxonomy Where taxonomy = 'kbe_taxonomy'" ); +$wpdb->query( "DELETE FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'kbe_taxonomy'" ); -$wpdb->query( 'Delete From ' . $wpdb->prefix . "term_taxonomy Where taxonomy = 'kbe_tags'" ); +$wpdb->query( "DELETE FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'kbe_tags'" ); From a772dc81774420c570a60720ca6e8ff94a9bf24b Mon Sep 17 00:00:00 2001 From: JeroenSormani Date: Thu, 19 May 2016 08:54:05 +0200 Subject: [PATCH 02/20] Revamping and improving settings. --- includes/admin/kbe-admin-functions.php | 86 +++++++++--- includes/admin/kbe-settings.php | 52 +++----- .../migrations/class-migration-manager.php | 1 + includes/migrations/migration-1-2-0.php | 75 +++++++++++ wp-knowledgebase.php | 124 ++---------------- 5 files changed, 170 insertions(+), 168 deletions(-) create mode 100644 includes/migrations/migration-1-2-0.php diff --git a/includes/admin/kbe-admin-functions.php b/includes/admin/kbe-admin-functions.php index 0c201ac..8bad3b5 100644 --- a/includes/admin/kbe-admin-functions.php +++ b/includes/admin/kbe-admin-functions.php @@ -42,33 +42,79 @@ function wp_kbe_options() { //=========> Register plugin settings function kbe_register_settings() { - register_setting( 'kbe_settings', 'kbe_settings', 'kbe_validate_settings' ); + + // Register each setting for automated $_POST handling + foreach ( kbe_get_settings() as $id => $setting ) { + + switch ( $setting['type'] ) { + case 'number' : + $sanitize_callback = 'absint'; + break; + case 'text' : + $sanitize_callback = 'sanitize_text_field'; + break; + case 'title' : + $sanitize_callback = 'sanitize_title'; + break; + case 'kbe_radio_switch' : + $sanitize_callback = 'sanitize_kbe_radio_switch'; + break; + + } + register_setting( 'kbe_settings', $id, $sanitize_callback ); + } } add_action( 'admin_init', 'kbe_register_settings' ); -/** - * Sanitize and validate plugin settings - * @param array $input - * @return array - * @since 1.1.0 - */ -function kbe_validate_settings( $input ) { - $input['kbe_plugin_slug'] = isset( $input['kbe_plugin_slug'] ) ? sanitize_title( $input['kbe_plugin_slug'] ) : ''; - $input['kbe_article_qty'] = intval( $input['kbe_article_qty'] ); - - $input['kbe_search_setting'] = isset( $input['kbe_search_setting'] ) && $input['kbe_search_setting'] ? 1 : 0 ; - $input['kbe_breadcrumbs_setting'] = isset( $input['kbe_breadcrumbs_setting'] ) && $input['kbe_breadcrumbs_setting'] ? 1 : 0 ; - - $sidebar_positions = array( 0, 1, 2 ); - $input['kbe_sidebar_home'] = isset( $input['kbe_sidebar_home'] ) && in_array( $input['kbe_sidebar_home'], $sidebar_positions ) ? intval( $input['kbe_sidebar_home'] ) : 0; - $input['kbe_sidebar_inner'] = isset( $input['kbe_sidebar_inner'] ) && in_array( $input['kbe_sidebar_inner'], $sidebar_positions ) ? intval( $input['kbe_sidebar_inner'] ) : 0; +function kbe_radio_switch_on_off( $v ) { + if ( $v == 1 ) { + return 1; + } + return 0; +} - $input['kbe_comments_setting'] = isset( $input['kbe_comments_setting'] ) && $input['kbe_comments_setting'] ? 1 : 0 ; +function kbe_radio_switch_lrn( $v ) { + if ( $v == 1 ) { + return 1; + } elseif ( $v == 2 ) { + return 2; + } + return 0; +} - $input['kbe_bgcolor'] = isset( $input['kbe_bgcolor'] ) ? $input['kbe_bgcolor'] : ''; +function kbe_get_settings() { + + return array( + 'kbe_plugin_slug' => array( + 'type' => 'title', + ), + 'kbe_article_qty' => array( + 'type' => 'number', + ), + 'kbe_search_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_breadcrumbs_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_sidebar_home' => array( + 'type' => 'kbe_radio_switch_lrn', // left, right, none option + ), + 'kbe_sidebar_inner' => array( + 'type' => 'kbe_radio_switch_lrn', // left, right, none option + ), + 'kbe_comments_setting' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + 'kbe_bgcolor' => array( + 'type' => 'color', + ), + 'kbe_wipe_uninstall' => array( + 'type' => 'kbe_radio_switch_on_off', + ), + ); - return $input; } //=========> KBE Custom Taxonomy Order diff --git a/includes/admin/kbe-settings.php b/includes/admin/kbe-settings.php index 6928fa8..85429ce 100644 --- a/includes/admin/kbe-settings.php +++ b/includes/admin/kbe-settings.php @@ -1,20 +1,6 @@ 'Knowledgebase', - 'kbe_article_qty' => 5, - 'kbe_search_setting' => 0, - 'kbe_breadcrumbs_setting' => 0, - 'kbe_sidebar_home' => 0, - 'kbe_sidebar_inner' => 0, - 'kbe_comments_setting' => 0, - 'kbe_bgcolor' => '', - 'kbe_wipe_uninstall' => 0, -); -$kbe_settings = wp_parse_args( get_option( 'kbe_settings' ), $kbe_defaults ); - ?>
@@ -64,11 +50,11 @@ ?> - @@ -76,7 +62,7 @@ @@ -102,11 +88,11 @@ @@ -116,15 +102,15 @@ @@ -133,15 +119,15 @@ @@ -150,11 +136,11 @@ @@ -164,7 +150,7 @@ @@ -172,11 +158,11 @@ diff --git a/includes/migrations/class-migration-manager.php b/includes/migrations/class-migration-manager.php index a485c29..e623fe4 100644 --- a/includes/migrations/class-migration-manager.php +++ b/includes/migrations/class-migration-manager.php @@ -40,6 +40,7 @@ public function __construct( $identifier ) { self::$migrations = array( 'migration-install.php' => 'KBE_Migration_Install', + 'migration-1-2-0.php' => 'KBE_Migration_1_2_0', ); foreach ( self::$migrations as $file => $class ) { diff --git a/includes/migrations/migration-1-2-0.php b/includes/migrations/migration-1-2-0.php new file mode 100644 index 0000000..0c5454e --- /dev/null +++ b/includes/migrations/migration-1-2-0.php @@ -0,0 +1,75 @@ +id = 'kbe-install-1-2-0'; + $this->notice_type = 'none'; + + parent::__construct(); + } + + /** + * Actually run the migration. + * + * @since 1.1.5 + * + * @return bool True when everything went as planned, false otherwise. + */ + public function migrate() { + + kbe_articles(); + kbe_taxonomies(); + kbe_custom_tags(); + flush_rewrite_rules(); + + global $wpdb; + /*Create "term_order" Field in "wp_terms" Table for sortable order*/ + $term_order_qry = $wpdb->query( "SHOW COLUMNS FROM $wpdb->terms LIKE 'terms_order'" ); + if ( $term_order_qry == 0 ) { + $wpdb->query( "ALTER TABLE $wpdb->terms ADD `terms_order` INT(4) NULL DEFAULT '0'" ); + } + + // Save settings as separate options + $settings = wp_parse_args( array( + 'kbe_article_qty' => get_option( 'kbe_article_qty', 5 ), + 'kbe_plugin_slug' => get_option( 'kbe_plugin_slug', 'knowledgebase' ), + 'kbe_search_setting' => get_option( 'kbe_search_setting', 0 ), + 'kbe_breadcrumbs_setting' => get_option( 'kbe_breadcrumbs_setting', 0 ), + 'kbe_sidebar_home' => get_option( 'kbe_sidebar_home', 0 ), + 'kbe_sidebar_inner' => get_option( 'kbe_sidebar_inner', 0 ), + 'kbe_comments_setting' => get_option( 'kbe_comments_setting', 0 ), + 'kbe_bgcolor' => get_option( 'kbe_bgcolor', '' ), + ), get_option( 'kbe_settings' ) ); + + update_option( 'kbe_article_qty', $settings['kbe_article_qty'] ); + update_option( 'kbe_plugin_slug', $settings['kbe_plugin_slug'] ); + update_option( 'kbe_search_setting', $settings['kbe_search_setting'] ); + update_option( 'kbe_breadcrumbs_setting', $settings['kbe_breadcrumbs_setting'] ); + update_option( 'kbe_sidebar_home', $settings['kbe_sidebar_home'] ); + update_option( 'kbe_sidebar_inner', $settings['kbe_sidebar_inner'] ); + update_option( 'kbe_comments_setting', $settings['kbe_comments_setting'] ); + update_option( 'kbe_bgcolor', $settings['kbe_bgcolor'] ); + + delete_option( 'kbe_settings' ); + + return true; + } + + +} diff --git a/wp-knowledgebase.php b/wp-knowledgebase.php index 5ae8049..b638669 100644 --- a/wp-knowledgebase.php +++ b/wp-knowledgebase.php @@ -45,128 +45,22 @@ function kbe_plugin_load_textdomain() { require 'includes/admin/kbe-admin-functions.php'; } -//=========> Create Hooks for WP Knowledgebase -function wp_kbe_hooks( $kbe_networkwide ) { - kbe_articles(); - kbe_taxonomies(); - kbe_custom_tags(); - flush_rewrite_rules(); - - global $wpdb; - /*Create "term_order" Field in "wp_terms" Table for sortable order*/ - $term_order_qry = $wpdb->query( "SHOW COLUMNS FROM $wpdb->terms LIKE 'terms_order'" ); - if ( $term_order_qry == 0 ) { - $wpdb->query( "ALTER TABLE $wpdb->terms ADD `terms_order` INT(4) NULL DEFAULT '0'" ); - } - - $kbe_optSlugSql = $wpdb->get_results( "Select * From {$wpdb->options} Where option_name like '%kbe_plugin_slug%'" ); - - if ( ! $kbe_optSlugSql ) { - add_option( 'kbe_plugin_slug', 'knowledgebase', '', 'yes' ); - } - - $kbe_optPageSql = $wpdb->get_results( "Select * From {$wpdb->options} Where option_name like '%kbe_article_qty%'" ); - - if ( ! $kbe_optPageSql ) { - add_option( 'kbe_article_qty', '5', '', 'yes' ); - } - - if ( function_exists( 'is_multisite' ) && is_multisite() ) { - // check if it is a network activation - if so, run the activation function for each blog id - if ( $kbe_networkwide ) { - $kbe_old_blog = $wpdb->blogid; - // Get all blog ids - $kbe_blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ); - foreach ( $kbe_blog_ids as $kbe_blog_id ) { - switch_to_blog( $kbe_blog_id ); - } - switch_to_blog( $kbe_old_blog ); - return; - } - } - - // serialize settings data - $kbe_settings = get_option( 'kbe_settings' ); - - $kbe_article_qty = get_option( 'kbe_article_qty' ); - $kbe_plugin_slug = get_option( 'kbe_plugin_slug' ); - $kbe_search_setting = get_option( 'kbe_search_setting' ); - $kbe_breadcrumbs_setting = get_option( 'kbe_breadcrumbs_setting' ); - $kbe_sidebar_home = get_option( 'kbe_sidebar_home' ); - $kbe_sidebar_inner = get_option( 'kbe_sidebar_inner' ); - $kbe_comments_setting = get_option( 'kbe_comments_setting' ); - $kbe_bgcolor = get_option( 'kbe_bgcolor' ); - - if ( $kbe_article_qty || $kbe_plugin_slug || $kbe_search_setting || $kbe_breadcrumbs_setting || $kbe_sidebar_home - || $kbe_sidebar_inner || $kbe_comments_setting || $kbe_bgcolor ) { - $kbe_settings_arr = array( - 'kbe_plugin_slug' => $kbe_plugin_slug, - 'kbe_article_qty' => $kbe_article_qty, - 'kbe_search_setting' => $kbe_search_setting, - 'kbe_breadcrumbs_setting' => $kbe_breadcrumbs_setting, - 'kbe_sidebar_home' => $kbe_sidebar_home, - 'kbe_sidebar_inner' => $kbe_sidebar_inner, - 'kbe_comments_setting' => $kbe_comments_setting, - 'kbe_bgcolor' => $kbe_bgcolor, - ); - $kbe_settings_ser = serialize( $kbe_settings_arr ); - - add_option( 'kbe_settings', $kbe_settings_ser, '', 'yes' ); - - delete_option( 'kbe_article_qty' ); - delete_option( 'kbe_plugin_slug' ); - delete_option( 'kbe_search_setting' ); - delete_option( 'kbe_breadcrumbs_setting' ); - delete_option( 'kbe_sidebar_home' ); - delete_option( 'kbe_sidebar_inner' ); - delete_option( 'kbe_comments_setting' ); - delete_option( 'kbe_bgcolor' ); - } -} - -register_activation_hook( __FILE__, 'wp_kbe_hooks' ); //=========> Define plugin path define( 'WP_KNOWLEDGEBASE', plugin_dir_url( __FILE__ ) ); - -// define options values -$kbe_settings = get_option( 'kbe_settings' ); -if ( isset( $kbe_settings['kbe_article_qty'] ) ) { - define( 'KBE_ARTICLE_QTY', $kbe_settings['kbe_article_qty'] ); -} -define( 'KBE_PLUGIN_SLUG', isset( $kbe_settings['kbe_plugin_slug'] ) ? $kbe_settings['kbe_plugin_slug'] : 'knowledgebase' ); - -if ( isset( $kbe_settings['kbe_search_setting'] ) ) { - define( 'KBE_SEARCH_SETTING', $kbe_settings['kbe_search_setting'] ); -} -if ( isset( $kbe_settings['kbe_breadcrumbs_setting'] ) ) { - define( 'KBE_BREADCRUMBS_SETTING', $kbe_settings['kbe_breadcrumbs_setting'] ); -} -if ( isset( $kbe_settings['kbe_sidebar_home'] ) ) { - define( 'KBE_SIDEBAR_HOME', $kbe_settings['kbe_sidebar_home'] ); -} -if ( isset( $kbe_settings['kbe_sidebar_inner'] ) ) { - define( 'KBE_SIDEBAR_INNER', $kbe_settings['kbe_sidebar_inner'] ); -} -if ( isset( $kbe_settings['kbe_comments_setting'] ) ) { - define( 'KBE_COMMENT_SETTING', $kbe_settings['kbe_comments_setting'] ); -} -if ( isset( $kbe_settings['kbe_bgcolor'] ) ) { - define( 'KBE_BG_COLOR', $kbe_settings['kbe_bgcolor'] ); -} +define( 'KBE_ARTICLE_QTY', get_option( 'kbe_article_qty' ) ); +define( 'KBE_PLUGIN_SLUG', get_option( 'kbe_plugin_slug' ) ); +define( 'KBE_SEARCH_SETTING', get_option( 'kbe_search_setting' ) ); +define( 'KBE_BREADCRUMBS_SETTING', get_option( 'kbe_breadcrumbs_setting' ) ); +define( 'KBE_SIDEBAR_HOME', get_option( 'kbe_sidebar_home' ) ); +define( 'KBE_SIDEBAR_INNER', get_option( 'kbe_sidebar_inner' ) ); +define( 'KBE_COMMENT_SETTING', get_option( 'kbe_comments_setting' ) ); +define( 'KBE_BG_COLOR', get_option( 'kbe_bgcolor' ) ); define( 'KBE_LINK_STRUCTURE', get_option( 'permalink_structure' ) ); define( 'KBE_POST_TYPE', 'kbe_knowledgebase' ); define( 'KBE_POST_TAXONOMY', 'kbe_taxonomy' ); define( 'KBE_POST_TAGS', 'kbe_tags' ); - -//=========> Get Knowledgebase title -global $wpdb; -$getSql = $wpdb->get_results( "Select ID From $wpdb->posts Where post_content Like '%[kbe_knowledgebase]%' And post_type <> 'revision'" ); - -foreach ( $getSql as $getRow ) { - $pageId = $getRow->ID; -} -define( 'KBE_PAGE_TITLE', $pageId ); +define( 'KBE_PAGE_TITLE', kbe_get_knowledgebase_page_id() ); From 9b36c71a1c7c905b9197315e850c5bcb225ce3c4 Mon Sep 17 00:00:00 2001 From: JeroenSormani Date: Thu, 19 May 2016 09:03:00 +0200 Subject: [PATCH 03/20] Ensure settings are migrated correctly --- includes/migrations/migration-1-2-0.php | 4 ++-- wp-knowledgebase.php | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/includes/migrations/migration-1-2-0.php b/includes/migrations/migration-1-2-0.php index 0c5454e..a8d7e70 100644 --- a/includes/migrations/migration-1-2-0.php +++ b/includes/migrations/migration-1-2-0.php @@ -46,7 +46,7 @@ public function migrate() { } // Save settings as separate options - $settings = wp_parse_args( array( + $settings = wp_parse_args( get_option( 'kbe_settings' ), array( 'kbe_article_qty' => get_option( 'kbe_article_qty', 5 ), 'kbe_plugin_slug' => get_option( 'kbe_plugin_slug', 'knowledgebase' ), 'kbe_search_setting' => get_option( 'kbe_search_setting', 0 ), @@ -55,7 +55,7 @@ public function migrate() { 'kbe_sidebar_inner' => get_option( 'kbe_sidebar_inner', 0 ), 'kbe_comments_setting' => get_option( 'kbe_comments_setting', 0 ), 'kbe_bgcolor' => get_option( 'kbe_bgcolor', '' ), - ), get_option( 'kbe_settings' ) ); + ) ); update_option( 'kbe_article_qty', $settings['kbe_article_qty'] ); update_option( 'kbe_plugin_slug', $settings['kbe_plugin_slug'] ); diff --git a/wp-knowledgebase.php b/wp-knowledgebase.php index b638669..da52f36 100644 --- a/wp-knowledgebase.php +++ b/wp-knowledgebase.php @@ -63,6 +63,5 @@ function kbe_plugin_load_textdomain() { define( 'KBE_PAGE_TITLE', kbe_get_knowledgebase_page_id() ); - require 'includes/migrations/class-abstract-migration.php'; require 'includes/migrations/migration-install.php'; From ab75208c527de0a37fcbdfb28840d615de34de64 Mon Sep 17 00:00:00 2001 From: JeroenSormani Date: Thu, 19 May 2016 09:04:48 +0200 Subject: [PATCH 04/20] Ensure settings are migrated correctly --- includes/admin/kbe-admin-functions.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/admin/kbe-admin-functions.php b/includes/admin/kbe-admin-functions.php index 8bad3b5..3108ebb 100644 --- a/includes/admin/kbe-admin-functions.php +++ b/includes/admin/kbe-admin-functions.php @@ -59,6 +59,9 @@ function kbe_register_settings() { case 'kbe_radio_switch' : $sanitize_callback = 'sanitize_kbe_radio_switch'; break; + case 'color' : + $sanitize_callback = 'wp_kses_post'; + break; } register_setting( 'kbe_settings', $id, $sanitize_callback ); From 599c8b1f7797db8dff0e61b2531af786d2df4c7b Mon Sep 17 00:00:00 2001 From: JeroenSormani Date: Sat, 21 May 2016 18:25:11 +0200 Subject: [PATCH 05/20] Add docblocks for most of the functions --- includes/admin/kbe-admin-functions.php | 36 ++++++++--- includes/kbe-articles.php | 86 +++++++++++++++++++++++--- includes/kbe-core-functions.php | 59 ++++++++++++++---- includes/kbe-template-functions.php | 31 ++++++++-- 4 files changed, 180 insertions(+), 32 deletions(-) diff --git a/includes/admin/kbe-admin-functions.php b/includes/admin/kbe-admin-functions.php index 0c201ac..0978a33 100644 --- a/includes/admin/kbe-admin-functions.php +++ b/includes/admin/kbe-admin-functions.php @@ -1,8 +1,13 @@ Enqueue color picker +/** + * Enqueue scripts. + * + * Enqueue the required stylesheets and javascripts in the admin. + * + * @param string $hook_suffix Current page ID. + */ function kbe_admin_scripts( $hook_suffix ) { // Settings page if ( $hook_suffix == 'kbe_knowledgebase_page_kbe_options' ) { @@ -22,25 +27,42 @@ function kbe_admin_scripts( $hook_suffix ) { } add_action( 'admin_enqueue_scripts', 'kbe_admin_scripts' ); -//=========> Plugin menu +/** + * Add submenus. + * + * Add submenus for the custom added pages. + * + * @since 1.0 + */ function kbe_plugin_menu() { add_submenu_page( 'edit.php?post_type=kbe_knowledgebase', 'Order', 'Order', 'manage_options', 'kbe_order', 'wp_kbe_order' ); add_submenu_page( 'edit.php?post_type=kbe_knowledgebase', 'Settings', 'Settings', 'manage_options', 'kbe_options', 'wp_kbe_options' ); } add_action( 'admin_menu', 'kbe_plugin_menu' ); -// Require File kbe_order.php +/** + * Output order page. + * + * Output the HTML for the 'order' page. + * + * @since 1.0 + */ function wp_kbe_order() { require dirname( __FILE__ ) . '/../kbe-order.php'; } -//=========> Require Files -// kbe_settings.php +/** + * Output settings page. + * + * Output the HTML for the settings page. + * + * @since 1.0 + */ function wp_kbe_options() { require 'kbe-settings.php'; } -//=========> Register plugin settings + function kbe_register_settings() { register_setting( 'kbe_settings', 'kbe_settings', 'kbe_validate_settings' ); } diff --git a/includes/kbe-articles.php b/includes/kbe-articles.php index 4ba7e33..bacd95f 100644 --- a/includes/kbe-articles.php +++ b/includes/kbe-articles.php @@ -1,11 +1,13 @@ __( 'Knowledgebase', 'wp-knowledgebase' ), @@ -52,7 +54,13 @@ function kbe_articles() { } add_action( 'init', 'kbe_articles' ); -// Article taxonomy +/** + * Register KB taxonomies. + * + * Register the 'category' taxonomy for the Articles post type. + * + * @since 1.0.0 + */ function kbe_taxonomies() { // Add new taxonomy, make it hierarchical (like categories) $labels = array( @@ -81,6 +89,13 @@ function kbe_taxonomies() { } add_action( 'init', 'kbe_taxonomies', 0 ); +/** + * Register KB taxonomies. + * + * Register the 'tag' taxonomy for the Articles post type. + * + * @since 1.0.0 + */ function kbe_custom_tags() { $labels = array( 'name' => __( 'Knowledgebase Tags', 'wp-knowledgebase' ), @@ -105,6 +120,15 @@ function kbe_custom_tags() { } add_action( 'init', 'kbe_custom_tags', 0 ); +/** + * Update article view count. + * + * Update/set the article view count by adding a count. + * + * @since 1.0 + * + * @param int $postID Post ID to add the count to. + */ function kbe_set_post_views( $postID ) { $count_key = 'kbe_post_views_count'; $count = get_post_meta( $postID, $count_key, true ); @@ -119,8 +143,19 @@ function kbe_set_post_views( $postID ) { } //To keep the count accurate, lets get rid of prefetching +// @todo - what does this do? remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 ); +/** + * Get article view count. + * + * Get the view count for a article post. + * + * @since 1.0 + * + * @param int $postID Post ID to get the view count for. + * @return string View count with string text. + */ function kbe_get_post_views( $postID ) { $count_key = 'kbe_post_views_count'; $count = get_post_meta( $postID, $count_key, true ); @@ -133,13 +168,31 @@ function kbe_get_post_views( $postID ) { return $count . ' Views'; } - +/** + * Article custom columns. + * + * Add custom columns to the Article post type. + * + * @since 1.0 + * + * @param $existing_columns List of existing columns. + * @return array List of modified columns. + */ function kbe_edit_columns( $existing_columns ) { $columns = array( 'views' => __( 'Views', 'kbe' ) ); return array_merge( $existing_columns, $columns ); } add_filter( 'manage_edit-kbe_knowledgebase_columns', 'kbe_edit_columns', 10 ); +/** + * Fill custom columns. + * + * Fill the newly added custom columns with the proper content. + * + * @since 1.0. + * + * @param string $column Column being processed/output. + */ function kbe_custom_columns( $column ) { global $post; switch ( $column ) { @@ -151,12 +204,31 @@ function kbe_custom_columns( $column ) { } add_action( 'manage_kbe_knowledgebase_posts_custom_column', 'kbe_custom_columns' ); +/** + * Make custom columns sortable. + * + * Make the custom added columns sortable. + * + * @since 1.2.0 + * + * @param array $columns List of existing sortable columns. + * @return mixed List of modified sortable columns. + */ function kbe_sortable_custom_columns( $columns ) { $columns['views'] = 'views'; return $columns; } add_filter( 'manage_edit-kbe_knowledgebase_sortable_columns', 'kbe_sortable_custom_columns' ); +/** + * Actually sort columns. + * + * Actually modify the query that sorts the articles to sort them by the new order option. + * + * @since 1.2.0 + * + * @param WP_Query $query Query that is being processed. + */ function kbe_sort_custom_columns( $query ) { if ( ! is_admin() || ! $query->is_main_query() ) { diff --git a/includes/kbe-core-functions.php b/includes/kbe-core-functions.php index fa131e7..8dab146 100644 --- a/includes/kbe-core-functions.php +++ b/includes/kbe-core-functions.php @@ -1,8 +1,13 @@ Enqueue KBE Style file in header.php +/** + * Enqueue scripts. + * + * Enqueue the required stylesheets and javascripts on the front end. + * + * @since 1.0 + */ function kbe_styles() { if ( file_exists( get_stylesheet_directory() . '/wp_knowledgebase/kbe_style.css' ) ) { $stylesheet = get_stylesheet_directory_uri() . '/wp_knowledgebase/kbe_style.css'; @@ -17,7 +22,13 @@ function kbe_styles() { } add_action( 'wp_enqueue_scripts', 'kbe_styles' ); -//=========> Registering KBE widget area +/** + * Register widget area. + * + * Register a widget area that is used on the KB pages. + * + * @since 1.0 + */ function kbe_register_sidebar() { register_sidebar( array( 'name' => __( 'WP Knowledgebase Sidebar', 'wp-knowledgebase' ), @@ -31,6 +42,13 @@ function kbe_register_sidebar() { } add_action( 'widgets_init', 'kbe_register_sidebar' ); +/** + * Required search JS code. + * + * Javascript code required for the Search feature to work properly. + * + * @since 1.0 + */ function kbe_search_drop() { if ( KBE_SEARCH_SETTING == 1 ) { ?>
+ - +
- +

@@ -88,11 +74,11 @@

- > + > - > + >   - > + > - > + >   - > + > - > + > - > + >
- > + > - > + > - > + >
- > + > - > + >   - +
- > + > - > + > @@ -186,7 +172,7 @@
- +