Skip to content

Widget Visibility: add ability to match ALL conditions.#6327

Merged
dereksmart merged 9 commits intomasterfrom
fix/visibility-condition-issues
Feb 28, 2017
Merged

Widget Visibility: add ability to match ALL conditions.#6327
dereksmart merged 9 commits intomasterfrom
fix/visibility-condition-issues

Conversation

@zinigor
Copy link
Copy Markdown
Contributor

@zinigor zinigor commented Feb 8, 2017

This fixes issue #852. (Replay of #3289 by @atrus1701 )

Add the option to match all conditions specified for the widget.

This is related to Pull Request #3210. This original Pull Request contained several fixes that are being broken out into several smaller requests.

@zinigor zinigor added [Feature] Widget Visibility [Status] Needs Review This PR is ready for review. Bug When a feature is broken and / or not performing as intended labels Feb 8, 2017
@zinigor
Copy link
Copy Markdown
Contributor Author

zinigor commented Feb 8, 2017

Master issue: #5781

@zinigor
Copy link
Copy Markdown
Contributor Author

zinigor commented Feb 9, 2017

I have added a couple of fixes:

  • The match_all flag would not work properly if any of the conditions were met, now the logic checks all conditions.
  • The checkbox is now under the conditions and has some padding.

Copy link
Copy Markdown
Contributor

@georgestephanis georgestephanis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we're going to add a "Match all" checkbox, wouldn't it make more sense to do it up top with the original prompt changed to two dropdowns -- something like ...

(Show|Hide) if (All|Any|None) of the following conditions match:

?

break;
case 'posts':
$condition_result = $wp_query->is_posts_page;
$condition_result = is_single();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a definite change -- is_posts_page returns true for the posts archive view when there's a page on the site's home. is_single() returns true on a page's permalink, non-archive view.

https://github.com/WordPress/WordPress/blob/9d7ea04936125041b224b227f48ad4194066b314/wp-includes/class-wp-query.php#L1008

<span class="condition-conjunction"><?php echo esc_html_x( 'or', 'Shown between widget visibility conditions.', 'jetpack' ); ?></span>
<span class="condition-conjunction">
<?php
echo esc_html_x( 'or', 'Shown between widget visibility conditions.', 'jetpack' );
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This probably shouldn't be broken out onto it's own line from the php opening and closing tags.

if ( empty( $conditions['rules'] ) )
$conditions['rules'][] = array( 'major' => '', 'minor' => '', 'has_children' => '' );

