$Mira::View::Archive::VERSION
=
'00.07.51'
;
use
5.012;
sub
template {
my
$class
=
shift
;
my
%switches
=
@_
;
my
$allposts
=
$switches
{posts};
my
$allentries
=
$switches
{allentries};
my
$config
=
$switches
{config};
my
$pensource
=
$switches
{pensource};
my
$archives
=
$switches
{archives};
my
$floor_data
=
$switches
{floor_data};
my
$build
=
$switches
{build};
foreach
my
$floor
(
keys
%$archives
)
{
my
$arch_stct
= {
%{
$archives
->{
$floor
}->{list} },
%{
$archives
->{
$floor
}->{date} }
};
foreach
my
$archive
(
keys
%$arch_stct
)
{
my
$archive_template_root
;
if
(
-f catfile(
$pensource
,
'template'
,
$config
->{
$floor
}->{template},
'archive.tt2'
)
or
-f catfile(
$pensource
,
'template'
,
$config
->{
$floor
}->{template},
"$archive.tt2"
)
)
{
$archive_template_root
= catdir(
$pensource
,
'template'
,
$config
->{
$floor
}->{template}
);
}
elsif
(
-f catfile(
$pensource
,
'template'
,
$config
->{
$floor
}->{template},
'archive.tt2'
)
or
-f catfile(
$pensource
,
'template'
,
$config
->{
$floor
}->{template},
"$archive.tt2"
)
)
{
$archive_template_root
= catdir(
$pensource
,
'template'
,
$config
->{_default}->{template}
);
}
else
{
next
;
}
foreach
my
$list
(
keys
%{
$arch_stct
->{
$archive
} } )
{
my
$show_list_url
=
$arch_stct
->{
$archive
}->{
$list
}->{url};
my
@show_list_address
=
split
( m:/:,
$show_list_url
);
my
@utids
= @{
$arch_stct
->{
$archive
}->{
$list
}->{posts} };
@utids
=
reverse
sort
@utids
;
my
$archive_index
= Template->new(
{
INCLUDE_PATH
=> [
$archive_template_root
,
catdir(
$archive_template_root
,
'include'
)
],
INTERPOLATE
=> 1,
TRIM
=> 1,
EVAL_PERL
=> 1,
ENCODING
=>
'utf8'
,
START_TAG
=>
quotemeta
(
$config
->{
$floor
}->{t_start_tag} ),
END_TAG
=>
quotemeta
(
$config
->{
$floor
}->{t_end_tag} ),
OUTLINE_TAG
=>
quotemeta
(
$config
->{
$floor
}->{t_outline_tag} ),
}) ||
die
"$Template::ERROR\n"
;
my
$vars
= {
MainTITLE
=>
$config
->{_default}->{title},
MainDESCRIPTION
=>
$config
->{_default}->{description},
MainURL
=>
$config
->{_default}->{url},
MainROOT
=>
$config
->{_default}->{root},
MainSTATIC
=>
$config
->{_default}->{static},
MainIMAGEURL
=>
$config
->{_default}->{imageurl},
MainAUTHOR
=>
$config
->{_default}->{author},
MainEMAIL
=>
$config
->{_default}->{email},
TITLE
=>
$config
->{
$floor
}->{title},
DESCRIPTION
=>
$config
->{
$floor
}->{description},
URL
=>
$config
->{
$floor
}->{url},
ROOT
=>
$config
->{
$floor
}->{root},
STATIC
=>
$config
->{
$floor
}->{static},
IMAGEURL
=>
$config
->{
$floor
}->{imageurl},
AUTHOR
=>
$config
->{
$floor
}->{author},
EMAIL
=>
$config
->{
$floor
}->{email},
ArchiveTITLE
=>
$list
,
PageTITLE
=>
"$config->{$floor}->{title} - $list"
,
ENTRIES
=>
$allentries
,
FLOORS
=>
$floor_data
,
ARCHIVES
=> {
%{
$archives
->{
$floor
}->{list} },
%{
$archives
->{
$floor
}->{date} }
},
ARCH
=>
$arch_stct
->{
$archive
}->{
$list
},
MAIN
=>
$config
->{_default},
SITE
=>
$config
->{
$floor
},
BUILD
=>
$build
,
FarsiNum
=>
bless
( \
&farsinum
,
'mira'
),
};
sub
farsinum {
my
$string
=
shift
;
$string
=~
tr
/1234567890/۱۲۳۴۵۶۷۸۹۰/;
return
$string
;
}
$vars
->{MainURL} =~ s{(?<!:)/+}{/}g;
$vars
->{MainURL} =~ s{/$}{}g;
$vars
->{MainROOT} =~ s{^(.*?):/+}{/}g;
$vars
->{MainROOT} =
"/"
.
$vars
->{MainROOT}
if
$vars
->{MainROOT} !~ m:^/:;
$vars
->{MainROOT} =~ s{/+}{/}g;
$vars
->{MainROOT} =~ s{/$}{}g
unless
$vars
->{MainROOT} eq
"/"
;
$vars
->{URL} =~ s{(?<!:)/+}{/}g;
$vars
->{URL} =~ s{/$}{}g;
$vars
->{ROOT} =~ s{^(.*?):/+}{/}g;
$vars
->{ROOT} =
"/"
.
$vars
->{ROOT}
if
$vars
->{ROOT} !~ m:^/:;
$vars
->{ROOT} =~ s{/+}{/}g;
$vars
->{ROOT} =~ s{/$}{}g
unless
$vars
->{ROOT} eq
"/"
;
if
(
$arch_stct
->{
$archive
}->{
$list
}->{year} )
{
$vars
->{ArchiveTITLE} =
$arch_stct
->{
$archive
}->{
$list
}->{year}
.
"/"
.
$arch_stct
->{
$archive
}->{
$list
}->{month};
$vars
->{PageTITLE} =
$config
->{
$floor
}->{title}
.
" - "
.
$arch_stct
->{
$archive
}->{
$list
}->{year}
.
"/"
.
$arch_stct
->{
$archive
}->{
$list
}->{month};
$vars
->{IS_DATE_ARCHIVE} =
'true'
;
}
else
{
$vars
->{IS_ARCHIVE} =
'true'
;
}
foreach
my
$field
(
keys
%{
$archives
->{
$floor
}->{list} } )
{
$vars
->{
uc
(
$field
) .
"_ARCHIVE"
} = [
reverse
sort
{
$
or
$a
->{name} cmp
$b
->{name}
} (
values
%{
$archives
->{
$floor
}->{list}->{
$field
} } )
];
}
foreach
my
$field
(
keys
%{
$archives
->{
$floor
}->{date} } ) {
$vars
->{
uc
(
$field
) .
"_ARCHIVE"
} = [
reverse
sort
{
$a
->{_year} <=>
$b
->{_year}
or
$a
->{_number} <=>
$b
->{_number}
} (
values
%{
$archives
->{
$floor
}->{date}->{
$field
} } )
];
}
my
$archive_post_num
=
(
$config
->{
$floor
}->{archive_post_num} eq
'all'
)
?
scalar
@utids
:
$config
->{
$floor
}->{archive_post_num};
my
$page_number
= 1;
my
$page_total
;
if
( (
scalar
@utids
) % (
$archive_post_num
) == 0 )
{
$page_total
= (
scalar
@utids
) / (
$archive_post_num
);
}
else
{
$page_total
=
int
( (
scalar
@utids
) / (
$archive_post_num
) ) + 1;
}
while
(
my
@pagepost
=
splice
@utids
, 0,
$archive_post_num
)
{
my
$page
= {};
my
$posts
= [];
foreach
my
$utid
(
@pagepost
)
{
push
@$posts
,
$allentries
->{
$utid
};
}
$vars
->{POSTS} =
$posts
;
my
$ext
=
$config
->{
$floor
}->{output_extension} ||
'html'
;
$ext
=~ s{^\.+}{};
my
$target
=
$page_number
== 1
?
"index.$ext"
:
"/page/$page_number/index.$ext"
;
my
$index
=
catfile(
$pensource
,
$config
->{_default}->{publishDIR},
@show_list_address
,
$target
);
$page
->{
next
}->{url} =
@utids
?
"$show_list_url/page/"
. (
$page_number
+ 1 )
.
"/index.$ext"
:
''
;
$page
->{
next
}->{url} =~ s{^(.*?):/+|/+}{/}g
if
$page
->{
next
}->{url};
$page
->{
next
}->{title} = (
$page_number
+ 1 )
if
$vars
->{
next
}->{url};
delete
$page
->{
next
}
unless
$page
->{
next
}->{url};
$page
->{prev}->{url} =
$page_number
== 1
?
''
:
"$show_list_url/page/"
. (
$page_number
- 1 )
.
"/index.$ext"
;
$page
->{prev}->{url} =
"$show_list_url/index.$ext"
if
$page_number
== 2;
$page
->{prev}->{url} =~ s{^(.*?):/+|/+}{/}g
if
$page
->{prev}->{url};
$page
->{prev}->{title} = (
$page_number
- 1 )
if
$vars
->{prev}->{url};
delete
$page
->{prev}
unless
$page
->{prev}->{url};
$page
->{number} =
$page_number
;
$page
->{total} =
$page_total
;
$vars
->{PAGE} =
$page
;
my
$arch_template
=
( -f catfile(
$archive_template_root
,
"$archive.tt2"
) )
?
"$archive.tt2"
:
"archive.tt2"
;
$archive_index
->process(
$arch_template
,
$vars
,
$index
,
{
binmode
=>
':utf8'
} )
||
die
$archive_index
->error(),
"\n"
;
$page_number
++;
}
}
}
}
}
1;