<%doc> Generic object view Uses metadata to display all fields with their values and lists of each group of 'has_many' related objects Required Arguments: table name and either id or position <%args> $table $id $user => $ui->get_current_user($r) $view => 'all' $edit => undef <%attr> title => 'View Object' <%init> my $DEBUG = 0; my($obj, $prevobj ); my %ftables; my %no_edit_tables = ( 'Audit' => 1, ); unless ( $obj = $table->retrieve($id) ){ $m->comp('error.mhtml', error => "Nonexistent record: $id"); } # Check if user can view this object my $manager = $ui->get_permission_manager($r); unless ( $manager && $manager->can($user, "view", $obj) ){ $m->comp('/generic/error.mhtml', error=>"You don't have permission to view this object"); } my $labelstr = $obj->get_label; my %linksfrom = $table->meta_data->get_links_from; my %order = $table->meta_data->get_column_order; if ( $DEBUG ){ print '%ARGS is
', Dumper(%ARGS), '

'; print '%linksfrom is
', Dumper(%linksfrom), '

'; print '%order is
', Dumper(%order), '

'; }
<% $table %>
% unless ( exists $no_edit_tables{$table} ){ % if ( $manager && $manager->can($user, 'access_admin_section', 'view.html:new') ){ [new] % } % if ( $manager && $manager->can($user, "edit", $obj) ){ [edit] % } % if ( $manager && $manager->can($user, "delete", $obj) ){ [delete] % } % } [text]
<& form.mhtml, table=>$table, id=>$id, edit=>0 &>
% if ( keys %linksfrom ){
View
% if ( $view eq "all" ){ [all] % }elsif ( keys %linksfrom > 1 ){ [all] % } % foreach my $i ( sort keys %linksfrom ){ % if ( $view eq $i ){ [<% $i %>] % }else{ [<% $i %>] % } % } [audit]
% } <%perl> foreach my $i ( keys %linksfrom ){ if ( ($view eq 'all' || $view eq $i ) ){ # Table that points to us my $j = (keys %{ $linksfrom{$i} })[0]; # Column in the other table that points to this table my $ffield = $linksfrom{$i}{$j}; # Determine if the has_many method returns ordered data from the db my $ffattrs = $j->meta_data->get_column($ffield)->links_to_attrs(); my $ffield_order = $ffattrs->{order_by} if ( defined $ffattrs && exists $ffattrs->{order_by} ); my @robjs = $obj->$i; my $dtbl = $j; my $ctbl = $j; my $num = scalar(@robjs);
% my $title = $i; % $title .= " ($num)" if $num;
<% $title %>
% if ( $edit eq $i ){   % }else{ % if ( $num ){ % if ( $manager && $manager->can($user, 'edit', $obj) ){ [edit] % } % } % if ( $manager && $manager->can($user, 'access_admin_section', 'view.html:add') ){ [add] % }else{   % } % }
% my %args = ( table=>$dtbl, object=>\@robjs ); % if ( $edit eq $i ){ % $args{withedit} = 1; % }else{ % # If data came ordered from the db, tell sortresults not to bother sorting % $args{sort} = 0 if ( $ffield_order ); % } % if ( $num ) { % $args{return_args} = "?table=$table&id=$id&view=$view"; % $m->comp('sortresults.mhtml', %args); % }
% } %} %if ( $view eq 'all' || $view eq 'audit' ){
audit
% my @audit = $obj->get_audit_records(); <& sortresults.mhtml, object => \@audit , view => "row", sort => 0 &>
%}