if ( ! isset( $conditions['match_all'] ) )
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conditionals need braces.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, may be better to use empty() here.

} elseif ( $rule['minor'] == get_option( 'page_for_posts' ) ) {
// If $rule['minor'] is a page ID which is also the posts page
$condition_result = $wp_query->is_posts_page;
$condition_result = is_single();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same concern as above. Breaking existing behavior by testing for something different.


// In case the match_all flag was set we quit on first failed condition
break;
} elseif(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs a space between elseif and (

break;
} elseif(
(
! isset( $instance['conditions']['match_all'] )
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, may be more readable as empty() instead of negating.

'show' == $instance['conditions']['action']
&& ! $condition_result
)
|| (
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally find broken out conditionals like this to be harder to read, but if we do, can we please do it as ) || ( instead?

@jeherve jeherve added [Status] In Progress [Status] Needs Author Reply We need more details from you. This label will be auto-added until the PR meets all requirements. and removed [Status] Needs Review This PR is ready for review. labels Feb 16, 2017
@zinigor
Copy link
Copy Markdown
Contributor Author

zinigor commented Feb 22, 2017

Thanks for the review George! I have fixed the problems you have found. As with the checkbox - I think we need a design review here. This is what the condition table currently looks like:
conditions

@zinigor zinigor added [Status] Needs Design Review Design has been added. Needs a review! [Status] Needs Review This PR is ready for review. and removed [Status] In Progress [Status] Needs Author Reply We need more details from you. This label will be auto-added until the PR meets all requirements. labels Feb 22, 2017
@zinigor
Copy link
Copy Markdown
Contributor Author

zinigor commented Feb 22, 2017

For reference that's what it looks like in master. I see that the styles and images for some things are missing, I'll fix that. But the main thing is that we need to figure out where to put the checkbox best.
master

Copy link
Copy Markdown
Contributor

@georgestephanis georgestephanis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it looks right now.

I'd still prefer a editorial review for clarity, so the checkbox makes it clear it's switching from ANY of the conditions to ALL of the conditions.

Perhaps we could add some JS to change the .condition-conjunction from or to and when the checkbox is selected?

It can probably merge as-is, if you open a subsequent issue for added clarity on that.

@zinigor zinigor force-pushed the fix/visibility-condition-issues branch from eee6fdd to a71c15d Compare February 27, 2017 10:56
@zinigor
Copy link
Copy Markdown
Contributor Author

zinigor commented Feb 27, 2017

I have rebased this PR and added the following changes:

  • JSHint no longer has any warnings about the JS file;
  • The delimiter between the conditions now displays "or"/"and" based on the status of the "Match all" checkbox:

deselected

selected

Since @MichaelArestad has given this one a 👍 , I'm removing the Desing Needed label, and since @georgestephanis has given this a 👍 , I'm putting the PR into Ready to Merge mode.

@zinigor zinigor added [Status] Ready to Merge Go ahead, you can push that green button! and removed [Status] Needs Design Review Design has been added. Needs a review! [Status] Needs Review This PR is ready for review. labels Feb 27, 2017
} elseif (
(
empty( $instance['conditions']['match_all'] )
|| $instance['conditions']['match_all'] !== '1'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be yoda style

if ( $condition_result )
if (
isset( $instance['conditions']['match_all'] )
&& $instance['conditions']['match_all'] == '1'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yoda style please

Copy link
Copy Markdown
Contributor

@dereksmart dereksmart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upon checking out the branch, I'm seeing both or and for the conditionals.

Edit: FIXED after re-building

Copy link
Copy Markdown
Contributor

@dereksmart dereksmart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When there is only one conditional set, and the checkbox is not checked, I see and when I expect to see or or nothing at all:

Edit: FIXED after re-building

@dereksmart dereksmart dismissed their stale review February 28, 2017 14:57

Fixed after re-building

Copy link
Copy Markdown
Contributor

@dereksmart dereksmart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works as expected

@dereksmart dereksmart merged commit 3bd8d9e into master Feb 28, 2017
@dereksmart dereksmart deleted the fix/visibility-condition-issues branch February 28, 2017 15:21
@dereksmart dereksmart added [Status] Needs Changelog and removed [Status] Ready to Merge Go ahead, you can push that green button! labels Feb 28, 2017
jeherve added a commit that referenced this pull request Feb 28, 2017
dereksmart pushed a commit that referenced this pull request Feb 28, 2017
* Changelog: update stable tag and move changelog to changelog.txt

Also remove old releases from readme.txt to keep the changelog tab short.

* Changelog: add #5883

Also update the filter's docblock to match new version.

* Changelog: add #5938

* Changelog: add #6298

* Changelog: add #3405

* Changelog: add #5941

* Changelog: add #6239

* Changelog: add #6281

* Changelog: add #6303

* Changelog: add #6018

* Changelog: add #6300

* Changelog: add #6296

* Changelog: add #6130

* Changelog: add #6292

* Readme: remove extra "on".

* Changelog: add #6307

* Changelog: add #3297

* Changelog: add #6275

* Changelog: add #6321

* Changelog: add #6297

* Readme: update the support forum link anchor.

Anchor changed when WordPress.org forums were updated to bbPress 2

* Readme: update list of a12s, it wasn't up to date anymore!

* Changelog: add #6338

* Changelog: add #6337

* Changelog: add #6335

* Changelog: add #6333

* Testing List: first version of the 4.7 testing list.

* Changelog: add #6332

* Changelog: add #6325

* Changelog: add #6326

* Changelog: add #6339

* Changelog: add #6342

* Changelog: add #6343

* Changelog: add #6346

* Changelog: add #6347

* Changelog: add #6279

* Changelog: add #6306

* Changelog: add #6312

* Changelog: add #6316

* Changelog: add #6171

* Changelog: add #6317

* Changelog: add #6246

* Changelog: add #6263

* Changelog: add #4220

* Changelog: add #5888

* Changelog: add #3406

* Changelog: add #3637

* Changelog: add #6320

* Changelog: add #5992

* Changelog: add #6322

* Changelog: add #6324

* Changelog: add #6352

* Changelog: add #6355

* Changelog: add #6360

* Changelog: add #6362

* Changelog: add #6369, #6382

* Changelog: add #6370

* Changelog: add #6375

* Changelog: add #6383

* Changelog: add #6384

* Changelog: add #6386

* Changelog: add #6395

* Changelog: add #6403

* Changelog: add #6406

* Changelog: add #6418

* Changelog: add #6419

* Changelog: add #6434

* Changelog: add #6446

* Changelog: add #6006

* Changelog: add #6096

* Changelog: add #6399

* Changelog: fix typo.

@see #6331 (comment)

* Changelog: add #6440

* Changelog: add #6443

* Changelog: add #6445

* Changelog: add #6463

* Changelog: add #6468

* Changelog: add #6471

* Changelog: add #6474

* Changelog: add #6480

* Changelog: add #6497

* Changelog: add #6499

* Changelog: add #6514

* Changelog: add #6267

* Changelog: add #5940

* Changelog: add #6492

* Changelog: add #5281

* Changelog: add #6327

* Changelog: add #6451

* Changelog: add #6525

* Changelog: add #6530
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug When a feature is broken and / or not performing as intended [Feature] Widget Visibility Touches WP.com Files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants