PDA

View Full Version : [RESOLVED] Conditions being ignored when viewed by guest


Makaze
07-17-2017, 03:07 PM
I am editing a template with the following conditional structure:

<vb:if condition="$show['dbtech_thanks_area']">
<vb:if condition="$show['dbtech_thanks_li']">
<li class="postbitlegacy postcontainer dbtech_thanks_container<vb:if condition="$post['userid'] == $bbuserinfo['userid']"> shown</vb:if>">
<vb:else />
<div<vb:if condition="!$show['dbtech_thanks_lineafter']"> class="signature dbtech_thanks_container<vb:if condition="$post['userid'] == $bbuserinfo['userid']"> shown</vb:if>"</vb:if> style="clear:both;">
</vb:if>
<vb:if condition="!$vboptions['dbtech_thanks_cloud_displaystyle']">
<div class="posthead">
<span class="postdate">Post Thanks<vb:if condition="$extrainfo"> - {vb:raw extrainfo}</vb:if></span>
</div>
</vb:if>

<div class="postdetails" id="dbtech_thanks_entries_{vb:var post.postid}">
{vb:raw entries}
</div>

<vb:if condition="$actions">
<div class="postfoot">
<div class="textcontrols">
<span class="postlinking">
{vb:raw actions}
</span>
</div>
</div>
</vb:if>
<vb:if condition="$show['dbtech_thanks_li']">
</li>
<vb:else />
</div>
<vb:if condition="$show['dbtech_thanks_lineafter']"><div class="signature">&nbsp;</div></vb:if>
</vb:if>
</vb:if>

The template works correctly when viewed by a member who is logged in. However, when a guest views it, this condition gets ignored in both places:

<vb:if condition="$post['userid'] == $bbuserinfo['userid']"> shown</vb:if>
The shown class is added no matter what condition I add around it. I have even tried changing the condition to true === false. That condition is ignored when viewed by a guest. I tested that changes were working by adding {vb:raw} for the variables in the template. The values display correctly immediately after saving. The issue is isolated to the vbulletin condition statement.

Once again, it works properly when logged in, but not when viewing as a guest.

How can I resolve this?

MarkFL
07-17-2017, 03:36 PM
Try changing it to:

<vb:if condition='$post["userid"] == $bbuserinfo["userid"]'> shown</vb:if>

Dave
07-17-2017, 03:51 PM
The condition $post['userid'] == $bbuserinfo['userid'] checks if the userid of the post is the same as the userid of the current logged in user. Guests have a userid of 0 which is why it never (should) evaluates to true.

Have you tried changing == to ===? That will also match the data type.

Makaze
07-17-2017, 04:39 PM
The condition $post['userid'] == $bbuserinfo['userid'] checks if the userid of the post is the same as the userid of the current logged in user. Guests have a userid of 0 which is why it never (should) evaluates to true.

Have you tried changing == to ===? That will also match the data type.

Yes. I tested it with true === false as well. The condition was ignored regardless of contents.

--------------- Added 1500316988 at 1500316988 ---------------

Try changing it to:

<vb:if condition='$post["userid"] == $bbuserinfo["userid"]'> shown</vb:if>

This had no effect.

Once again, the code works when logged in. It fails when logged out.

Dave
07-17-2017, 06:38 PM
So if I understand you correctly, your condition always evaluates to true when a guest is viewing it? Thus the class "shown" is always added?

Is the $post variable available in the template? Also, try putting the following in your template before the div that contains the if condition so you can see what it outputs:
{vb:raw post.userid} -> {vb:raw bbuserinfo.userid}

Makaze
07-17-2017, 06:56 PM
No, you are not understanding.

It behaves as if the condition tag does not exist, even if the condition in the quotes is "true === false", instead of my condition I would like to use.

I can access the variables and output them to the screen using {vb:raw post.userid} and {vb:raw bbuserinfo.userid}. They output correctly, including for guests. The variables exist in the template.

Furthermore, the code:

<vb:if condition="true === false"> shown</vb:if>

Should never evaluate to true. Yet it does, in this template, while being viewed by a guest.

In other words, it is behaving as if the conditional tag is not there, and just shows the contents.

It has nothing to do with the actual statements in the conditions.

--------------- Added 1500332271 at 1500332271 ---------------

It appeared to be the location of the statement. It works if it is at a tier 2 nesting or global if.

I believe there is a bug related to nesting and guest viewing.

Makaze
07-23-2017, 03:03 PM
RESOLVED!

The issue was a piece of JavaScript that was adding the shown class after the page had loaded. The reason it did so even if the user was logged out, was because the condition was to find the Add Thanks button, and if it isn't there, add the shown class. The button isn't there for guests, so it added shown to everything.

I apologize for wasting everyone's time.