News:

Wondering if this will always be free?  See why free is better.

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 SMF
if (!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 process
add_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
<?php
if (!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($birthdayENT_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: