############################################################################### # EventCalSet.pm # # $Date: 01 Sep 2026 $ # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBBForum 3.2 # # Packaged: 01 Sep 2026 # # Distributed by: https://yabbforum.nz # # =========================================================================== # # Copyright (c) 2000-2026 YaBB (yabbforum.nz) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # ############################################################################### use CGI::Carp qw(fatalsToBrowser); our $VERSION = '3.2'; $eventcalsetpmver = 'YaBBForum 3.2'; if ( $action eq 'detailedversion' ) { return 1; } LoadLanguage('EventCal'); $admin_images = "$yyhtml_root/Templates/Admin/default"; ## Calendar Setting ## sub EventCalSet { is_admin_or_gmod(); my ($caleventprivatechecked, $chkDelete_EventsUntil); # figure out what to print if ( !$Scroll_Events ) { $aevt1 = ' selected="selected"'; } elsif ( $Scroll_Events == 1 ) { $aevt2 = ' selected="selected"'; } elsif ( $Scroll_Events == 2 ) { $aevt3 = ' selected="selected"'; } elsif ( $Scroll_Events == 3 ) { $aevt4 = ' selected="selected"'; } if ( !$Show_EventCal ) { $bevt1 = ' selected="selected"'; } elsif ( $Show_EventCal == 1 ) { $bevt2 = ' selected="selected"'; } elsif ( $Show_EventCal == 2 ) { $bevt3 = ' selected="selected"'; } if ( !$Show_EventButton ) { $cevt1 = ' selected="selected"'; } elsif ( $Show_EventButton == 1 ) { $cevt2 = ' selected="selected"'; } elsif ( $Show_EventButton == 2 ) { $cevt3 = ' selected="selected"'; } if ( !$Show_BirthdaysList ) { $devt1 = ' selected="selected"'; } elsif ( $Show_BirthdaysList == 1 ) { $devt2 = ' selected="selected"'; } elsif ( $Show_BirthdaysList == 2 ) { $devt3 = ' selected="selected"'; } if ( !$Show_BirthdayButton ) { $eevt1 = ' selected="selected"'; } elsif ( $Show_BirthdayButton == 1 ) { $eevt2 = ' selected="selected"'; } elsif ( $Show_BirthdayButton == 2 ) { $eevt3 = ' selected="selected"'; } if ( !$Show_BirthdayDate ) { $fevt1 = ' selected="selected"'; } elsif ( $Show_BirthdayDate == 1 ) { $fevt2 = ' selected="selected"'; } elsif ( $Show_BirthdayDate == 2 ) { $fevt3 = ' selected="selected"'; } if ( !$Show_EventBirthdays ) { $gevt1 = ' selected="selected"'; } elsif ( $Show_EventBirthdays == 1 ) { $gevt2 = ' selected="selected"'; } elsif ( $Show_EventBirthdays == 2 ) { $gevt3 = ' selected="selected"'; } if ($Show_caltoday) { $Show_caltodaych = 'checked="checked"'; } if ($Show_BirthdaysList) { $onbirthlistchecked = 'checked="checked"'; } if ($Show_MiniCalIcons) { $onminiiconchecked = 'checked="checked"'; } if ($ShowSunday) { $onsundaychecked = 'checked="checked"'; } if ($CalEventPrivate) { $caleventprivatechecked = 'checked="checked"'; } if ($Delete_EventsUntil) { $chkDelete_EventsUntil = 'checked="checked"'; } if ($DisplayCalEvents) { $dcaleventschecked = 'checked="checked"'; } if ($Show_ColorLinks) { $oncolorlinkschecked = 'checked="checked"'; } if ($No_ShortUbbc) { $onnosubbcchecked = 'checked="checked"'; } if ($Show_BdColorLinks) { $onbdcolorlinkschecked = 'checked="checked"'; } if ($Show_BdStarsign) { $onbdstarchecked = 'checked="checked"'; } $Event_TodayColor = lc $Event_TodayColor; if ( !$CalEventNoName ) { $noname1 = ' selected="selected"'; } elsif ( $CalEventNoName == 1 ) { $noname2 = ' selected="selected"'; } elsif ( $CalEventNoName == 2 ) { $noname3 = ' selected="selected"'; } require Admin::ManageBoards; $CalEventPerms =~ s/,/, /gsm; $CalEventPerms = DrawPerms($CalEventPerms); $yymain .= qq~
$admin_img{'prefimg'} $event_cal{'1'}
$event_cal{'21'}
     
$event_cal{'22'}

$event_cal{'23'}
$event_cal{'49'}
$admin_img{'prefimg'} $admin_txt{'10'}
 
