--- lib/A3C/View/Strix.pm 2008/06/16 21:33:59 183 +++ lib/A3C/View/Strix.pm 2008/09/01 18:53:59 234 @@ -92,6 +92,53 @@ }; +=head2 instances + +=cut + +template 'instances' => page { + + title is _('Strix instances'); + + my $sql = A3C::SQL->new({ query => qq{ + select + hrEduOrgUrl, o, l, postalAddress, telephoneNumber, facsimileTelephoneNumber + from strix_instances + join hr_edu_orgs on cn = instance + order by l,o + }}); + + if ( $sql->count > 0 ) { + + table { + row { + th { _('hrEduOrgUrl') } + th { _('o') } + th { _('l') } + th { _('postalAddress') } + th { _('telephoneNumber') } + th { _('facsimileTelephoneNumber') } + }; + while ( my $row = $sql->next ) { + row { + cell { outs_raw '' . $row->hrEduOrgUrl . '' } + cell { $row->o } + cell { $row->l } + cell { $row->postalAddress } + cell { $row->telephoneNumber } + cell { $row->facsimileTelephoneNumber } + } + } + } + + div { _("Found total of %1 strix instances", $sql->count) } + + } else { + div { _("Can't find any strix instances") } + } + +}; + =head2 sql Execute SQL query on instance @@ -115,95 +162,37 @@ }; sub strix { - my $instance = get('instance') || shift || 'new'; + my $instance = get('instance'); return Strix->new({ instance => $instance }); } -=head2 sitemap +sub strix_link { + my ( $url, $label ) = @_; + hyperlink( + url => 'http://' . get('instance') . '.cms-qa.skole.hr' . $url, + label => $label || $url, + target => 'strix', + ); +} + +=head2 navigation =cut -template 'sitemap' => page { +template 'navigation' => page { - title is _('Sitemap'); + title is _('Site navigation'); render_region( name => 'selected-instances', path => '/strix/selected-instances' ); - my $site_id = get('site_id') || 1; - - my $sitemap = strix->site_navigation( $site_id ); - - sub full_url { - my $p = shift; - hyperlink( - url => 'http://new.cms-qa.skole.hr' . $p->{url}, - label => $p->{naziv}, - ); - if ( $p->{type} eq 'category' ) { - outs_raw(' '); - hyperlink( - url => '/strix/layout?url=' . $p->{url}, - label => '[layout]', - ); - } - } - - sub children { - my $c = shift; - return unless defined $c->{children}; - ul { - foreach my $p ( @{ $c->{children} } ) { - li { - { class is $p->{class} }; - full_url( $p ); - children( $p ); - } - } - } - } - - ul { - foreach my $p ( @$sitemap ) { - li { - full_url( $p ); - children( $p ); - } - } - } - -}; - -=head2 layout - -=cut - -template 'layout' => page { - - my $url = get('url') || '/'; - - my $category = strix->category( $url ); - - warn dump( $category ); - - title is _('Layout %1 : %2', - $category->{sitename}, - $category->{naziv}, - ); - - hyperlink( - url => 'http://' . $category->{sitename} . '/' . $category->{url}, - label => $category->{naziv}, + render_region( + name => 'strix-site', + path => '/strix/site' ); - my $layout = strix->layout( $url ); - - pre { - dump( $layout ); - } - }; =head1 REGIONS @@ -216,23 +205,30 @@ template 'execute-sql' => sub { + my $sql = get('sql') || Jifty->web->session->get('sql'); + warn ">>>> sql = $sql"; + my $instance = get('instance'); + warn ">>>> instance = $instance"; + my $action = new_action( class => 'StrixSQL', moniker => 'strix-sql', sticky_on_success => 1, sticky_on_failure => 1, arguments => { - instance => get('instance') - } + instance => $instance, + sql => $sql, + }, ); form { - render_action( $action => [ 'instance', 'sql' ] ); + render_action( $action, [ 'instance', 'sql' ] ); form_submit( label => _('Execute SQL') ); }; if ( my $sql = $action->result->content('sql') ) { - div { _('Found %1 results', $sql->count ) } + Jifty->web->session->set( sql => $sql->query ); + div { _('Found %1 results for %2', $sql->count, $instance ) } table { row { map { th { $_ } } $sql->_column_names }; while (my $row = $sql->next) { @@ -244,6 +240,7 @@ } } } + warn ">>>> sql (at end) = ",Jifty->web->session->get('sql'); }; =head2 search-instances @@ -274,9 +271,9 @@ table { while (my $strix = $search->next) { row { + cell { show( 'instance-op', 'Create', '+', $strix->instance ) } cell { tt { $strix->instance } } cell { $strix->_site_name } - cell { show( 'instance-op', 'Create', '+', $strix->instance ) } } } } @@ -293,11 +290,12 @@ template 'selected-instances' => sub { my $self = shift; - warn "## IN selected-instances ",dump( @_ ); +# warn "## IN selected-instances ",dump( @_ ); if ( my $op = get 'op' ) { - my $instance = get 'instance' or die "no instance?"; - warn "# selected-instances $op on $instance"; + my $op_instance = get 'op_instance'; + return unless $op_instance; + warn "# selected-instances $op on $op_instance"; my $a; @@ -307,7 +305,7 @@ class => $op . 'StrixInstanceSelection', moniker => $op, arguments => { - instance => $instance, + instance => $op_instance, by_user => $self->current_user->id, }, ); @@ -315,14 +313,22 @@ } elsif ( $op eq 'Delete' ) { my $strix = A3C::Model::StrixInstanceSelection->new; - $strix->load_by_cols( instance => $instance, by_user => $self->current_user->id ); - die "can't find instance $instance" unless $strix->id; + $strix->load_by_cols( instance => $op_instance, by_user => $self->current_user->id ); + warn "can't find instance $op_instance" unless $strix->id; $a = $strix->as_delete_action; } - warn "# argument_values = ",dump( $a->argument_values ); +# warn "# argument_values = ",dump( $a->argument_values ); $a->run; - warn "can't $op instance $instance" unless $a->result->success; + + if ( $a->result->error ) { + div { + { class is 'note error' } + $a->result->error; + } + } + + set( op => '' ); } my $selected = A3C::Model::StrixInstanceSelectionCollection->new; @@ -330,15 +336,22 @@ if ( $selected->count > 0 ) { + my $instance = get('instance'); + warn "# selected-instances -- selected: $instance\n"; + div { _('%1 instances selected', $selected->count ) }; table { while (my $s = $selected->next) { row { - cell { tt { - hyperlink( - url => '?instance=' . $s->instance->instance, - label => $s->instance->instance - ) + cell { tt { + if ( $s->instance->instance eq $instance ) { + b { $instance } + } else { + hyperlink( + url => '?instance=' . $s->instance->instance, + label => $s->instance->instance + ) + } } } cell { $s->instance->_site_name } cell { show( 'instance-op', 'Delete', '-', $s->instance->instance ) } @@ -361,7 +374,7 @@ template 'instance-op' => sub { my $self = shift; - warn "# instance-op = ",dump( @_ ); +# warn "# instance-op = ",dump( @_ ); my ( $op, $label, $instance ) = @_; @@ -372,7 +385,7 @@ refresh => 'selected-instances', path => '/strix/selected-instances', args => { - instance => $instance, + op_instance => $instance, op => $op, } }, @@ -381,5 +394,186 @@ }; +=head2 site + +=cut + +template 'site' => sub { + + my $action = new_action( + class => 'StrixSelectSite', + moniker => 'strix-select-site', + ); + + warn "# action = ", dump( $action ); + + warn "# argument_values = ", dump( $action->argument_values ); + + if ( ! $action->argument_value('instance') ) { + $action->argument_value( 'instance', get('instance') ); + warn "# run action with instance\n"; + $action->run; + } + + my $magic = [ + { submit => $action, refresh_self => 1 }, + # this is basically a closure + { refresh => 'selected-instances', path => '/strix/selected-instances', args => { + instance => { result_of => $action, name => 'instance' } + } }, + { refresh => 'strix-site-layout', path => '/__jifty/empty' }, + ]; + + form { + render_param( $action, 'instance', onchange => $magic ); + render_param( $action, 'site_id', onchange => $magic ); + form_submit( label => _('Show navigation'), onclick => $magic ); + }; + + warn "## select-site action ",dump( $action->result ); + + render_region( + name => 'layout', + path => '/__jifty/empty', + ); + + if ( my $site_id = $action->result->content('site_id') ) { + show('navigation-tree', $action->result->content('instance'), $site_id); + } +}; + +=head2 layout + +Shows layout for C + +=cut + +template 'layout' => sub { + + my $url = get('url') || '/'; + my $category = strix->category( $url ); + my $layout = strix->layout( $url ); + + h1 { $category->{naziv} } + pre { + dump( $layout ); + } + +}; + +=head2 category + +Show category data for C + +=cut + +template 'category' => sub { + + my $url = get('url') || '/'; + my $category = strix->category( $url ); + + h1 { $category->{naziv} } + pre { + dump( $category ); + } + +}; + +=head1 PRIVATE TEMPLATES + +=head2 navigation-tree-category + + show('navigation-tree-category',$kat_row); + +=cut + +private template 'navigation-tree-category' => sub { + my $self = shift; + #warn "## navigation-tree-category",dump( @_ ); + my $p = shift; + hyperlink( + onclick => { + region => 'strix-site-layout', # FIXME do we have to hard-code region name here? + replace_with => '/strix/category', + args => { + url => $p->{url}, + instance => get('instance'), + } + }, + label => $p->{naziv}, + ); + outs_raw(' '); + if ( $p->{type} eq 'category' ) { + hyperlink( +# url => '/strix/layout?url=' . $p->{url} . ';instance=' . get('instance'), + onclick => { + region => 'strix-site-layout', # FIXME do we have to hard-code region name here? + replace_with => '/strix/layout', + args => { + url => $p->{url}, + instance => get('instance'), + } + }, + label => _('layout'), + class => 'layout', + ); + } + outs_raw(' '); + strix_link( $p->{url}, '>>' ); +}; + +=head2 navigation-tree + + show('navigation-tree',$instance,$site_id); + +=cut + +private template 'navigation-tree' => sub { + my $self = shift; + my ( $instance, $site_id ) = @_; + + warn "## navigation-tree instance: $instance site_id: $site_id"; + + set 'instance' => $instance; + + sub children { + my $c = shift; + return unless defined $c->{children}; + ul { + foreach my $p ( @{ $c->{children} } ) { + li { + if ( defined( $p->{class} ) ) { + { class is $p->{class} }; + } + show( 'navigation-tree-category', $p ); + children( $p ); + } + } + } + } + + my $strix = Strix->new({ instance => $instance }); + + my $navigation = $strix->site_navigation( $site_id ); + #warn "## navigation = ",dump( $navigation ); + if ( $navigation ) { + ul { + { class is 'navigation' }; + foreach my $p ( @$navigation ) { + li { + show( 'navigation-tree-category', $p ); + children( $p ); + } + } + } + } else { + div { + { class is 'note error' } + _('No navigation found for instance %1 site_id %2', $instance, $site_id) + } + + } + +}; 1;