News:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu

Birthday on registration for SMF v2.1

Started by Rumpa, November 06, 2024, 07:52:42 AM

Previous topic - Next topic

Rumpa

Hi want to make a mod name birthday on registration for SMF v2.1.4

I attached some file need help regarding hook

with my presentation does not effect at all.

Diego Andrés

Why are you adding a new column? There's already a birthday column.
https://github.com/SimpleMachines/SMF/blob/1468660f32128b76955e9dd58d9860a0434d61ce/other/install_2-1_mysql.sql#L712

That package-info.xml doesn't do much at all, it's not unexpected that it doesn't work.

SMF Tricks - Free & Premium Responsive Themes for SMF.

Rumpa

Thanks for reply @Diego Andrés

 ok my bad for adding that column
can you explain which integration hook i used in package-info

// Hook into the registration process
add_integration_function('register', 'displayBirthdayInput', 'BirthdayHook');

Rumpa

Here is the code
<?php// Ensure this file is being called from SMFif (!defined('SMF')) {    die('Hacking attempt...');}/** * Function to display the birthday input fields during registration. */function displayBirthdayInput(){    global $txt;    // HTML for the birthday input fields    echo '    <dl class="register_form">        <dt>            <strong>' . $txt['dob'] . '</strong><br />            <span class="smalltext">' . $txt['dob_info'] . '</span>        </dt>        <dd>            <input type="text" name="bday_year" size="4" maxlength="4" placeholder="' . $txt['dob_year'] . '" /> -            <input type="text" name="bday_month" size="2" maxlength="2" placeholder="' . $txt['dob_month'] . '" /> -            <input type="text" name="bday_day" size="2" maxlength="2" placeholder="' . $txt['dob_day'] . '" />        </dd>    </dl>';}/** * Function to validate and save the birthday input. * * @param array $birthdayData An array containing the birthday data. * @return string A message indicating the result of the operation. */function saveBirthdayInput($birthdayData){    global $smcFunc, $txt;    // Validate the input    if (empty($birthdayData['bday_year']) || empty($birthdayData['bday_month']) || empty($birthdayData['bday_day'])) {        return $txt['dob_required'];    }    // Validate the date format    $year = (int)$birthdayData['bday_year'];    $month = (int)$birthdayData['bday_month'];    $day = (int)$birthdayData['bday_day'];    if (!checkdate($month, $day, $year)) {        return $txt['invalid_dob'];    }    // Save the date of birth to the database (example)    $birthDate = sprintf('%04d-%02d-%02d', $year, $month, $day);        // Assuming you have a member ID to associate with the date of birth    $memberId = $_SESSION['member_id']; // Replace with actual member ID retrieval    $smcFunc['db_query']('', "        UPDATE {db_prefix}members        SET birth_date = {string:birth_date}        WHERE id_member = {int:member_id}",        array(            'birth_date' => $birthDate,            'member_id' => $memberId,        )    );    return $txt['dob_success'];}// Hook into the registration processadd_integration_function('register', 'displayBirthdayInput', 'BirthdayHook');?>

Diego Andrés


SMF Tricks - Free & Premium Responsive Themes for SMF.

Rumpa



Rumpa

#7
ok now i tried with bellow code
<?phpif (!defined('SMF'))    die('Hacking attempt...');function modify_registration_fields($regOptions){    // Add a birthday field to the registration form    $regOptions['fields']['birthday'] = array(        'type' => 'text',        'label' => 'Birthday (YYYY-MM-DD)',        'required' => false,        'validation' => 'validate_birthday',    );}function validate_birthday($birthday){    // Validate the birthday format    if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $birthday)) {        return 'Invalid birthday format. Please use YYYY-MM-DD.';    }    return true;}function save_birthday($member_id, $birthday){    // Save the birthday to the database    $birthday = htmlspecialchars($birthday, ENT_QUOTES);    $db = database();    $db->query('', '        UPDATE {db_prefix}members        SET birthday = {string:birthday}        WHERE id_member = {int:member_id}',        array(            'birthday' => $birthday,            'member_id' => $member_id,        )    );}function register_hooks(){    // Hook into the registration process    add_hook('register', 'modify_registration_fields');    add_hook('register_save', 'save_birthday');}register_hooks();?>
and with bellow hooks into the package-info file but nothing will happens can someone guide me what i missing or doing wrong

<require-file name="BirthdayOnRegistration.php" destination="$sourcedir" />
        <hook hook="integrate_register" file="BirthdayOnRegistration.php" function="modify_registration_fields" />
        <hook hook="integrate_register_save" file="BirthdayOnRegistration.php" function="save_birthday" />



If someone contribute to this project then go to this github link https://github.com/Rumpa20/Birthday-On-Registration

Bugo

function register_hooks()
{
    // Hook into the registration process
    add_hook('register', 'modify_registration_fields');
    add_hook('register_save', 'save_birthday');
}

register_hooks();

You don't need this code because the hooks are already defined in package-info.xml.

Rumpa

Thanks for reply @Bugo

Should i add any custom_field in code

Bugo

I made my own version that does not require localization and does not add new columns to the members table.

Rumpa

Quote from: Bugo on November 17, 2024, 10:51:08 AMI made my own version that does not require localization and does not add new columns to the members table.
Wow great work.

Advertisement: