--- 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;