heat23
05-19-2016, 04:10 PM
Hello all,
I am creating a product that requires an additional profile field. How can I add this as part the product .xml file so that it gets added automatically when installing?
Thanks
heat
MarkFL
05-19-2016, 04:56 PM
I have a product that creates a profile field upon installation, and the install code is:
$vbulletin->db->query_write("
INSERT INTO " . TABLE_PREFIX . "profilefield
(
maxlength, size, type, data, def, searchable, memberlist, form
)
VALUES
(
5, 5, 'radio', 'a:2:{i:0;s:3:\"Yes\";i:1;s:2:\"No\";}', 1, 1, 1, 5
)
");
$profiledata = $vbulletin->db->query_read("
SELECT MAX(profilefieldid) AS profilefieldid
FROM " . TABLE_PREFIX . "profilefield
");
$thisrow = $db->fetch_array($profiledata);
$pid = $thisrow['profilefieldid'];
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "profilefield
SET displayorder = profilefieldid
WHERE profilefieldid = last_insert_id()
");
$vbulletin->db->query_write("
INSERT INTO " . TABLE_PREFIX . "phrase
(
varname, fieldname, text, product
)
VALUES
(
'field" . $pid . "_title', 'cprofilefield', 'Abbreviations/Acronyms', 'vbulletin'
),
(
'field" . $pid . "_desc', 'cprofilefield', 'Set whether you wish for abbreviations/acronyms to be explained using a tooltip in the areas designated by the administrators', 'vbulletin'
)
");
$vbulletin->db->query_write("
ALTER TABLE`" . TABLE_PREFIX . "userfield`
ADD field" . $pid . " MEDIUMTEXT
");
The uninstall code is:
function get_fieldnum()
{
global $vbulletin, $db;
$fielddata = $vbulletin->db->query_read("
SELECT phrase.*
FROM " . TABLE_PREFIX . "phrase AS phrase
WHERE text = 'Abbreviations/Acronyms'
");
$thisfield = $db->fetch_array($fielddata);
return preg_replace("/[^0-9]/","",$thisfield['varname']);
}
$fieldnum = get_fieldnum();
$fieldstr = 'field' . $fieldnum;
$vbulletin->db->query_write("
DELETE FROM " . TABLE_PREFIX . "profilefield
WHERE profilefieldid = " . $fieldnum
);
$vbulletin->db->query_write("
DELETE FROM " . TABLE_PREFIX . "phrase
WHERE varname LIKE '" . $fieldstr . "%'
");
$vbulletin->db->query_write("
ALTER TABLE`" . TABLE_PREFIX . "userfield`
DROP COLUMN " . $fieldstr
);
Of course, you will have to alter this to meet your specific needs. :)
heat23
05-19-2016, 05:00 PM
Thank you Mark!
--------------- Added 1463686938 at 1463686938 ---------------
Mark,
Since you are dynamically naming the profile field name, is there a way I can write it back out somewhere so my PHP code can read the field name? I could store it in another database field but that might incur too much overhead. But if I save it on the filesystem, then the file needs to have write permissions?
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.