~; ## Calendar Event-Icon Setting ## eval { require "$vardir/eventcalIcon.txt"; }; $yymain .= qq~
~; $i = 0; my $add_icon = 1; while ( $CalIconURL[$i] ) { $yymain .= qq~~; $i++; $add_icon++; } my $added_icons = $i; $yymain .= qq~~; for ( 1 .. 3 ) { $i++; $add_icon++; $yymain .= qq~~; } $yymain .= qq~
$admin_img{'prefimg'} $event_cal{'26'}
$event_cal{'33'}
$event_cal{'27'} $event_cal{'28'} $event_cal{'29'} $var_cal{'caldel'}
X
$admin_txt{'current_img'}: $CalIconURL[$i]
X $event_cal{'59'}
$admin_img{'prefimg'} $admin_txt{'10'}
~; $yytitle = $event_cal{'1'}; $action_area = 'eventcal_set'; AdminTemplate(); exit; } ## Save Calendar Setting ## sub EventCalSet2 { is_admin_or_gmod(); if ( $FORM{'rebuiltbd'} eq "$event_cal{'54'}" ) { unlink "$vardir/eventcalbday.db"; fopen( FILE, "$memberdir/memberlist.txt" ); @birthmembers = ; fclose(FILE); fopen( FILE, ">$vardir/eventcalbday.db" ); foreach my $user_name (@birthmembers) { ( $user_xy, $dummy ) = split /\t/sm, $user_name; chomp $user_xy; LoadUser($user_xy); $user_xy_bd = ${ $uid . $user_xy }{'bday'}; if ($user_xy_bd) { ( $user_month, $user_day, $user_year ) = split /\//xsm, $user_xy_bd; if ( $user_month < 10 && length($user_month) == 1 ) { $user_month = "0$user_month"; } if ( $user_day < 10 && length($user_day) == 1 ) { $user_day = "0$user_day"; } if (${ $uid . $user_xy }{'hideage'}){$user_hide = 1;} else {$user_hide = q{};} print {FILE} qq~$user_year|$user_month|$user_day|$user_xy|$user_hide\n~ or qq~$croak{'print'} eventcalbday.db~; } } fclose(FILE); $yySetLocation = qq~$adminurl?action=eventcal_set;rebok=1~; redirectexit(); } elsif ( $FORM{'del_old_events'} eq "$event_cal{'del'}" ) { del_old_events(); } else { eventcal_save();} return; } ## Save Calendar Event-Icon Setting ## sub EventCalSet3 { is_admin_or_gmod(); my $count = 0; my $tempA = 0; my @eventcalIcon; $calimg_count = $FORM{'calimg_count'}; for ( 1 .. $calimg_count ) { if ( $FORM{"calidescr[$tempA]"} ne q{} && ( $FORM{"caliimg[$tempA]"} eq q{} && $FORM{"cur_caliimg[$tempA]"} eq q{} ) ) { fatal_error('', $event_cal{'error_image'}); } if ( $FORM{"calidescr[$tempA]"} eq q{} && ( $FORM{"caliimg[$tempA]"} ne q{} || $FORM{"cur_caliimg[$tempA]"} ne q{} ) ) { fatal_error('', $event_cal{'error_desc'}); } if ( $FORM{"calidelbox[$tempA]"} != 1 && $FORM{"calidescr[$tempA]"} ne q{} && ( $FORM{"caliimg[$tempA]"} ne q{} || $FORM{"cur_caliimg[$tempA]"} ne q{} ) ) { if ( $FORM{"caliimg[$tempA]"} ne q{} ) { $FORM{"caliimg[$tempA]"} = UploadFile("caliimg[$tempA]", 'EventIcons', 'png jpg jpeg gif', '100', '0'); unlink "$htmldir/EventIcons/$FORM{\"cur_caliimg[$tempA]\"}"; } else { $FORM{"caliimg[$tempA]"} = $FORM{"cur_caliimg[$tempA]"}; } push @eventcalIcon, qq~\$CalIconURL[$count] = "$FORM{"caliimg[$tempA]"}";\n\$CalIDescription[$count] = "$FORM{"calidescr[$tempA]"}";\n\n~; $count++; } if ( $FORM{"calidelbox[$tempA]"} == 1 ) { unlink "$htmldir/EventIcons/$FORM{\"cur_caliimg[$tempA]\"}"; } $tempA++; } push @eventcalIcon, '1;'; fopen( FILE, ">$vardir/eventcalIcon.txt" ); print {FILE} @eventcalIcon or croak "$croak{'print'} eventcalIcon"; fclose(FILE); $yySetLocation = qq~$adminurl?action=eventcal_set~; redirectexit(); return; } sub eventcal_save { is_admin_or_gmod(); if ( $FORM{'Event_TodayColor'} eq q{} ) { fatal_error('invalid_value', "$event_cal{'8'}"); } if ( $FORM{'DisplayEvents'} eq q{} ) { fatal_error('invalid_value', "$event_cal{'34'}"); } if ( $FORM{'CalShortEvent'} eq q{} ) { fatal_error('invalid_value', "$event_cal{'6'}"); } if ( $FORM{'MaxCalMessLen'} eq q{} ) { fatal_error('invalid_value', "$admin_txt{'498e'}"); } if ( $FORM{'AdMaxCalMessLen'} eq q{} ) { fatal_error('invalid_value', "$admin_txt{'498f'}"); } # Set 1 or 0 if box was checked or not map { ${$_} = $FORM{$_} ? 1 : 0; } qw{Show_MiniCalIcons CalEventPrivate DisplayCalEvents ShowSunday Show_ColorLinks No_ShortUbbc Show_BdColorLinks Show_BdStarsign Show_caltoday}; # If empty fields are submitted, set them to default-values to save yabb from crashing $DisplayEvents = $FORM{'DisplayEvents'}; $DisplayEvents =~ s/[^\d]//gxsm; $DisplayEvents = $DisplayEvents || 0; $Scroll_Events = $FORM{'Scroll_Events'} || 0; $Show_EventCal = $FORM{'Show_EventCal'} || 0; $Show_EventButton = $FORM{'Show_EventButton'} || 0; if ( $Show_EventButton > $Show_EventCal ) { $Show_EventButton = $Show_EventCal; } $Show_EventBirthdays = $FORM{'Show_EventBirthdays'} || 0; if ( $Show_EventBirthdays > $Show_EventCal ) { $Show_EventBirthdays = $Show_EventCal; } $Show_BirthdaysList = $FORM{'Show_BirthdaysList'} || 0; $Show_BirthdayButton = $FORM{'Show_BirthdayButton'} || 0; if ( $Show_BirthdayButton > $Show_BirthdaysList ) { $Show_BirthdayButton = $Show_BirthdaysList; } $Show_BirthdayDate = $FORM{'Show_BirthdayDate'} || 0; $CalEventNoName = $FORM{'CalEventNoName'} || 0; $Event_TodayColor = uc( $FORM{'Event_TodayColor'} || '#f00' ) . '#000'; $Event_TodayColor =~ s/[^a-fA-F0-9#]//gxsm; $Event_TodayColor = substr $Event_TodayColor, 0, 7; $Delete_EventsUntil = $FORM{'Delete_EventsUntil'} || 0; $CalShortEvent = $FORM{'CalShortEvent'} || 0; $CalShortEvent =~ s/[^\d]//gxsm; $CalEventPerms = $FORM{'CalEventPerms'} || q{}; $CalEventPerms =~ s/^\s*,\s*|\s*,\s*$//gsm; $CalEventPerms =~ s/\s*,\s*/,/gsm; $CalEventMods = $FORM{'CalEventMods'} || q{}; $CalEventMods =~ s/^\s*,\s*|\s*,\s*$//gsm; $CalEventMods =~ s/\s*,\s*/,/gsm; $MaxCalMessLen = $FORM{'MaxCalMessLen'}; $MaxCalMessLen =~ s/[^\d]//gxsm; $AdMaxCalMessLen = $FORM{'AdMaxCalMessLen'}; $AdMaxCalMessLen =~ s/[^\d]//gxsm; $calsplit = $FORM{'calsplit'} || 0; $calsplit =~ s/[^\d]//gxsm; require Admin::NewSettings; SaveSettingsTo('Settings.pm'); $yySetLocation = qq~$adminurl?action=eventcal_set~; redirectexit(); return; } sub del_old_events { $caltoday = 1; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dst ) = gmtime( $date ); $year += 1900; $mon++; $caltoday = $year . sprintf( '%02d', $mon ) . sprintf '%02d', $mday; fopen( EVENTFILE, "$vardir/eventcal.db" ); my @calinput = ; fclose(EVENTFILE); for my $i ( 0 .. ( @calinput - 1 ) ) { ( $c_date, undef, undef, undef, undef, undef, undef, $c_type2, undef ) = split /\|/xsm, $calinput[$i]; chop $c_type2; if ( $c_date < $caltoday && $c_type2 < 2 ) { $calinput[$i] = q{}; } } fopen( EVENTFILE, ">$vardir/eventcal.db" ); print {EVENTFILE} @calinput or croak "$croak{'print'} EVENTFILE"; fclose(EVENTFILE); $yySetLocation = qq~$adminurl?action=eventcal_set~; redirectexit(); return; } 1;