###############################################################################
# EventCal.pm #
# $Date: 06.01.17 $ #
###############################################################################
# YaBB: Yet another Bulletin Board #
# Open-Source Community Software for Webmasters #
# Version: YaBB 2.7.00 #
# Packaged: June 1, 2017 #
# Distributed by: http://www.yabbforum.com #
# =========================================================================== #
# Copyright (c) 2000-2017 YaBB (www.yabbforum.com) - All Rights Reserved. #
# Software by: The YaBB Development Team #
# with assistance from the YaBB community. #
###############################################################################
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use Time::Local;
our $VERSION = '2.7.00';
our $eventcalpmver = 'YaBB 2.7.00 $Revision$';
our @eventcalpmmods = ();
our $eventcalpmmods = 0;
if (@eventcalpmmods) {
$eventcalpmmods = 1;
}
our ($action);
$action ||= q{};
if ( $action eq 'detailedversion' ) { return 1; }
## language ##
our ( $abbr_lang, %cal_icon, %cal_icon_bg, %croak, %post_smiltxt, %post_txt,
%var_cal, %var_calpost, );
## paths ##
our ( $imagesdir, $langdir, $memberdir, $scripturl, $vardir, $yyhtml_root, );
## settings ##
our (
$birthday_list_show, $cal_event_display, $cal_event_mods,
$cal_event_noname, $cal_event_perms, $cal_event_private,
$cal_event_short, $checkallcaps, $delete_eventsuntil,
$do_scramble_id, $enable_spell_check, $enable_ubbc,
$event_todaycolor, $enabletz, $gpvalid_en,
$no_short_ubbc, $removenormalsmilies, $scroll_events,
$show_caltoday, $show_colorlinks, $show_event_birthdays,
$show_event_cal, $show_mini_calicons, $show_sunday,
$showadded, $showage, $showyabbcbutt,
$smiliestyle, $spam_questions_case, $spam_questions_gp,
$speedpostdetection, $timeselected, $user_hide_smilies_row,
$winheight, $winwidth, $yymycharset,
%addedsmilies, %newcalicon, @smilieorder,
);
## system ##
our (
$calicon_eventannounce, $calicon_eventcelebration,
$calicon_eventholiday, $calicon_eventinfo,
$calicon_eventmedia, $calicon_eventmeeting,
$calicon_eventnote, $calicon_eventparty,
$calicon_eventsport, $clipped,
$css, $ctmain,
$date, $email,
$flood_text, $forum_default,
$iamadmin, $iamgmod,
$iamguest, $invalemaila,
$invalemailb, $invalmailchar,
$language, $more_smilie_array,
$showcheck, $spam_image,
$spam_question, $spam_question_id,
$string, $uid,
$user_hide_smilies, $userdefaultlang,
$username, $yyinlinestyle,
$yymain, $yysetlocation,
$yytitle, %FORM,
%format, %INFO,
%link, %memberaddgroup,
%memberinf,
);
## templates ##
our (
$cal_day, $cal_days, $cal_eventcal,
$cat_col, $cat_exp, $my_out_a,
$my_outstring, $mycal_addnew_left, $mycal_displayssi,
$mycal_dy_top, $mycal_endaddform, $mycal_greet,
$mycal_greet_b, $mycal_greet_c, $mycal_greet_rowend,
$mycal_guest_fields, $mycal_liveprev, $mycal_noname,
$mycal_outstring, $mycal_outstring_bday, $mycal_outstring_private,
$mycal_show_ssi, $mycal_showday, $mycal_showday_b,
$mycal_showday_blnk, $mycal_showday_dstr, $mycal_spamquest,
$mycal_td_tr, $mycal_tr, $mycal_trtr,
$mycal_validation, $mycalout_addevent, $mycalout_board,
$mycalout_edit, $mycalout_edit_box, $mycalout_goto_main,
$mycalout_gottobox, $mycalout_noevent, $mycalout_notboard,
$mycalout_showevent, $myevent_link,
);
## our Mod Hook ##
load_language('EventCal');
load_language('Post');
load_language('LivePreview');
require Sources::SpamCheck;
require Sources::PostBox;
require Sources::Post;
get_micon();
get_template('Calendar');
my @add_cal_icon;
foreach my $i ( keys %newcalicon ) {
$cal_icon{ ${ $newcalicon{$i} }[1] } =
qq~
~;
$cal_icon_bg{ ${ $newcalicon{$i} }[1] } =
qq~$yyhtml_root/EventIcons/${$newcalicon{$i}}[1]~;
$var_cal{ ${ $newcalicon{$i} }[1] } = ${ $newcalicon{$i} }[0];
$add_cal_icon[$i] = qq~${$newcalicon{$i}}[0]|${$newcalicon{$i}}[1]~;
}
my $js_cal = qq~
var jsCal = new Hash(
'eventinfo', '$cal_icon_bg{'eventinfo'}',
'eventmore', '$cal_icon_bg{'eventmore'}',
'eventmorebd', '$cal_icon_bg{'eventmore'}',
'eventmoreadd', '$cal_icon_bg{'eventmore'}',
'eventannounce', '$cal_icon_bg{'eventannounce'}',
'eventholiday', '$cal_icon_bg{'eventholiday'}',
'eventnote', '$cal_icon_bg{'eventnote'}',
'eventparty', '$cal_icon_bg{'eventparty'}',
'eventcelebration', '$cal_icon_bg{'eventcelebration'}',
'eventsport', '$cal_icon_bg{'eventsport'}',
'eventmedia', '$cal_icon_bg{'eventmedia'}',
'eventmeeting', '$cal_icon_bg{'eventmeeting'}'~;
foreach my $i (@add_cal_icon) {
my ( $i_a, $i_b ) = split /[|]/xsm, $i;
$js_cal .= qq~,\n'$i_a', '$yyhtml_root/EventIcons/$i_b'~;
}
$js_cal .= qq~);\n~;
my $js_cal_txt = qq~
var jsCaltxt = new Hash(
'eventinfo', '$var_cal{'eventinfo'}',
'eventannounce', '$var_cal{'eventannounce'}',
'eventholiday', '$var_cal{'eventholiday'}',
'eventnote', '$var_cal{'eventnote'}',
'eventparty', '$var_cal{'eventparty'}',
'eventcelebration', '$var_cal{'eventcelebration'}',
'eventsport', '$var_cal{'eventsport'}',
'eventmedia', '$var_cal{'eventmedia'}',
'eventmeeting', '$var_cal{'eventmeeting'}'~;
foreach my $i (@add_cal_icon) {
my ( $i_a, $i_b ) = split /[|]/xsm, $i;
$js_cal_txt .= qq~,\n'$i_a', '$i_b'~;
}
$js_cal_txt .= qq~);\n~;
sub eventcal {
my ( $ssicalmode, $ssicaldisplay ) = @_;
if ( !$show_event_cal || ( $iamguest && $show_event_cal != 2 ) ) {
fatal_error('not_allowed');
}
my $allow_event_input = get_cal_allow();
if ( $INFO{'calgotobox'} ) {
my $goyear = $FORM{'calyear'};
my $gomon = $FORM{'calmon'};
my $goday = $FORM{'calday'};
if ($goday) {
$yysetlocation =
qq~$scripturl?action=eventcal;calshow=1;eventdate=$goyear$gomon$goday;showmini=1~;
redirectexit();
}
else {
$yysetlocation =
qq~$scripturl?action=eventcal;calshow=1;calmon=$gomon;calyear=$goyear~;
redirectexit();
}
}
# Time/Days begin
my ( $sel_year, $sel_mon, $sel_day );
if ( $INFO{'eventdate'}
&& $INFO{'eventdate'} =~ /(\d{4})(\d{2})(\d{2})/xsm )
{
( $sel_year, $sel_mon, $sel_day ) = ( $1, $2, $3 );
}
my $toffs = 0;
if ($enabletz) {
$toffs = toffs($date);
}
my $heute = $date;
my $daterechnug = $date;
if ( $INFO{'calyear'} && $INFO{'calmon'} ) {
$heute =
timegm( 0, 0, 0, 1, $INFO{'calmon'} - 1, $INFO{'calyear'} - 1900 );
$daterechnug = $heute;
}
my ( $mday, $mon, $year ) = get_cal_time( $heute + $toffs );
if ( $INFO{'calyear'} && $INFO{'calmon'} ) {
$year = $INFO{'calyear'};
$mon = $INFO{'calmon'};
$mday = 1;
}
my ( $callnewday, $callnewmonth, $callnewyear ) =
get_cal_time( $date + $toffs );
# Time/Days end
my ( $next_link, $last_link ) = get_cal_nav( $mon, $year );
my ( $caltoday, $st, $view_mon, $days, $wday1, $st_mon ) =
get_cal_sys( $mon, $year, $mday );
if ( !$show_colorlinks ) {
require Variables::Memberinfo;
}
# Add Events and GoTo
my ( $calgotobox, $addevdate ) =
get_cal_box( $mday, $sel_day, $mon, $sel_mon, $year, $sel_year );
my $mycalout_post = get_cal_addnew($addevdate);
# Event data begin
my $bd_year = $year;
if ( $INFO{'eventdate'} ) { $bd_year = substr $INFO{'eventdate'}, 0, 4; }
my @caldata = ();
## Get Birthdays ##
if ( ( $show_event_birthdays == 1 && !$iamguest )
|| $show_event_birthdays == 2 )
{
@caldata = get_cal_bmdata( $bd_year, $view_mon, $mday, $year );
}
## Get Events ##
if ( -e "$vardir/Eventcal.pm" ) {
@caldata =
get_cal_data( \@caldata, $st_mon, $bd_year, $view_mon, $mday );
}
# Event data end
# Show/Edit Events begin
if ( $INFO{'showthisdate'} || $INFO{'showmini'} || $INFO{'edit_cal_even'} )
{
get_showthisdat( \@caldata, $calgotobox, $mycalout_post,
$allow_event_input );
}
my $display_events = 0;
if ($ssicaldisplay) { $display_events = $ssicaldisplay; }
my ( $caleventbegin, $caleventend ) =
get_cal_begin( $display_events, $daterechnug, $year, $mon, $mday );
my ( $outstring, $event_index ) =
get_cal_outstring( \@caldata, $display_events, $caleventbegin,
$caleventend, $view_mon, $st, $year );
my $get_day = q{};
if ( !$scroll_events ) {
$get_day .= qq~$my_outstring$outstring
~;
}
elsif ( $scroll_events == 2 ) {
$get_day .=
qq~
$my_outstring$outstring
~;
}
elsif ( $scroll_events == 3 || $scroll_events == 1 ) {
$yyinlinestyle .=
qq~\n~;
$get_day .=
qq~ $outstring
~;
}
$outstring = $get_day;
# Print Mini EventCal begin
my ( $show_birthdayslink, $show_eventaddlink );
if ( $birthday_list_show && ( !$iamguest || $birthday_list_show != 1 ) ) {
$cal_icon{'eventmorebd'} ||= q{};
$show_birthdayslink =
qq~ $cal_icon{'eventmorebd'} $var_cal{'calbdaylist'}~;
}
if ( $allow_event_input && !$INFO{'addnew'} == 1 ) {
$show_eventaddlink =
qq~
$cal_icon{'eventmoreadd'} $var_calpost{'getaddevent'}~;
}
my $mon_name = $var_cal{$st};
if ( $mon == 2 ) {
if ( $year % 4 == 0 ) { $days = 29; }
}
my @dstr;
my $cal_out_d = q{};
foreach my $i ( 1 .. 7 ) {
$st = "calday_$i";
$dstr[ $i - 1 ] = $mycal_showday_dstr;
$dstr[ $i - 1 ] =~ s/\Q{yabb cal_day}\E/$cal_day/xsm;
$dstr[ $i - 1 ] =~ s/\Q{yabb var_cal_st}\E/$var_cal{$st}/xsm;
}
my $dcnt = 0;
my $e_day = $wday1;
if ( $wday1 > 1 ) {
foreach my $i ( 1 .. ( $wday1 - 1 ) ) {
$cal_out_d .= $mycal_showday_blnk;
}
}
if ( !$event_todaycolor ) { $event_todaycolor = '#FF0000'; }
my $cal_out_dy = q{};
foreach my $i ( 1 .. $days ) {
my $dddd = sprintf '%02d', $i;
my $sel = qq~$i~;
if ( $callnewday
&& $callnewday == $i
&& $mon == $callnewmonth
&& $year == $callnewyear )
{
$sel =
qq~$i~;
}
my $cal_pic = q{};
{
no strict qw(refs);
if ( !exists( ${ 'event' . $year . $view_mon . $dddd }{'calday'} )
&& exists( ${ 'bday' . $year . $view_mon . $dddd }{'calday'} ) )
{
$cal_pic = $cal_icon_bg{'eventbd'};
}
if ( exists( ${ 'event' . $year . $view_mon . $dddd }{'calday'} )
&& !exists( ${ 'bday' . $year . $view_mon . $dddd }{'calday'} )
)
{
$cal_pic = $cal_icon_bg{'eventinfo'};
}
if ( exists( ${ 'event' . $year . $view_mon . $dddd }{'calday'} )
&& exists( ${ 'bday' . $year . $view_mon . $dddd }{'calday'} ) )
{
$cal_pic = $cal_icon_bg{'eventinfobd'};
}
if (
exists(
${
'private' . $year . $view_mon . $dddd . $username . '2'
}{'private'}
)
)
{
$cal_pic = $cal_icon_bg{'eventprivate'};
}
}
if ($show_mini_calicons) { $cal_pic = q{}; }
{
no strict qw(refs);
if ( exists( ${ 'bday' . $year . $view_mon . $dddd }{'calday'} )
|| exists( ${ 'event' . $year . $view_mon . $dddd }{'calday'} )
)
{
$cal_out_dy .= $mycal_showday;
$cal_out_dy =~ s/\Q{yabb cal_days}\E/$cal_days/xsm;
$cal_out_dy =~ s/\Q{yabb cal_pic}\E/$cal_pic/xsm;
$cal_out_dy =~ s/\Q{yabb year}\E/$year/xsm;
$cal_out_dy =~ s/\Q{yabb view_mon}\E/$view_mon/xsm;
$cal_out_dy =~ s/\Q{yabb dddd}\E/$dddd/xsm;
$cal_out_dy =~ s/\Q{yabb sel}\E/$sel/xsm;
}
else {
$cal_out_dy .= $mycal_showday_b;
$cal_out_dy =~ s/\Q{yabb cal_days}\E/$cal_days/xsm;
$cal_out_dy =~ s/\Q{yabb sel}\E/$sel/xsm;
}
}
$e_day++;
$wday1++;
if ( $wday1 > 7 && $i != $days ) {
$wday1 = 1;
$cal_out_dy .= $mycal_trtr;
}
}
my $endrow = 42;
if ( $e_day < 36 ) { $endrow = 35; }
my $endday = $endrow - $e_day + 2;
my $cal_out_blnk = q{};
my $cal_out = q{};
if ( $endday < 8 ) {
if ( $endday > 1 ) { $cal_out .= $mycal_tr; }
foreach my $i ( 1 .. ( $endday - 1 ) ) {
$cal_out_blnk .= $mycal_showday_blnk;
}
}
$cal_out_blnk ||= q{};
$cal_out .= $mycal_dy_top;
$cal_out =~ s/\Q{yabb cal_out_d}\E/$cal_out_d/xsm;
$cal_out =~ s/\Q{yabb cal_out_dy}\E/$cal_out_dy/xsm;
$cal_out =~ s/\Q{yabb cal_out_blnk}\E/$cal_out_blnk/xsm;
my $weekdays = qq~$dstr[0]$dstr[1]$dstr[2]$dstr[3]$dstr[4]$dstr[5]$dstr[6]~;
if ($show_sunday) {
$weekdays =
qq~$dstr[6]$dstr[0]$dstr[1]$dstr[2]$dstr[3]$dstr[4]$dstr[5]~;
}
# Print Mini EventCal end
# EventCal Output begin
my $cal_displayssi = $mycal_displayssi;
$cal_displayssi =~ s/\Q{yabb last_link}\E/$last_link/gxsm;
$cal_displayssi =~ s/\Q{yabb mon_name}\E/$mon_name/gxsm;
$cal_displayssi =~ s/\Q{yabb year}\E/$year/gxsm;
$cal_displayssi =~ s/\Q{yabb next_link}\E/$next_link/gxsm;
$cal_displayssi =~ s/\Q{yabb weekdays}\E/$weekdays/gxsm;
$cal_displayssi =~ s/\Q{yabb cal_out}\E/$cal_out/gxsm;
my $cal_display_show = $mycalout_goto_main;
if ( $outstring !~ /$yyhtml_root\//xsm ) {
$outstring = $my_out_a;
$outstring =~ s/\Q{yabb cal_eventinfo}\E/$cal_icon{'eventinfo'}/xsm;
}
if ( $action eq 'eventcal' && !$INFO{'calshow'} ) { $INFO{'calshow'} = 1; }
my ($cal_display_calevent);
if ( $cal_event_display || $INFO{'calshow'} ) {
$event_index ||= q{};
$cal_display_calevent = qq~
$event_index
$outstring~;
}
my $cal_allow = q{};
if ($allow_event_input) {
$cal_allow = q{};
if ( $INFO{'addnew'} && $INFO{'addnew'} == 1 ) {
$cal_allow .= $mycal_addnew_left;
$cal_allow =~ s/\Q{yabb mycalout_post}\E/$mycalout_post/xsm;
$cal_allow =~ s/\Q{yabb cal_modify}\E/$cal_icon{'modify'}/xsm;
}
}
$show_eventaddlink ||= q{};
$cal_display_calevent ||= q{};
$show_birthdayslink ||= q{};
my $cal_display = $mycal_show_ssi;
$cal_display =~ s/\Q{yabb cal_display_show}\E/$cal_display_show/xsm;
$cal_display =~ s/\Q{yabb calgotobox}\E/$calgotobox/xsm;
$cal_display =~ s/\Q{yabb cal_displayssi}\E/$cal_displayssi/xsm;
$cal_display =~ s/\Q{yabb ShowBirthdaysLink}\E/$show_birthdayslink/xsm;
$cal_display =~ s/\Q{yabb ShowEventAddLink}\E/$show_eventaddlink/xsm;
$cal_display =~ s/\Q{yabb cal_display_calevent}\E/$cal_display_calevent/xsm;
$cal_display =~ s/\Q{yabb cal_allow}\E/$cal_allow/xsm;
## Print EventCal SSI ##
if ( $ssicalmode && $ssicalmode == 1 ) { return $cal_display; }
elsif ( $ssicalmode && $ssicalmode == 2 ) { return $cal_displayssi; }
elsif ( $ssicalmode && $ssicalmode == 3 ) { return $outstring; }
####################################################################################################################
## Print EventCal in new window ##
if ( $INFO{'calshow'} && $INFO{'calshow'} == 1 ) {
$yymain .= $mycalout_notboard;
$yymain =~ s/\Q{yabb cal_display}\E/$cal_display/gxsm;
$yytitle = $var_cal{'yytitle'};
template();
return;
}
$mycalout_board =~ s/\Q{yabb cal_display}\E/$cal_display/xsm;
return $mycalout_board;
}
sub del_cal {
if ($iamguest) { fatal_error('not_allowed'); }
if ( $INFO{'caldel'} == 1 && -e "$vardir/Eventcal.pm" ) {
our (%event);
require Variables::Eventcal;
delete $event{ $INFO{'calid'} };
my $prncal = q{};
foreach my $i ( keys %event ) {
${ $event{$i} }[4] =~ s/"/\\x22/gxsm;
my $event = join q{", "}, @{ $event{$i} };
$prncal .= qq~\$event{'$i'} = ["$event"];\n~;
}
$prncal .= qq~\n1;\n~;
our ($FILE);
fopen( 'FILE', '>', "$vardir/Eventcal.pm" )
or croak "$croak{'open'} Eventcal";
print {$FILE} $prncal or croak "$croak{'print'} Eventcal";
fclose('FILE') or croak "$croak{'close'} Eventcal";
}
del_old_events();
$yysetlocation = qq~$scripturl?action=eventcal;calshow=1~;
redirectexit();
return;
}
## Add Events ##
sub add_cal {
if ( !$show_event_cal || ( $iamguest && $show_event_cal != 2 ) ) {
fatal_error('not_allowed');
}
if ($iamguest) {
if ($gpvalid_en) {
require Sources::Decoder;
validation_check( $FORM{'verification'} );
}
if ( $spam_questions_gp
&& -e "$langdir/$language/spam.questions" )
{
spam_question_check(
$FORM{'verification_question'},
$FORM{'verification_question_id'}
);
}
}
{
no strict qw(refs);
if ( !${ $uid . $username }{'email'} ) {
$FORM{'name'} =~ s/\A\s+//xsm;
$FORM{'name'} =~ s/\s+\Z//xsm;
if ( $FORM{'name'} eq q{}
|| $FORM{'name'} eq q{_}
|| $FORM{'name'} eq q{ } )
{
preview( $post_txt{'75'} );
}
if ( length( $FORM{'name'} ) > 25 ) {
preview( $post_txt{'568'} );
}
if ( $FORM{'email'} eq {} ) { preview( $post_txt{'76'} ); }
if ( $FORM{'email'} !~ /^$invalmailchar$/xsm ) {
preview("$post_txt{'240'} $post_txt{'69'} $post_txt{'241'}");
}
if ( ( $FORM{'email'} =~ /$invalemaila/xsm )
|| ( $FORM{'email'} !~ /$invalemailb/xsm ) )
{
preview( $post_txt{'500'} );
}
}
}
email_domain_check($email);
my ($calmessage);
if ( $FORM{'message'} && length( $FORM{'message'} ) > 0 ) {
$calmessage = $FORM{'message'};
$calmessage =~ s/[|]//gxsm;
$calmessage =~ s/\cM//gxsm;
$calmessage =~ s/[:][`][(]/\:\x27\(/gxsm;
if ( $calmessage =~ m/\[([^\]]{0,30})\n([^\]]{0,30})\]/xsm ) {
$calmessage =~ s/\[([^\]]{0,30})\n([^\]]{0,30})\]/\[$1$2\]/gxsm;
}
if ( $calmessage =~ m/\[\/([^\]]{0,30})\n([^\]]{0,30})\]/xsm ) {
$calmessage =~ s/\[\/([^\]]{0,30})\n([^\]]{0,30})\]/\[\/$1$2\]/gxsm;
}
if ( $calmessage =~
m/(\w+:\/\/[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)/xsm )
{
$calmessage =~
s/(\w+:\/\/[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)/$1\n$2/gxsm;
}
$calmessage = from_chars($calmessage);
$calmessage = to_html($calmessage);
$calmessage =~ s/\t/ \ \ \ /gxsm;
$calmessage =~ s/\n/
/gxsm;
$calmessage =~ s/([\000-\x09\x0b\x0c\x0e-\x1f\x7f])/\x0d/gxsm;
$calmessage =~ s/"/\\x22/gxsm;
my ($guestname);
if ($iamguest) {
$guestname = $FORM{'name'};
$guestname = from_chars($guestname);
$guestname = to_html($guestname);
}
our (%event);
if ( -e "$vardir/Eventcal.pm" ) {
require Variables::Eventcal;
}
%event = get_cal_add_ev( $calmessage, $username, $guestname, \%event );
my $prncal = q{};
foreach my $i ( keys %event ) {
${ $event{$i} }[4] =~ s/"/\\x22/gxsm;
my $event = join q{", "}, @{ $event{$i} };
$prncal .= qq~\$event{'$i'} = ["$event"];\n~;
}
$prncal .= qq~\n1;\n~;
our ($EVENTFILE);
fopen( 'EVENTFILE', '>', "$vardir/Eventcal.pm" )
or croak "$croak{'open'} Eventcal";
print {$EVENTFILE} $prncal or croak "$croak{'print'} Eventcal";
fclose('EVENTFILE') or croak "$croak{'close'} Eventcal";
{
no strict qw(refs);
if (
!$iamguest
&& ( !${ $uid . $username }{'postlayout'}
|| ${ $uid . $username }{'postlayout'} ne
qq~$FORM{'messageheight'}|$FORM{'messagewidth'}|$FORM{'txtsize'}|$FORM{'col_row'}~
)
)
{
${ $uid . $username }{'postlayout'} =
qq~$FORM{'messageheight'}|$FORM{'messagewidth'}|$FORM{'txtsize'}|$FORM{'col_row'}~;
user_account( $username, 'update' );
}
}
}
del_old_events();
my ( $mday, $mon, $year ) = get_cal_time($date);
$FORM{'selmon'} ||= $mon;
$FORM{'selyear'} ||= $year;
$yysetlocation =
qq~$scripturl?action=eventcal;calshow=1;calmon=$FORM{'selmon'};calyear=$FORM{'selyear'}~;
redirectexit();
return;
}
## Delete old events ##
sub del_old_events {
return if !$delete_eventsuntil;
my $caltoday = $delete_eventsuntil;
if ( $caltoday == 1 ) {
my ( $mday, $mon, $year ) = get_cal_time($date);
$caltoday = $year . sprintf( '%02d', $mon ) . sprintf '%02d', $mday;
}
our (%event);
require Variables::Eventcal;
foreach my $c_type2 ( keys %event ) {
my ($c_date) = ${ $event{$c_type2} }[0];
if ( $c_date < $caltoday && $c_type2 < 2 ) { delete $event{$c_type2}; }
}
my $prncal = q{};
foreach my $i ( keys %event ) {
${ $event{$i} }[4] =~ s/"/\\x22/gxsm;
my $event = join q{", "}, @{ $event{$i} };
$prncal .= qq~\$event{'$i'} = ["$event"];\n~;
}
$prncal .= qq~\n1;\n~;
our ($EVENTFILE);
fopen( 'EVENTFILE', '>', "$vardir/Eventcal.pm" )
or croak "$croak{'open'} Eventcal";
print {$EVENTFILE} $prncal or croak "$croak{'print'} Eventcal";
fclose('EVENTFILE') or croak "$croak{'close'} Eventcal";
return;
}
## Event Icon ##
sub calicontext {
my ($currenticon) = @_;
my ($icon_out);
foreach my $i ( keys %newcalicon ) {
if ( ${ $newcalicon{$i} }[0] eq $currenticon ) {
$icon_out = ${ $newcalicon{$i} }[1];
}
}
return $icon_out;
}
sub countlines {
my ($convertst) = @_;
my @string = split //xsm, $convertst;
my $str = q{};
foreach my $i ( 0 .. 2 ) {
$str .= qq~$string[$i]
~;
}
return $str;
}
sub get_cal_time {
my ($get_time) = @_;
my ( $mday, $mon, $year ) =
( gmtime $get_time )[ 3, 4, 5 ];
$year += 1900;
$mon += 1;
return ( $mday, $mon, $year );
}
sub get_cal_allow {
my $allow_event_input = 0;
if ($iamadmin) { $allow_event_input = 1; }
elsif ( !$cal_event_perms ) { $allow_event_input = 1; }
elsif ( $iamguest && $cal_event_perms ) { $allow_event_input = 0; }
else {
no strict qw(refs);
foreach my $element ( split /,/xsm, $cal_event_perms ) {
if ( ${ $uid . $username }{'position'}
&& $element eq ${ $uid . $username }{'position'} )
{
$allow_event_input = 1;
last;
}
if ( $memberaddgroup{$username} ) {
foreach my $i ( split /,/xsm, $memberaddgroup{$username} ) {
if ( $element eq $i ) { $allow_event_input = 1; last; }
}
}
}
if ( !$allow_event_input && $cal_event_mods ) {
foreach my $i ( split /,/xsm, $cal_event_mods ) {
if ( $i eq $username ) { $allow_event_input = 1; last; }
}
}
}
return $allow_event_input;
}
sub get_cal_nav {
my ( $mon, $year ) = @_;
if ( !$INFO{'calmon'} ) { $INFO{'calmon'} = $mon; }
if ( $INFO{'calmon'} > 12 ) { $INFO{'calmon'} = 12; }
my $next_mon = $INFO{'calmon'} + 1;
my $next_year = $year;
my $st_mon = $next_mon;
$st_mon = sprintf '%02d', $st_mon;
my $stnext = 'calmon_' . $st_mon;
my $stnextname = $var_cal{$stnext} || q{};
my $last_mon = $INFO{'calmon'} - 1;
$st_mon = $last_mon;
$st_mon = sprintf '%02d', $st_mon;
my $stlast = 'calmon_' . $st_mon;
my $stlastname = $var_cal{$stlast} || q{};
my $last_year = $year;
if ( $INFO{'calmon'} == 12 ) { $next_mon = 1; $next_year = $year + 1; }
if ( $INFO{'calmon'} == 1 ) { $last_mon = 12; $last_year = $year - 1; }
$next_mon = sprintf '%02d', $next_mon;
$last_mon = sprintf '%02d', $last_mon;
my $next_link =
qq~»~;
my $last_link =
qq~«~;
return ( $next_link, $last_link );
}
sub get_cal_sys {
my ( $mon, $year, $mday ) = @_;
my @mon_days = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
my $days = $mon_days[ $mon - 1 ];
my $wday1 = ( gmtime( timegm( 0, 0, 0, 1, $mon - 1, $year ) ) )[6];
if ($show_sunday) { $wday1++; }
if ( $wday1 == 0 ) { $wday1 = 7; }
my $caltoday = $year . sprintf( '%02d', $mon ) . sprintf '%02d', $mday;
my $st_mon = sprintf '%02d', $mon;
my $st = 'calmon_' . $st_mon;
my $view_mon = sprintf '%02d', $mon;
return ( $caltoday, $st, $view_mon, $days, $wday1, $st_mon );
}
sub get_cal_box {
my @args = @_;
my ( $mday, $sel_day, $mon, $sel_mon, $year, $sel_year ) = @args;
my (
$sdays_inner, $boxdays_inner, $smonths_inner,
$boxmonths_inner, $syears_inner, $boxyears_inner,
);
foreach my $i ( 1 .. 31 ) {
my $sel = q{};
if ( !$sel_day && $mday == $i ) {
$sel = ' selected="selected"';
}
elsif ( $sel_day && $sel_day == $i ) {
$sel = ' selected="selected"';
}
$sdays_inner .=
q~ \n~;
$boxdays_inner .=
q~ \n~;
}
foreach my $i ( 1 .. 12 ) {
my $sel = q{};
if ( $mon == $i && !$sel_mon ) {
$sel = ' selected="selected"';
}
elsif ( $sel_mon && $sel_mon == $i ) {
$sel = ' selected="selected"';
}
$smonths_inner .=
q~ \n~;
$boxmonths_inner .=
q~ \n~;
}
foreach my $i ( ( $year - 3 ) .. ( $year + 3 ) ) {
my $sel = q{};
if ( !$sel_year && $year == $i ) {
$sel = ' selected="selected"';
}
elsif ( $sel_year && $sel_year == $i ) {
$sel = ' selected="selected"';
}
$syears_inner .= qq~ \n~;
$boxyears_inner .= qq~ \n~;
}
## date selections - formated ##
my $sdays = qq~
~;
my $boxdays =
qq~
~;
my $smonths = qq~
~;
my $boxmonths =
qq~
~;
my $syears = qq~
~;
my $boxyears =
qq~
~;
my $mytimeselected = $timeselected;
{
no strict qw(refs);
if ( ${ $uid . $username }{'timeselect'} ) {
$mytimeselected = ${ $uid . $username }{'timeselect'};
}
}
my $addevdate = $smonths . $sdays;
my $calgotobox_dm = $boxmonths . $boxdays;
if ( $mytimeselected =~ /[8632]/xsm ) {
$addevdate = $sdays . $smonths;
$calgotobox_dm = $boxdays . $boxmonths;
}
$addevdate .= $syears;
my $calgotobox = qq~
\n~;
return ( $calgotobox, $addevdate );
}
sub get_cal_addnew {
my ($addevdate) = @_;
my ( $calicon, $class, $option_noname, $mycalout_caltype,
$mycalout_calicon, $mycalout_cthelp )
= ( q{}, q{}, q{}, q{}, q{}, q{}, q{} );
my (
$mycalout_smilies, $mycalout_chars, $guestpost_fields,
$verification_field, $mycalout_spamquestion
) = ( q{}, q{}, q{}, q{}, q{} );
my ( $liveusernamelink, $mycalout_send, $mycalout_post2, $mycalout_post3,
$col_row, $my_postsection_ajx )
= ( q{}, q{}, q{}, q{}, q{}, q{} );
my $messageblock = q{};
if ( $INFO{'addnew'} ) {
if ( $INFO{'edit_cal_even'} ) {
$var_cal{'calevent'} = "$var_cal{'caledit'}:";
}
$calicon = 'eventinfo';
if ( !$INFO{'edit_typ'} ) {
$INFO{'edit_typ'} = 'a';
}
if ( $INFO{'edit_icon'} ) {
$class = "calicon_$INFO{'edit_icon'}";
{
no strict qw(refs);
${$class} = ' selected="selected"';
}
$calicon = $INFO{'edit_icon'};
}
if ( ( $cal_event_noname == 0 && ( $iamadmin || $iamgmod ) )
|| ( $cal_event_noname == 1 && !$iamguest ) )
{
$option_noname = $mycal_noname;
$option_noname =~
s/\Q{yabb cecknonam}\E/${ischecked($INFO{'edit_nonam'})}/xsm;
}
my $option_private = q{};
if ( $iamadmin
|| $iamgmod
|| ( $cal_event_private == 1 && !$iamguest ) )
{
$option_private =
qq~~;
}
$mycalout_caltype = qq~
/
~;
$calicon_eventinfo ||= q{};
$calicon_eventholiday ||= q{};
$calicon_eventannounce ||= q{};
$calicon_eventnote ||= q{};
$calicon_eventparty ||= q{};
$calicon_eventcelebration ||= q{};
$calicon_eventsport ||= q{};
$calicon_eventmedia ||= q{};
$calicon_eventmeeting ||= q{};
$mycalout_calicon = get_mycalouticon();
$mycalout_cthelp = get_mycalcthelp();
$mycalout_smilies = get_caloutsmilies();
$mycalout_chars = qq~
~;
( $guestpost_fields, $verification_field, $mycalout_spamquestion ) =
get_cal_guestflds();
if ($iamguest) {
$liveusernamelink =
qq~
$var_cal{'by'} ($var_cal{'guest'})~;
}
else {
$liveusernamelink =
qq~
$var_cal{'by'} $format{$username}~;
}
if ( !$INFO{'edit_cal_even'} ) {
my $submittxt = $var_calpost{'event_send'};
$mycalout_send = qq~
~;
if ($speedpostdetection) {
$mycalout_send .= q~
~;
}
$mycalout_send .= $mycal_endaddform;
}
$col_row ||= 0;
$mycalout_post2 = postbox2();
$mycalout_post3 = postbox3();
my $livemsgimg =
qq~
~;
my $my_evtitle = q~~;
my $my_private = q~~;
$messageblock = $mycal_liveprev;
$messageblock =~ s/\Q{yabb css}\E/$css/gxsm;
$messageblock =~ s/\Q{yabb eventuserlink}\E/$liveusernamelink/gxsm;
$messageblock =~ s/\Q{yabb cdate}\E/<\/span>/gxsm;
$messageblock =~ s/\Q{yabb my_cal_icon}\E/$livemsgimg/gxsm;
$messageblock =~ s/\Q{yabb my_cal_private}\E/$my_private/xsm;
$messageblock =~ s/\Q{yabb icon_text}\E/$my_evtitle/xsm;
$messageblock =~ s/\Q{yabb message}\E/<\/span>/gxsm;
$messageblock =~ s/\Q{yabb \E(.+?)}//gxsm;
$my_postsection_ajx = my_check_prev( $checkallcaps, 0, 'calsubmit' );
}
my $my_subcheck = get_cal_subcheck();
my $mycalout_post = qq~
$my_subcheck