| 1 | # Movable Type (r) Open Source (C) 2001-2008 Six Apart, Ltd. |
|---|
| 2 | # This program is distributed under the terms of the |
|---|
| 3 | # GNU General Public License, version 2. |
|---|
| 4 | # |
|---|
| 5 | # $Id$ |
|---|
| 6 | |
|---|
| 7 | package MT::Touch; |
|---|
| 8 | |
|---|
| 9 | use strict; |
|---|
| 10 | use base qw( MT::Object ); |
|---|
| 11 | |
|---|
| 12 | __PACKAGE__->install_properties({ |
|---|
| 13 | column_defs => { |
|---|
| 14 | id => 'integer not null auto_increment', |
|---|
| 15 | blog_id => 'integer', |
|---|
| 16 | object_type => 'string(255)', |
|---|
| 17 | modified_on => 'datetime', |
|---|
| 18 | }, |
|---|
| 19 | indexes => { |
|---|
| 20 | blog_type => { |
|---|
| 21 | columns => ['blog_id', 'object_type', 'modified_on'], |
|---|
| 22 | }, |
|---|
| 23 | }, |
|---|
| 24 | primary_key => 'id', |
|---|
| 25 | datasource => 'touch', |
|---|
| 26 | }); |
|---|
| 27 | |
|---|
| 28 | sub latest_touch { |
|---|
| 29 | my $pkg = shift; |
|---|
| 30 | my ($blog_id, @types) = @_; |
|---|
| 31 | my $user = grep 'author', @types; |
|---|
| 32 | my $latest = $pkg->load({ object_type => \@types, blog_id => $blog_id }, |
|---|
| 33 | { sort => 'modified_on', direction => 'descend' }); |
|---|
| 34 | # Special case for 'user' type, which has no blog_id value |
|---|
| 35 | if ($user) { |
|---|
| 36 | my $user = $pkg->load({ object_type => 'author', blog_id => 0 }); |
|---|
| 37 | if ($user) { |
|---|
| 38 | if (!$latest || ($user->modified_on > $latest->modified_on)) { |
|---|
| 39 | $latest = $user; |
|---|
| 40 | } |
|---|
| 41 | } |
|---|
| 42 | } |
|---|
| 43 | return $latest ? $latest->modified_on : undef; |
|---|
| 44 | } |
|---|
| 45 | |
|---|
| 46 | sub touch { |
|---|
| 47 | my $pkg = shift; |
|---|
| 48 | my ($blog_id, @types) = @_; |
|---|
| 49 | my ($s,$m,$h,$d,$mo,$y) = gmtime(time); |
|---|
| 50 | my $mod_time = sprintf("%04d%02d%02d%02d%02d%02d", |
|---|
| 51 | 1900+$y, $mo+1, $d, $h, $m, $s); |
|---|
| 52 | foreach my $type (@types) { |
|---|
| 53 | my $rec = $pkg->get_by_key({ |
|---|
| 54 | blog_id => ($type eq 'author' ? 0 : $blog_id), |
|---|
| 55 | object_type => $type |
|---|
| 56 | }); |
|---|
| 57 | $rec->modified_on( $mod_time ); |
|---|
| 58 | $rec->save; |
|---|
| 59 | } |
|---|
| 60 | return $mod_time; |
|---|
| 61 | } |
|---|
| 62 | |
|---|
| 63 | 1; |
|---|