| | 168 | sub next_archive_entry { _adjacent_archive_entry(@_, 'next' ) } |
|---|
| | 169 | sub previous_archive_entry { _adjacent_archive_entry(@_, 'previous') } |
|---|
| | 170 | |
|---|
| | 171 | sub _adjacent_archive_entry { |
|---|
| | 172 | my ( $param, $order ) = @_; |
|---|
| | 173 | |
|---|
| | 174 | $order = ( $order eq 'previous' ) ? 'descend' : 'ascend'; |
|---|
| | 175 | my $ts = $param->{ts}; |
|---|
| | 176 | my $blog_id = $param->{blog_id} || ($param->{blog} ? $param->{blog}->id : undef); |
|---|
| | 177 | |
|---|
| | 178 | # if $param->{entry} given, override $ts and $blog_id. |
|---|
| | 179 | if (my $e = $param->{entry}) { |
|---|
| | 180 | $ts = $e->authored_on; |
|---|
| | 181 | $blog_id = $e->blog_id; |
|---|
| | 182 | } |
|---|
| | 183 | my ( $start, $end ) = start_end_fiscal_year($ts); |
|---|
| | 184 | $ts = ( $order eq 'descend' ) ? $start : $end; |
|---|
| | 185 | |
|---|
| | 186 | my $entry = MT::Entry->load({ |
|---|
| | 187 | status => MT::Entry::RELEASE(), |
|---|
| | 188 | $blog_id ? ( blog_id => $blog_id ) : (), |
|---|
| | 189 | }, { |
|---|
| | 190 | limit => 1, |
|---|
| | 191 | 'sort' => 'authored_on', |
|---|
| | 192 | direction => $order, |
|---|
| | 193 | start_val => $ts, |
|---|
| | 194 | }); |
|---|
| | 195 | $entry; |
|---|
| | 196 | } |
|---|
| | 197 | |
|---|