]> git.decadent.org.uk Git - maypole.git/commitdiff
Link to has-many objects in the view page.
authorSimon Cozens <simon@simon-cozens.org>
Sat, 31 Jan 2004 14:32:16 +0000 (14:32 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Sat, 31 Jan 2004 14:32:16 +0000 (14:32 +0000)
git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@25 48953598-375a-da11-a14b-00016c27c3ee

lib/Apache/MVC.pm
lib/Apache/MVC/Model/CDBI.pm
lib/Apache/MVC/View/TT.pm
templates/factory/macros
templates/factory/view

index 8ed51bf1c9108a353b0bb2f05750951ab22d5188..68a9927bf113ae421c1e205f8b87f0f334fece46 100644 (file)
@@ -105,10 +105,10 @@ sub parse_location {
 sub is_applicable {
     my $self = shift;
     my $config = $self->config;
-    my %ok = map {$_ => 1} @{$config->{display_tables}};
+    $config->{ok_tables} = {map {$_ => 1} @{$config->{display_tables}}};
     warn "We don't have that table ($self->{table})"
-        unless $ok{$self->{table}};
-    return DECLINED() unless exists $ok{$self->{table}};
+        unless $config->{ok_tables}{$self->{table}};
+    return DECLINED() unless exists $config->{ok_tables}{$self->{table}};
 
     # Does the action method exist?
     # XXX We should set the method class to the class for the table
index 88ba3da1334cd3383057cb69345f214614d5447a..f9b2087b9cd16abf7407dc612db7c999e8425ca4 100644 (file)
@@ -1,5 +1,6 @@
 package Apache::MVC::Model::CDBI;
 use base qw(Apache::MVC::Model::Base Class::DBI);
+use Lingua::EN::Inflect::Number qw(to_PL);
 use Class::DBI::AsForm;
 use Class::DBI::FromCGI;
 use CGI::Untaint;
@@ -13,6 +14,15 @@ sub get_objects {
     return $self->retrieve(shift @{$r->{args}});
 }
 
+sub related {
+    my ($self, $r) = @_;
+    # Has-many methods; XXX this is a hack
+    map {to_PL($_)} 
+    grep { exists $r->{config}{ok_tables}{$_} }
+    map {$_->table}
+    keys %{shift->__hasa_list}
+}
+
 sub do_edit :Exported {
     my ($self, $r) = @_;
     my $h = CGI::Untaint->new(%{$r->{params}});
index 90624ad7960113098dcacd635dbfe6bddb9de647..083b35950832d601ccc260ebb0c9f1d7568497d9 100644 (file)
@@ -34,6 +34,7 @@ sub _args {
         name => $class,
         columns => [ $class->columns ],
         colnames => { $class->column_names },
+        related_accessors => [ $class->related($r) ],
         moniker => $class->moniker,
         plural  => $class->plural_moniker,
         cgi => { $class->to_cgi },
index 2a2315523300949de9c7b48f103f28367a4cf9b9..044ba456ad44c4d82016e6abd526920db94d04a0 100644 (file)
@@ -34,3 +34,14 @@ END %]
 </TD>
 [% END %]
 
+[% MACRO view_related(object) BLOCK;
+    FOR accessor = classmetadata.related_accessors.list;
+        "<H3>"; accessor | ucfirst; "</H3>\n";
+        "<UL id=\"vlist\">";
+        FOR thing = object.$accessor;
+            "<LI>"; maybe_link_view(thing); "</LI>\n";
+        END;
+        "</UL>";
+    END; 
+END;
+%]
index 509208eddb0a2d22e6afe17886afa69efdee4c7a..202da158b576f7a1cee2a53c0f0f8fc852d956bc 100644 (file)
@@ -25,9 +25,9 @@
 [% END; %]
 </TABLE>
 [%
+    view_related(item);
     button(item, "edit");
     button(item, "delete");
 %]
-</TABLE>
 [% END; %]