Changeset 1778

Show
Ignore:
Timestamp:
04/05/08 01:31:43 (15 months ago)
Author:
bchoate
Message:

Changes to update type-based touches prior to any rebuilding. Added 'pre_build', 'post_build' callbacks that wrap entire build process (pre_build is called at start of multi-request build process; post_build is called at the end). Added a total publish time message at end of build process. BugId:74814

Location:
branches/release-33
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • branches/release-33/lib/MT/App.pm

    r1769 r1778  
    664664    MT->add_callback('post_save', 0, $app, \&_cb_mark_blog ); 
    665665    MT->add_callback('MT::Blog::post_remove', 0, $app, \&_cb_unmark_blog ); 
     666    MT->add_callback('pre_build', 9, $app, sub { $app->touch_blogs() } ); 
    666667    MT->add_callback('new_user_provisioning', 5, $app, \&_cb_user_provisioning); 
    667668} 
  • branches/release-33/lib/MT/App/CMS.pm

    r1770 r1778  
    30763076        # now, rebuild indexes for affected blogs 
    30773077        my @blogs = $app->param('blog_ids'); 
    3078         foreach my $blog_id (@blogs) { 
    3079             my $blog = MT::Blog->load($blog_id) or next; 
    3080             $app->rebuild_indexes( Blog => $blog ) 
    3081                 or return $app->publish_error(); 
    3082         } 
    3083         my $this_blog = MT::Blog->load( $app->param('blog_id') ); 
    3084         $app->run_callbacks( 'rebuild', $this_blog ); 
     3078        if (@blogs) { 
     3079            $app->run_callbacks( 'pre_build' ) if @blogs; 
     3080            foreach my $blog_id (@blogs) { 
     3081                my $blog = MT::Blog->load($blog_id) or next; 
     3082                $app->rebuild_indexes( Blog => $blog ) 
     3083                    or return $app->publish_error(); 
     3084            } 
     3085            my $blog_id = int($app->param('blog_id')); 
     3086            my $this_blog = MT::Blog->load( $blog_id ) if $blog_id; 
     3087            $app->run_callbacks( 'rebuild', $this_blog ); 
     3088            $app->run_callbacks( 'post_build' ); 
     3089        } 
    30853090        return $app->call_return; 
    30863091    } 
    30873092 
    30883093    if ( exists $options{how} && ( $options{how} eq NEW_PHASE ) ) { 
     3094        my $start_time = time; 
     3095        $app->run_callbacks( 'pre_build' ); 
    30893096        my $params = { 
    30903097            return_args => $app->return_args, 
    30913098            blog_id     => $app->param('blog_id') || 0, 
    3092             id          => [ keys %$rebuild_set ] 
     3099            id          => [ keys %$rebuild_set ], 
     3100            start_time  => $start_time, 
    30933101        }; 
    30943102        my %param = ( 
     
    31033111    else { 
    31043112        my @blogs = $app->param('blog_ids'); 
     3113        my $start_time = $app->param('start_time'); 
    31053114        my %blogs = map { $_ => () } @blogs; 
    31063115        my @set   = keys %$rebuild_set; 
     
    31183127            # Rebuilding something that isn't an entry, rebless as required 
    31193128            if ( $type ne MT::Entry->class_type ) { 
     3129                die "had to rebless? $e"; 
    31203130                my $pkg = MT->model($type) or next; 
    31213131                bless $e, $pkg; 
     
    31393149            blog_ids        => [ keys %blogs ], 
    31403150            id              => \@rest, 
     3151            start_time      => $start_time, 
    31413152        }; 
    31423153        my %param = ( 
  • branches/release-33/lib/MT/CMS/Blog.pm

    r1776 r1778  
    531531        } 
    532532    } 
     533    $app->run_callbacks('post_build'); 
    533534    $app->call_return; 
    534535} 
     
    541542    require MT::Blog; 
    542543    my $q             = $app->param; 
    543     my $blog_id       = $q->param('blog_id'); 
     544    my $start_time    = $q->param('start_time'); 
     545 
     546    if ( ! $start_time ) { 
     547        # start of build; invoke callback 
     548        $app->run_callbacks('pre_build'); 
     549        $start_time = time; 
     550    } 
     551 
     552    my $blog_id       = int($q->param('blog_id')); 
     553    return $app->errtrans("Invalid request.") unless $blog_id; 
     554 
    544555    my $blog          = MT::Blog->load($blog_id); 
    545556    my $order         = $q->param('type'); 
     
    550561    my $archiver      = $app->publisher->archiver($type); 
    551562    my $archive_label = $archiver ? $archiver->archive_label : ''; 
     563 
    552564    $archive_label = $app->translate($type) unless $archive_label; 
    553565    $archive_label = $archive_label->() if ( ref $archive_label ) eq 'CODE'; 
     
    556568    my $offset = 0; 
    557569    my ($total) = $q->param('total'); 
    558  
    559     ## Tells MT::_rebuild_entry_archive_type to cache loaded templates so 
    560     ## that each template is only loaded once. 
    561     $app->{cache_templates} = 1; 
    562570 
    563571    my ($tmpl_saved); 
     
    774782            offset          => $offset, 
    775783            complete        => $complete, 
     784            start_time      => $start_time, 
    776785            incomplete      => 100 - $complete, 
    777786            entry_id        => scalar $q->param('entry_id'), 
     
    783792    } 
    784793    else { 
     794        $app->run_callbacks( 'post_build' ); 
    785795        if ( $q->param('entry_id') ) { 
    786796            require MT::Entry; 
     
    809819            } 
    810820            my %param = ( 
    811                 all          => $all, 
    812                 type         => $archive_label, 
    813                 is_one_index => $is_one_index, 
    814                 is_entry     => $is_entry, 
    815                 archives     => $type ne 'index', 
     821                all             => $all, 
     822                type            => $archive_label, 
     823                is_one_index    => $is_one_index, 
     824                is_entry        => $is_entry, 
     825                archives        => $type ne 'index', 
     826                start_timestamp => MT::Util::epoch2ts($blog, $start_time), 
     827                total_time      => time - $start_time, 
    816828            ); 
    817829            if ($is_one_index) { 
     
    838850            } 
    839851            else {    # popup--just go to cnfrmn. page 
    840                 $app->run_callbacks( 'rebuild', $blog ); 
    841852                return $app->load_tmpl( 'popup/rebuilt.tmpl', \%param ); 
    842853            } 
     
    854865    my $app           = shift; 
    855866    my $q             = $app->param; 
     867    my $start_time    = $q->param('start_time'); 
     868 
     869    if ( ! $start_time ) { 
     870        # start of build; invoke callback 
     871        $app->run_callbacks('pre_build'); 
     872        $start_time = time; 
     873    } 
     874 
    856875    my $type          = $q->param('type'); 
    857876    my $next          = $q->param('next') || 0; 
     
    906925        build_next      => $next, 
    907926        total           => $total, 
     927        start_time      => $start_time, 
    908928        complete        => 0, 
    909929        incomplete      => 100, 
  • branches/release-33/lib/MT/CMS/Entry.pm

    r1746 r1778  
    13881388            my $res = MT::Util::start_background_task( 
    13891389                sub { 
     1390                    $app->run_callbacks('pre_build'); 
    13901391                    $app->rebuild_entry( 
    13911392                        Entry             => $obj, 
     
    13981399                    ) or return $app->publish_error(); 
    13991400                    $app->run_callbacks( 'rebuild', $blog ); 
     1401                    $app->run_callbacks( 'post_build' ); 
    14001402                    1; 
    14011403                } 
  • branches/release-33/lib/MT/Util.pm

    r1744 r1778  
    208208            } elsif ($hours) { 
    209209                $result = $future ? MT->translate("[quant,_1,hour,hours] from now", $hours) : MT->translate("[quant,_1,hour,hours] ago", $hours); 
     210            } 
     211            return $result; 
     212        } 
     213    } elsif ($style == 3) { 
     214        if ($delta < 60) { 
     215            return $future ? MT->translate("[quant,_1,second,seconds] from now", $delta) : MT->translate("[quant,_1,second,seconds]", $delta); 
     216        } elsif ($delta <= 3600) { 
     217            # less than 1 hour 
     218            my $min = int(($delta % 3600) / 60); 
     219            my $sec = $delta % 60; 
     220            my $result; 
     221            if ($sec && $min) { 
     222                $result = $future ? MT->translate("[quant,_1,minute,minutes], [quant,_2,second,seconds] from now", $min, $sec) : MT->translate("[quant,_1,minute,minutes], [quant,_2,second,seconds]", $min, $sec); 
     223            } elsif ($min) { 
     224                $result = $future ? MT->translate("[quant,_1,minute,minutes] from now", $min) : MT->translate("[quant,_1,minute,minutes]", $min); 
     225            } elsif ($sec) { 
     226                $result = $future ? MT->translate("[quant,_1,second,seconds] from now", $sec) : MT->translate("[quant,_1,second,seconds]", $sec); 
     227            } 
     228            return $result; 
     229        } elsif ($delta <= 86400) { 
     230            # less than 1 day 
     231            my $hours = int($delta / 3600); 
     232            my $min = int(($delta % 3600) / 60); 
     233            my $result; 
     234            if ($hours && $min) { 
     235                $result = $future ? MT->translate("[quant,_1,hour,hours], [quant,_2,minute,minutes] from now", $hours, $min) : MT->translate("[quant,_1,hour,hours], [quant,_2,minute,minutes]", $hours, $min); 
     236            } elsif ($hours) { 
     237                $result = $future ? MT->translate("[quant,_1,hour,hours] from now", $hours) : MT->translate("[quant,_1,hour,hours]", $hours); 
     238            } elsif ($min) { 
     239                $result = $future ? MT->translate("[quant,_1,minute,minutes] from now", $min) : MT->translate("[quant,_1,minute,minutes]", $min); 
     240            } 
     241            return $result; 
     242        } elsif ($delta <= 604800) { 
     243            # less than 1 week 
     244            my $days = int($delta / 86400); 
     245            my $hours = int(($delta % 86400) / 3600); 
     246            my $result; 
     247            if ($days && $hours) { 
     248                $result = $future ? MT->translate("[quant,_1,day,days], [quant,_2,hour,hours] from now", $days, $hours) : MT->translate("[quant,_1,day,days], [quant,_2,hour,hours]", $days, $hours); 
     249            } elsif ($days) { 
     250                $result = $future ? MT->translate("[quant,_1,day,days] from now", $days) : MT->translate("[quant,_1,day,days]", $days); 
     251            } elsif ($hours) { 
     252                $result = $future ? MT->translate("[quant,_1,hour,hours] from now", $hours) : MT->translate("[quant,_1,hour,hours]", $hours); 
    210253            } 
    211254            return $result; 
  • branches/release-33/tmpl/cms/popup/rebuilt.tmpl

    r1098 r1778  
    77    id="message" 
    88    class="success"> 
     9    <p> 
    910    <mt:if name="all"> 
    1011    <__trans phrase="All of your files have been published."> 
     
    2526    </mt:if> 
    2627    <br /> 
     28    <mt:if name="start_timestamp"> 
     29    <__trans phrase="Publish time: [_1]." params="<mt:date ts="$start_timestamp" relative="3">"> 
     30    </mt:if> 
     31    </p> 
     32    <p> 
    2733    <a target="_blank" href="<mt:var name="blog_url" escape="html">"><__trans phrase="View your site."></a> 
    2834    <mt:if name="is_one_index"> 
    2935        <a target="_blank" href="<mt:var name="tmpl_url">"><__trans phrase="View this page."></a> 
    3036    </mt:if> 
     37    </p> 
    3138</mtapp:statusmsg> 
    3239 
  • branches/release-33/tmpl/cms/rebuilding.tmpl

    r1309 r1778  
     1<mt:setvarblock name="html_head" append="1"> 
     2<script type="text/javascript"> 
     3/* <![CDATA[ */ 
     4function doRedirect () { 
     5<mt:if name="redirect_target"> 
     6    window.location='<mt:var name="redirect_target">'; 
     7<mt:else> 
     8    window.location='<mt:var name="script_url">?__mode=rebuild&blog_id=<mt:var name="blog_id">&type=<mt:var name="build_type">&next=<mt:var name="build_next">&offset=<mt:var name="offset">&limit=<mt:var name="limit">&total=<mt:var name="total">&start_time=<mt:var name="start_time">&entry_id=<mt:var name="entry_id">&is_new=<mt:var name="is_new">&old_status=<mt:var name="old_status">&old_previous=<mt:var name="old_previous">&old_next=<mt:var name="old_next"><mt:if name="is_full_screen">&fs=1</mt:if>'; 
     9</mt:if> 
     10} 
     11setTimeout('doRedirect()', 200); 
     12/* ]]> */ 
     13</script> 
     14</mt:setvarblock> 
     15 
    116<mt:if name="is_full_screen"> 
    217    <$mt:setvar name="screen_class" value="rebuilding-screen"$> 
     
    924</mt:if> 
    1025 
    11 <script type="text/javascript"> 
    12 /* <![CDATA[ */ 
    13 function doRedirect () { 
    14 <mt:if name="redirect_target"> 
    15     window.location='<mt:var name="redirect_target">'; 
    16 <mt:else> 
    17     window.location='<mt:var name="script_url">?__mode=rebuild&blog_id=<mt:var name="blog_id">&type=<mt:var name="build_type">&next=<mt:var name="build_next">&offset=<mt:var name="offset">&limit=<mt:var name="limit">&total=<mt:var name="total">&entry_id=<mt:var name="entry_id">&is_new=<mt:var name="is_new">&old_status=<mt:var name="old_status">&old_previous=<mt:var name="old_previous">&old_next=<mt:var name="old_next"><mt:if name="is_full_screen">&fs=1</mt:if>'; 
    18 </mt:if> 
    19 } 
    20 setTimeout('doRedirect()', 200); 
    21 /* ]]> */ 
    22 </script> 
    23  
    24  
    25 <!-- <img valign="bottom" src="<mt:var name="static_uri">images/ani-rebuild.gif" height="18" width="18" alt="" />&nbsp; --> 
    2626<mt:if name="is_one_index"> 
    2727    <mtapp:statusmsg