use botm_common (
'HTTP_STATUS',
'read_header_env',
- 'read_data_file', 'write_data_file',
'url_query_decode',
'join_path',
'open_encoded', '_x_encoded',
'fail_method', 'fail_content_type', 'redirect',
'get_remote_addr', 'get_frame', 'get_password',
'merge_settings',
- 'print_viewer_page', 'write_index', 'write_static_goto',
- 'ong'
+ 'print_viewer_page',
+ 'write_index', 'write_static_goto', 'write_static_viewer_page',
+ 'ong',
+ 'read_frame_data', 'read_default', 'read_noaccess',
+ 'read_words_list', 'read_settings', 'read_story', 'read_goto',
+ 'read_state', 'write_state',
+ 'get_page_file'
);
###PERL_PATH_SEPARATOR: PATH_SEPARATOR = /
###PERL_CGI_PATH: CGI_PATH = /bsta/
###PERL_CGI_VIEWER_PATH: CGI_VIEWER_PATH = /bsta/v
-###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
-###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
-###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
-###PERL_DATA_NOACCESS_PATH: DATA_NOACCESS_PATH = /botm/data/bsta/noaccess
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
-###PERL_DATA_STORY_PATH: DATA_STORY_PATH = /botm/data/bsta/story
-###PERL_DATA_WORDS_PATH: DATA_WORDS_PATH = /botm/data/bsta/words/
###PERL_WWW_PATH: WWW_PATH = /botm/www/
my $method;
my $frame;
-my $frame_data_path;
my $prev_frame_data_path;
my $next_frame_data_path;
my $password;
my $fh;
my $show_command;
my $ongtime;
+my $goto;
my $text_mode;
my $words_page;
my $words_data_path;
$frame = get_frame(\%cgi);
$password = get_password(\%cgi);
-%settings = read_data_file(DATA_SETTINGS_PATH());
-%default = read_data_file(DATA_DEFAULT_PATH());
+%settings = read_settings();
+%default = read_default();
if ($frame >= 0) {
- $frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame);
- %frame_data= read_data_file($frame_data_path);
+ %frame_data= read_frame_data($frame);
}
$password_ok = ($password eq $settings{'password'});
if (open_encoded($fh, "+<:encoding(UTF-8)", DATA_STATE_PATH())) {
if (flock($fh, 2)) {
- %state = read_data_file($fh);
+ %state = read_state($fh);
if ($frame < 0) {
$frame = int($state{'last'}) + $frame +1;
if ($frame >= 0) {
$force_redirect = 1;
- $frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame);
- %frame_data = read_data_file($frame_data_path);
+ %frame_data = read_frame_data($frame);
}
}
elsif ($state{'ip3'} eq '') {
$new_state{'ip3'} = $IP;
$new_state{'state'} = STATE->{'ready'};
- write_static_goto(\%new_state, \%settings, '');
}
else {
$new_state{'state'} = STATE->{'ready'};
+ }
+ if ($new_state{'state'} == STATE->{'ready'}) {
write_static_goto(\%new_state, \%settings, '');
+ write_static_viewer_page(
+ $frame-1,
+ \%new_state,
+ \%settings,
+ \%default,
+ '', # frame data
+ '', # prev frame data
+ \%frame_data, # next frame data,
+ '' # words data
+ );
}
- write_data_file($fh, \%new_state);
+ write_state($fh, \%new_state);
}
}
elsif (
(int($state{'state'}) == STATE->{'inactive'}) &&
- ($frame == 1)
+ ($frame == 1) &&
+ (!$password_ok)
) {
# ready to activate?
# NOTE: at this point frame 0 is already ONGed.
my $ong_time = int($settings{'firstongtime'});
my $r;
- %story = read_data_file(DATA_STORY_PATH());
- %goto_list = read_data_file(DATA_LIST_PATH());
+ %story = read_story();
+ %goto_list = read_goto();
if (
(int($story{'state'}) == INTF_STATE->{'>|'} ) &&
$r = write_static_goto(\%state, \%settings, \%goto_list);
}
if ($r) {
- $r = write_data_file($fh, \%state);
+ $r = write_state($fh, \%state);
}
unless ($r) {
# FAILED ONG! Story as if it was inactive!
exit redirect($method, CGI_PATH(), HTTP_STATUS->{'see_other'});
}
elsif ($frame < int($state{'last'})) {
- my $page_file;
- if ($frame_data{'page'} ne '') {
- $page_file = $frame_data{'page'};
- }
- else {
- $page_file = sprintf(
- $settings{'frame'},
- $frame, 'htm'
- );
- }
+ my $page_file = get_page_file($frame, \%frame_data, \%settings);
if (_x_encoded('-f',
join_path(PATH_SEPARATOR(), WWW_PATH() , $page_file)
)) {
{'path' => $frame}
);
unless ($no_cgi) {
+ delete $cgi{'f'}; # to avoid infinite loop
$redirect_url = merge_url(
{'path' => $redirect_url},
{'query' => \%cgi}
}
if ($frame > 0) {
- $prev_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame-1);
- %prev_frame_data = read_data_file($prev_frame_data_path);
+ %prev_frame_data = read_frame_data($frame-1, \%default);
}
- $next_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame+1);
- %next_frame_data = read_data_file($next_frame_data_path);
-
- %frame_data = merge_settings(\%default, \%frame_data);
- %prev_frame_data = merge_settings(\%default, \%prev_frame_data);
- %next_frame_data = merge_settings(\%default, \%next_frame_data);
+ else {
+ %prev_frame_data = %default;
+ }
+ %next_frame_data = read_frame_data($frame+1, \%default);
+ %frame_data = merge_settings(\%default, \%frame_data);
}
else {
# replace frame data with fail state replacement
- %frame_data = read_data_file(DATA_NOACCESS_PATH());
- %frame_data = merge_settings(\%default, \%frame_data);
+ %frame_data = read_noaccess(\%default);
}
$timer = int($state{'nextong'}) - $time;
$text_mode = TEXT_MODE->{'normal'};
}
$words_page = int($cgi{'i'});
+$goto = int($cgi{'g'});
-$words_data_path = join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $frame);
-%words_data = read_data_file(
- $words_data_path, # file
- '', # encoding
- 0, # no header
- ($text_mode != TEXT_MODE->{'words'}), # header only
- 1, # as list
+%words_data = read_words_list(
+ $frame,
+ ($text_mode != TEXT_MODE->{'words'})
);
if (!$access) {
'static' => 0,
'show_command' => $show_command,
'text_mode' => $text_mode,
- 'words_page' => $words_page
+ 'words_page' => $words_page,
+ 'goto' => $goto
},
\%state,
\%settings,