The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
Custom Page: Permission based on age?
Please forgive me, I'm very new to PHP and vB programming.
For a custom page I'm creating, I'm trying to create access permissions based on a user's age. For a function that I've placed in an external functions_*.php file, I've done what I *think* calculates the logged in user's age, but now I'm not so sure, because my access permissions aren't working. I've borrowed code from memberlist.php to calculate the user's age and return either their age or false. PHP Code:
PHP Code:
Would anyone mind giving me some pointers as to where I'm going wrong? Thanks! |
#2
|
|||
|
|||
If I'm following this correctly, I think the condition should be:
PHP Code:
I'm assuming that if age isn't set or it's set to nbsp that the user won't have permission. |
#3
|
|||
|
|||
Thank you.
I think that helped, but I'm still not getting the results I'm looking for. I'm pretty sure I've translated something in my function code wrong, but I just can't see where. This is now my function: PHP Code:
PHP Code:
|
#4
|
||||
|
||||
There are easier functions to calculate age from birthday, give a look here: http://stackoverflow.com/questions/3...-calculate-age
|
#5
|
|||
|
|||
It seems like that should be AND. Like if they're not an admin or moderator and they are younger than 18, then no permission.
|
#6
|
|||
|
|||
The problem you are having is the user condition $userinfo['showbirthday'], which alters when $age is valid in the vbulletin code. In reality all you need to check is if $userinfo['birthday'] is valid.
Using @Scanu suggestion, this is all you need -- although, that code needs to be fully vetted. I believe $userinfo['birthday'] should be properly validated from vBulletin. I would re-validate it if you run many modifications, that might tamper with it. Code:
// For testing purposes use an expanded format, // you can always combine terms after you have it working. // Exempt: smods, mods, admins if (!is_member_of($vbulletin->userinfo, 5, 6, 7)) { // Should already be validated if comming from vbulletin. // or add additional validation to be on the safe side. if (!empty($userinfo['birthday']) && ($userinfo['birthday'] != ' ')) { $birthdate = $userinfo['birthday']; $birthdate = explode("-", $birthdate); //Calculate Age (@Scanu's suggestion) $age = (date("md", date("U", mktime(0, 0, 0, $birthdate[0], $birthdate[1], $birthdate[2]))) > date("md") ? ((date("Y") - $birthdate[2]) - 1) : (date("Y") - $birthdate[2])); // $Age Check if (isset($age) && ($age < 18)) { print_no_permission(); } } } |
#7
|
|||
|
|||
Thanks everyone for their help!
I have it working MUCH more simply now, thanks to suggestions here. Yes, ordinarily it would be AND, but in this case, while I'm testing some things, it's OR. Age will be a big factor in what I'm working on, used on several pages, therefore I wanted to do it as a function, which I now have. PHP Code:
PHP Code:
The only thing I'm confused about now is why I can't seem to use $userinfo['birthday'] instead of $vbulletin->userinfo['birthday'] in my function file. If it's not to much to ask, what is the explanation of that? --------------- Added 27 Jul 2014 at 15:22 --------------- Stupid question. I just figured it out. --------------- Added 27 Jul 2014 at 15:57 --------------- Even better age code, borrowed from class_userprofile.php and modified to fit: PHP Code:
|
Thread Tools | |
Display Modes | |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|