PDA

View Full Version : Force Profile Update Hack


roxics
07-02-2002, 10:00 PM
This hack was made by gforce2001 on request by myself here:
https://vborg.vbsupport.ru/showthread.php?s=&threadid=40584
He deserves a big thank you for it :) It is being release with his permission.

What does this hack do?

Here?s a Scenario:
You have a board with 1000 members. You decide you want to add a new required field to your members profiles. Well everyone who registers after you add the new required field will be required to fill it in to complete registration (makes perfect sense :) ). But your 1000 existing members can skate by without updating and continue to go about posting and such.

This hack forces your existing members to update the new fields you?ve added to the profiles. You can set it so that once members log in and try to view the board, reply to a post, post new topics, search forums, and so on, they will instead get a message that tells them they need to first update the new fields in their profile before they can go any further.

Why use this hack?
Even if you tell your members to go and update the new profile fields they won?t always do it. But if they are forced to do it before they can post or view the board then they will do it.

What am I using it for?
I have 300 existing members and I now want all my members to be searchable by their location and key interests. But my members need to have this information in their profiles before anyone can get any results. So I'm forcing them to put this new information in. Doesn't sound nice but it's needed to make the system work. This hack gives me the power to force members to update that profile before they can do anything they want to do on the board.

What can you restrict?
ForumDisplay, Calendar, Newreply, Newthread, Poll, etc.

Warning: Do not use this hack on usercp.php. Your members need access to edit their profiles.

Step by Step;

Step 1. Open up the file you want to restrict (i.e. newreply.php)

Step 2. Find:
require('./global.php');

Under it put:
// +++++++ Start Erroring Missing User Profile Fields [ Start ] +++++++
function chkprofilefields($userid, $n) {
global $DB_site;

$fieldnumber="field$n";
$getu=$DB_site->query_first("SELECT $fieldnumber FROM userfield WHERE userid='$userid'");
$field=$getu[$fieldnumber];
if(empty($field)) {
eval("standarderror(\"".gettemplate("error_emptyrequiredfields")."\");");
exit;
}
}
// +++++++ Start Erroring Missing User Profile Fields [ End ] +++++++

Step 3. Log into your Admin CP and go to "User Profile Fields > Modify".
Hover your mouse over the edit link of the forum you want to make your exisiting members require to fill out. Note the last number in the url ( the profilefieldid= number). Write it down.

Step 4. Replace the ## in the code below with the number you just wrote down.
chkprofilefields($bbuserinfo[userid],##);

Now put that last code right under the larger code given above. Note: If there is more then one profile field you now require then add another line of that last code underneath the previous.
Example;
chkprofilefields($bbuserinfo[userid],7);
chkprofilefields($bbuserinfo[userid],13);
chkprofilefields($bbuserinfo[userid],15);

Repeat this process for whatever files you want to suspend from your users until they fill in the new profile fields (i.e. forumdisplay.php, newthread.php, calendar.php)

Step 5. Create a new template called: error_emptyrequiredfields

Place the folowing message in it (or whatever message you would like):

Before you can go any further you need to update all profile fields that are now required on the forum. You can view your UserCP>Edit Profile and update it there. Thanks in advance!

Step 6. Smile :) That's it!

Smoothie
07-03-2002, 07:50 AM
Now put that last code right under the larger code given above. Under:// +++++++ Start Erroring Missing User Profile Fields [ End ] +++++++Yes?

Smoothie
07-03-2002, 07:51 AM
How many queries does this add?

roxics
07-03-2002, 07:53 AM
Yes you are correct.

Number of queries I don't know.

Admin
07-03-2002, 07:59 AM
You don't need any queries, roxics. You can use this instead:
function chkprofilefields($userid, $fieldnumber) {
global $DB_site, $bbuserinfo;

if ($bbuserinfo['userid'] == $userid) {
$field = $bbuserinfo['field'.$fieldnumber];
} else {
$userinfo = getuserinfo($userid);
$field = $userinfo['field'.$fieldnumber];
}

if (empty($field)) {
eval('standarderror("'.gettemplate('error_emptyrequiredfields').'");');
}
}
This will only generate a query if it's used not on the browsing user.

roxics
07-03-2002, 08:07 AM
Excellent!

bandersen
07-03-2002, 03:17 PM
I have installed this on newreply and newthread, and it's working like a charm. Thank you.

g-force2k2
07-03-2002, 04:08 PM
Originally posted by FireFly
function chkprofilefields($userid, $fieldnumber) {
global $DB_site, $bbuserinfo;

if ($bbuserinfo['userid'] == $userid) {
$field = $bbuserinfo['field'.$fieldnumber];
} else {
$userinfo = getuserinfo($userid);
$field = $userinfo['field'.$fieldnumber];
}

if (empty($field)) {
eval('standarderror("'.gettemplate('error_emptyrequiredfields').'");');
}
}
This will only generate a query if it's used not on the browsing user.

thanks FireFly... seriously its good to learn somethign new :D I will have to remember this for further refrences ;) because it doesn't run queries and that is cool :D but just a question... doesn't the getuserinfo() function use a query or no?

g-force2k2

Admin
07-03-2002, 04:46 PM
getuserinfo() does, but we only call it if we need to.

g-force2k2
07-03-2002, 04:48 PM
ah ic... thanks again for the explanation FireFly :D

g-force2k2

Velocd
07-03-2002, 07:09 PM
Looks good, defiantly useful :D

djr
07-05-2002, 12:58 PM
Excellent hack! Thank you very much!!

/me clicks install

Areku
02-19-2003, 11:41 AM
I added roxics code to my 2.2.0 and it seemed to work like a charm until some users began complaining about not being able to post due to "field is required" message.

Field was already filled in, so why the message appears?

Would firefly's solve the probem? I can't see a relation between the field contents and the quey not being able to retrieve them.

Ideas?

Thanks!

AlexanderT
03-20-2003, 05:42 PM
Is it possible to add Avatar enforcement as well to this hack?

Boofo
03-20-2003, 06:30 PM
Couldn't you just put this function in the functions.php and use the "chkprofilefields($bbuserinfo[userid],##);" line in the files you need to instead of having to have the whole function code in each file?

kevinnguyen
04-09-2003, 05:16 PM
wat if i wanna force members to update their birthdate?
thanx

ogden2k
05-05-2003, 09:55 PM
04-09-03 at 02:16 PM kevinnguyen said this in Post #16 (https://vborg.vbsupport.ru/showthread.php?postid=379750#post379750)
wat if i wanna force members to update their birthdate?
thanx

I want to know this too..

ogden2k
05-07-2003, 12:10 PM
Bump

OmaniMan
05-11-2003, 07:47 AM
Great :banana:

bandersen
06-04-2003, 04:11 PM
what if you want to force an update from people in a specific usergroup only?

JamieK18T
06-12-2003, 10:40 PM
which file should i change if i want to restrict viewing of threads? because there are a lot of people on my board who do not post.

Gutspiller
07-09-2003, 02:11 AM
Would it be possible to modify this hack so I can get it so that I can click button and it forces everybody to change some fields in their profile? Not that I may or may not have added, but I have fields that would change every 6 or so months and would like to send soemthing to my users so they would go in there and change them.

Is something like this possible with the already given code? It should work with my version of VB, so you wouldn't have to worry about that part.

Anybody?

Bison
08-04-2003, 08:08 PM
what's profile field ID for birthdate?

pran
03-28-2004, 10:53 PM
Any similar hack for 3.0?

maroceve
10-29-2005, 12:06 PM
yes is there anything similar for 3.5 ? :)