%perl>;
$m->comp('/widgets/wrappers/sharky/table_top.mc', caption => 'Current Categories');
$m->comp('/widgets/listManager/listManager.mc',
object => 'category',
userSort => 0,
def_sort_field => 'uri',
title => 'Current Categories',
objs => \@categories,
profile => undef,
fields => [qw(uri site name primary)],
field_titles => { primary => 'Primary' },
field_values => $primary_sub,
select => $category_select,
addition => ''
);
$m->comp('/widgets/wrappers/sharky/table_bottom.mc');
%perl>
<& /widgets/search/search.mc,
object => 'category',
field => 'uri',
type => 'singular',
use_form_tag => 0
&>
<& '/widgets/wrappers/sharky/table_top.mc', caption => 'Choose Categories' &>
<& /widgets/listManager/listManager.mc,
object => 'category',
title => 'Choose Categories',
select => undef,
profile => $category_choose_profile,
exclude => $exclude_cats,
fields => [qw(uri site name)],
addition => '',
behavior => 'expand',
&>
<& '/widgets/wrappers/sharky/table_bottom.mc' &>
<%args>
$widget
%args>
<%init>
my $story = get_state_data($widget, 'story');
my @categories = $story->get_categories();
my $exclude_cats = sub {
my $cat = shift;
# exclude unauthorized categories
return 1 unless chk_authz($cat, READ, 1);
# exclude already-associated categories
my $cid = $cat->get_id;
foreach my $ex (@categories) {
return 1 if $cid == $ex->get_id;
}
return 0;
};
%init>
<%once>
my $primary_sub = sub {
return unless $_[1] eq 'primary';
my $cat = shift;
my $widget = 'story_prof';
my $story = get_state_data($widget, 'story');
my $primary_cat = $story->get_primary_category;
my $cid = $cat->get_id;
# Output the radio button.
$m->scomp('/widgets/profile/radio.mc',
name => "$widget|set_primary_category",
disp => '',
value => $cid,
checked => $cid == $primary_cat->get_id,
useTable => 0,
);
};
my $category_choose_profile = sub {
my $cat = shift;
my $widget = 'story_prof';
return ['Associate', $r->uri, "$widget|assoc_category_cb=" . $cat->get_id];
};
my $category_select = sub {
my $cat = shift;
my $widget = 'story_prof';
my $story = get_state_data($widget, 'story');
my $primary_cat = $story->get_primary_category;
if ($cat->get_name eq $primary_cat->get_name) {
return;
} else {
return ['Delete', "$widget|delete_id"];
}
};
%once>