File Coverage

blib/lib/App/bif/show/topic.pm
Criterion Covered Total %
statement 15 35 42.8
branch 0 4 0.0
condition n/a
subroutine 5 5 100.0
pod 1 1 100.0
total 21 45 46.6


line stmt bran cond sub pod time code
1             package App::bif::show::topic;
2 1     1   4980 use strict;
  1         3  
  1         25  
3 1     1   5 use warnings;
  1         2  
  1         38  
4 1     1   5 use Bif::Mo;
  1         2  
  1         8  
5 1     1   855 use DBIx::ThinSQL qw/bv sum case coalesce concat qv sq/;
  1         27550  
  1         9  
6              
7             our $VERSION = '0.1.5_6';
8             extends 'App::bif::show';
9              
10             sub run {
11 1     1 1 2 my $self = shift;
12 1         4 my $opts = $self->opts;
13 1         9 my $db = $self->db;
14              
15 0           $opts->{id} = $self->uuid2id( $opts->{id} );
16              
17 0           my $info = $self->get_node( $opts->{id}, 'topic' );
18 0           my $now = $self->now;
19 0           my @data;
20              
21             my $ref = $db->xhashref(
22             select => [
23             'SUBSTR(n.uuid,1,8) as uuid',
24             'i.title',
25             'n.ctime',
26             'n.ctimetz',
27             'n.ctimetzhm AS ctimetzhm',
28             "$now - n.ctime AS ctime_age",
29             'n.mtime',
30             'n.mtimetz',
31             'n.mtimetzhm AS mtimetzhm',
32             "$now - n.mtime AS mtime_age",
33             'e1.name as creator',
34             'e2.name as updator',
35             ],
36             from => 'nodes n',
37             inner_join => 'changes c1',
38             on => 'c1.id = n.first_change_id',
39             inner_join => 'entities e1',
40             on => 'e2.id = c2.identity_id',
41             inner_join => 'changes c2',
42             on => 'c2.id = n.last_change_id',
43             inner_join => 'entities e2',
44             on => 'e1.id = c1.identity_id',
45             inner_join => 'topics i',
46             on => 'i.id = n.id',
47             where => { 'n.id' => $info->{id} },
48 0           );
49              
50 0           push( @data, $self->header( ' UUID', $ref->{uuid} ), );
51             push( @data,
52             $self->header( ' Created', $self->ctime_ago($ref) ),
53 0           $self->header( ' Created-By', $ref->{creator} ),
54             );
55              
56             my @refs = $db->xhashrefs(
57             select => [
58             't.id AS id',
59             'p.path',
60             'ts.status',
61             'c.mtime AS mtime',
62             'c.mtimetz AS mtimetz',
63             'c.mtimetzhm AS mtimetzhm',
64             "$now - c.mtime AS mtime_age",
65             ],
66             from => 'topics t2',
67             inner_join => 'topics t',
68             on => 't.link_topic_id = t2.link_topic_id',
69             inner_join => 'nodes n',
70             on => 'n.id = t.id',
71             inner_join => 'nodes p',
72             on => 'p.id = t.project_id',
73             inner_join => 'topic_status ts',
74             on => 'ts.id = t.topic_status_id',
75             inner_join => 'changes c',
76             on => 'c.id = n.first_change_id',
77             where => { 't2.id' => $info->{id} },
78 0           order_by => 'p.path',
79             );
80              
81 0           my %seen;
82 0           my $count = @refs;
83 0           my $i = 1;
84 0           foreach my $ref (@refs) {
85 0           my @ago = $self->mtime_ago($ref);
86              
87 0           push(
88             @data,
89             $self->header(
90             ' Status',
91             "$ref->{path}/$ref->{id}: $ref->{status} (" . $ago[0] . ')',
92             $ago[1]
93             ),
94             );
95             }
96              
97             push( @data,
98             $self->header( ' Updated', $self->mtime_ago($ref) ),
99             $self->header( ' Updated-By', $ref->{updator} ),
100 0 0         ) unless $ref->{mtime} == $ref->{ctime};
101              
102 0           $self->start_pager;
103             print $self->render_table( 'l l',
104 0           [ ucfirst( $info->{tkind} ), $ref->{title} ],
105             \@data, 1 );
106              
107 0           print "\n";
108             $self->dispatch( 'App::bif::log::topic', opts => { id => $opts->{id} } )
109 0 0         if $opts->{log};
110              
111 0           $self->ok( 'Show' . ucfirst( $info->{tkind} ), \@data );
112             }
113              
114             1;
115             __END__