Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 05-27-2010, 04:57 PM
deadbydawn's Avatar
deadbydawn deadbydawn is offline
 
Join Date: May 2010
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Adding user profile fields with a product

Hi all,

I am creating a product that I'd like to share with the community, but it requires a user-definable option that is placed within the UserCP. It is quite easy to add this manually via the User Profile Field Manager but I'm not finding a way to automate this during installation.

I did see almanni's article on Adding user options in usercp for mod's but frankly I'm still a bit confused and it doesn't seem as clean/easy as using the User Profile Field Manager.

I could simply make it part of the instructions for the installation, but I would love to be able to automate it to make it easier for the community.

Thanks!
Reply With Quote
  #2  
Old 06-02-2010, 10:50 PM
deadbydawn's Avatar
deadbydawn deadbydawn is offline
 
Join Date: May 2010
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, I've figured out this much on my own from tearing apart the admincp/profilefield.php script.

PHP Code:
$db->query_write(fetch_query_sql($vbulletin->GPC['profilefield'], 'profilefield'));
$vbulletin->GPC['profilefieldid'] = $db->insert_id();
$db->query_write("ALTER TABLE " TABLE_PREFIX "userfield ADD field{$vbulletin->GPC['profilefieldid']} MEDIUMTEXT NOT NULL");
$db->query_write("OPTIMIZE TABLE " TABLE_PREFIX "userfield");


$db->query_write("
                        UPDATE " 
TABLE_PREFIX "profilefield SET
                                type = 'radio',
                                data = '" 
$db->escape_string('a:2:{i:0;s:7:"Enabled";i:1;s:8:"Disabled";}') . "',
                                def = 0,
                                form = 3,
                                searchable = 0,
                                memberlist = 0
                        WHERE profilefieldid = " 
$vbulletin->GPC['profilefieldid'] . "
                "
);

$db->query_write("
                REPLACE INTO " 
TABLE_PREFIX "phrase
                        (languageid, fieldname, varname, text, product, username, dateline, version)
                VALUES
                        (
                                0,
                                'cprofilefield',
                                'field" 
$db->escape_string($vbulletin->GPC['profilefieldid']) . "_title',
                                '" 
$db->escape_string('Enable Quote Truncation') .  "',
                                'vbulletin',
                                '" 
$db->escape_string('deadbydawn') . "',
                                " 
TIMENOW ",
                                '" 
$db->escape_string($vbulletin->options['templateversion']) . "'
                        ),
                        (
                                0,
                                'cprofilefield',
                                'field" 
$db->escape_string($vbulletin->GPC['profilefieldid']) . "_desc',
                                '" 
$db->escape_string('This will automatically hide large amounts of text inside of a quote, similar to a spoiler tag') . "',
                                'vbulletin',
                                '" 
$db->escape_string('deadbydawn') . "',
                                " 
TIMENOW ",
                                '" 
$db->escape_string($vbulletin->options['templateversion']) . "'
                        )
        "
); 
This works, but it leaves me with a question:

I need to be able to know which field is created with this process so that I can reference it later within the template as well as the uninstall script. I know that it is stored during the install as $vbulletin->GPC['profilefieldid'], but is there any way I can "store" that? It would be very convenient if there was a way I could reference that variable when creating the TEMPLATE.

The only thing I can think of is creating another db table that stores it, but that seems like overkill to me, and certainly isn't something I would want to add to something that hooks into the ShowThread_complete hook. Any other suggestions?
Reply With Quote
  #3  
Old 06-03-2010, 10:33 AM
consolegaming consolegaming is offline
 
Join Date: Jan 2007
Posts: 168
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Create a VB Option for it and set it to hidden? And then alter it's value whilst your doing the rest of this stuff?
Reply With Quote
  #4  
Old 06-03-2010, 02:36 PM
Carnage Carnage is offline
 
Join Date: Jan 2005
Location: uk
Posts: 760
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That ^ seems like your best option imo.

Would you mind writing this up as an article once you've got it fully figured out; its something I may want to do in the future and having an easy to find reference would be great.
Reply With Quote
  #5  
Old 06-03-2010, 05:04 PM
deadbydawn's Avatar
deadbydawn deadbydawn is offline
 
Join Date: May 2010
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by consolegaming View Post
Create a VB Option for it and set it to hidden? And then alter it's value whilst your doing the rest of this stuff?
Forgive my ignorance here, I'm still learning how to code within the vbulletin world Do you mean creating a vboption in terms of the admincp->Settings->MyProduct sense? I was initially considering something like that, but it still leaves me confused with how to get the result of the db->insertID from the install code to populate something else. If you can give me a bit more of a push in the right direction, that'd be great!


Quote:
Originally Posted by Carnage- View Post
Would you mind writing this up as an article once you've got it fully figured out; its something I may want to do in the future and having an easy to find reference would be great.
I've actually already started writing part of it up for that exact purpose, just wanted to get some more understanding of it before I did (and I need to work on the removal process for uninstall code as well).

But yes, yes I will
Reply With Quote
  #6  
Old 06-03-2010, 05:28 PM
consolegaming consolegaming is offline
 
Join Date: Jan 2007
Posts: 168
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by deadbydawn View Post
Forgive my ignorance here, I'm still learning how to code within the vbulletin world Do you mean creating a vboption in terms of the admincp->Settings->MyProduct sense? I was initially considering something like that, but it still leaves me confused with how to get the result of the db->insertID from the install code to populate something else. If you can give me a bit more of a push in the right direction, that'd be great!
Yes I meant creating a setting for your product on the vb options section.

I've not really tried anything like it myself but looking in the DB I can see that settings you create through the method described above get added into the settings DB table. So I'd have thought you could just run a query to UPDATE the value field of the setting you create and searching by varname with whatever you call it.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:15 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04289 seconds
  • Memory Usage 2,242KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_php
  • (3)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete