Skip to content

Commit

Permalink
Remove internal QTS filter hooks (#1176)
Browse files Browse the repository at this point in the history
* Remove internal QTS filter hooks

The QTS filters come from the legacy plugin. There's no clear
justification to use those in QTX.

For easier maintenance remove those filters and replace them
with direct calls instead.

Rename validate term/post slugs as sanitize.
Fix phpdoc.

* Revert checks on empty slug strings
  • Loading branch information
herrvigg authored May 29, 2022
1 parent d75c121 commit 7f44a11
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 52 deletions.
82 changes: 39 additions & 43 deletions modules/slugs/admin/slugs-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
include_once( dirname( __FILE__ ) . '/slugs-settings.php' );

// add filters
add_filter( 'qts_validate_post_slug', 'qts_validate_post_slug', 0, 3 );
add_filter( 'qts_validate_post_slug', 'qts_unique_post_slug', 1, 3 );
add_filter( 'qts_validate_term_slug', 'qts_validate_term_slug', 0, 3 );
add_filter( 'qts_validate_term_slug', 'qts_unique_term_slug', 1, 3 );
add_filter( 'wp_get_object_terms', 'qts_get_object_terms', 0, 4 );
add_filter( 'get_terms', 'qts_get_terms', 0, 3 );
// admin actions
Expand Down Expand Up @@ -143,27 +139,25 @@ function qts_draw_meta_box( $post ) {
}

/**
* Sanitize title as slug, if empty slug.
* Sanitize a post slug for a given language.
*
* @param $post (object) the post object
* @param $slug (string) the slug name
* @param $lang (string) the language
* @param string $slug slug name
* @param WP_Post $post the post object
* @param string $lang the language
*
* @return string the slug validated
* @return string sanitized slug
*/
function qts_validate_post_slug( $slug, $post, $lang ) {
function qts_sanitize_post_slug( $slug, $post, $lang ) {
$post_title = trim( qtranxf_use( $lang, $post->post_title ) );
$post_name = get_post_meta( $post->ID, QTS_META_PREFIX . $lang, true );
if ( ! $post_name ) {
$post_name = $post->post_name;
}

//TODO: if has a slug, test and use it
//TODO: and then replace the default slug with the dafault language slug
//TODO: and then replace the default slug with the default language slug
$name = ( $post_title === '' ) ? $post_name : $post_title;

$slug = trim( $slug );

$slug = ( $slug === '' ) ? sanitize_title( $name ) : sanitize_title( $slug );

return htmlspecialchars( $slug, ENT_QUOTES );
Expand All @@ -172,9 +166,9 @@ function qts_validate_post_slug( $slug, $post, $lang ) {
/**
* Validates post slug against repetitions per language
*
* @param $post (object) the post object
* @param $slug (string) the slug name
* @param $lang (string) the language
* @param string $slug the slug name
* @param WP_Post $post the post object
* @param string $lang the language
*
* @return string the slug validated
*/
Expand Down Expand Up @@ -257,8 +251,8 @@ function qts_wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $po
/**
* Saves the translated slug when the page is saved.
*
* @param $post_id int the post id
* @param $post object the post object
* @param int $post_id the post id
* @param WP_Post $post the post object
*
* @return void
*/
Expand All @@ -269,33 +263,35 @@ function qts_save_postdata( $post_id, $post = null ) {
}
$post_type_object = get_post_type_object( $post->post_type );

if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) // check autosave
|| ( ! isset( $_POST['post_ID'] ) || $post_id != $_POST['post_ID'] ) // check revision
|| ( isset( $_POST['qts_nonce'] ) && ! wp_verify_nonce( $_POST['qts_nonce'], 'qts_nonce' ) ) // verify nonce
|| ( ! current_user_can( $post_type_object->cap->edit_post, $post_id ) ) ) { // check permission
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
|| ( ! isset( $_POST['post_ID'] ) || $post_id != $_POST['post_ID'] )
|| ( isset( $_POST['qts_nonce'] ) && ! wp_verify_nonce( $_POST['qts_nonce'], 'qts_nonce' ) )
|| ( ! current_user_can( $post_type_object->cap->edit_post, $post_id ) ) ) {
return;
}
foreach ( $q_config['enabled_languages'] as $lang ) {

// check required because it is not available inside quick edit
if ( isset( $_POST["qts_{$lang}_slug"] ) ) {
$meta_value = apply_filters( 'qts_validate_post_slug', $_POST["qts_{$lang}_slug"], $post, $lang );
$slug = $_POST["qts_{$lang}_slug"];
$slug = qts_sanitize_post_slug( $slug, $post, $lang );
$slug = qts_unique_post_slug( $slug, $post, $lang );

delete_post_meta( $post_id, QTS_META_PREFIX . $lang );
update_post_meta( $post_id, QTS_META_PREFIX . $lang, $meta_value );
update_post_meta( $post_id, QTS_META_PREFIX . $lang, $slug );
}
}
}

/**
* Sanitize title as slug, if empty slug.
* Sanitize a term slug.
*
* @param $term (object) the term object
* @param $slug (string) the slug name
* @param $lang (string) the language
* @param string $slug the slug name
* @param WP_Term $term the term object
* @param string $lang the language
*
* @return string the slug validated
* @return string sanitized slug
*/
function qts_validate_term_slug( $slug, $term, $lang ) {
function qts_sanitize_term_slug( $slug, $term, $lang ) {
global $q_config;

$term_name = trim( qtranxf_use( $lang, $term->name, false, true ) );
Expand All @@ -309,13 +305,13 @@ function qts_validate_term_slug( $slug, $term, $lang ) {
}

/**
* Will make slug unique per language, if it isn't already.
* Make a term slug unique for a given language.
*
* @param string $slug The string that will be tried for a unique slug
* @param object $term The term object that the $slug will belong too
* @param object $lang The language reference
* @param string $slug term slug to be made unique
* @param WP_Term $term the term object the slug belongs to
* @param object $lang language
*
* @return string Will return a true unique slug.
* @return string unique slug
*
* @since 1.0
*/
Expand Down Expand Up @@ -361,22 +357,22 @@ function qts_unique_term_slug( $slug, $term, $lang ) {
function qts_save_term( $term_id, $tt_id, $taxonomy ) {
global $q_config;
$cur_screen = get_current_screen();
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) // check autosave
|| ( ! current_user_can( 'edit_posts' ) ) // check permission
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
|| ( ! current_user_can( 'edit_posts' ) )
|| ( isset( $cur_screen ) && $cur_screen->id === "nav-menus" ) //TODO: check if this condition is really needed
) {
return;
}

$term = get_term( $term_id, $taxonomy );
foreach ( $q_config['enabled_languages'] as $lang ) {
//condition is needed in case term is added through ajax e.g. in post edit page
$term_slug = isset( $_POST["qts_{$lang}_slug"] ) ? $_POST["qts_{$lang}_slug"] : '';

$meta_value = apply_filters( 'qts_validate_term_slug', $term_slug, $term, $lang );
// condition is needed in case term is added through ajax e.g. in post edit page
$slug = isset( $_POST["qts_{$lang}_slug"] ) ? $_POST["qts_{$lang}_slug"] : '';
$slug = qts_sanitize_term_slug( $slug, $term, $lang );
$slug = qts_unique_term_slug( $slug, $term, $lang );

delete_metadata( 'term', $term_id, QTS_META_PREFIX . $lang );
update_metadata( 'term', $term_id, QTS_META_PREFIX . $lang, $meta_value );
update_metadata( 'term', $term_id, QTS_META_PREFIX . $lang, $slug );
}
}

Expand Down
16 changes: 7 additions & 9 deletions modules/slugs/src/slugs-class-slugs.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ function init() {
remove_filter( 'category_link', 'qtranxf_convertURL' ); //TODO: check if it is needed
remove_filter( 'tag_link', 'qtranxf_convertURL' ); //TODO: check if it is needed

add_filter( 'qts_permastruct', array( &$this, 'get_extra_permastruct' ), 0, 2 );
add_filter( 'qts_url_args', array( &$this, 'parse_url_args' ), 0, 1 );
add_filter( 'home_url', array( &$this, 'home_url' ), 10, 4 );
add_filter( 'post_type_link', array( &$this, 'post_type_link' ), 600, 4 );
add_filter( 'post_link', array( &$this, 'post_link' ), 0, 3 );
Expand Down Expand Up @@ -176,7 +174,6 @@ public function get_base_slug( $name = false, $lang = false ) {
* Parse and adds $_GET args passed to an URL.
*
* @param string $url parameters
* @param string $lang processed
*
* @return string converted URL
*/
Expand Down Expand Up @@ -494,9 +491,9 @@ function filter_request( $query ) {
if ( isset( $function ) && isset( $id ) ) {
// parse all languages links
foreach ( $q_config['enabled_languages'] as $lang ) {

$this->temp_lang = $lang;
$this->current_url[ $lang ] = esc_url( apply_filters( 'qts_url_args', call_user_func( $function, $id ) ) );
$url = call_user_func( $function, $id );
$this->current_url[ $lang ] = esc_url( $this->parse_url_args( $url ) );
}
$this->temp_lang = false;
}
Expand Down Expand Up @@ -603,7 +600,8 @@ public function post_type_link( $link, $post, $leavename, $sample ) {
return $post;
}

$post_link = apply_filters( 'qts_permastruct', $wp_rewrite->get_extra_permastruct( $post->post_type ), $post->post_type );
$permastruct = $wp_rewrite->get_extra_permastruct( $post->post_type );
$post_link = $this->get_extra_permastruct( $permastruct, $post->post_type );

$slug = get_post_meta( $post->ID, QTS_META_PREFIX . $this->get_temp_lang(), true );
if ( ! $slug ) {
Expand Down Expand Up @@ -820,9 +818,9 @@ public function term_link( $link, $term, $taxonomy ) {
return $term;
}

$taxonomy = $term->taxonomy;

$termlink = apply_filters( 'qts_permastruct', $wp_rewrite->get_extra_permastruct( $taxonomy ), $taxonomy );
$taxonomy = $term->taxonomy;
$permastruct = $wp_rewrite->get_extra_permastruct( $taxonomy );
$termlink = $this->get_extra_permastruct( $permastruct, $taxonomy );

$slug = get_metadata( 'term', $term->term_id, QTS_META_PREFIX . $this->get_temp_lang(), true );
if ( ! $slug ) {
Expand Down

0 comments on commit 7f44a11

Please sign in to comment.