Committer: gprochaev
LJSUP-7509. Add "Edit communities" to admin toolU trunk/cgi-bin/LJ/Vertical.pm A trunk/htdocs/admin/browse/edit_community.bml A trunk/htdocs/admin/browse/edit_community.bml.text U trunk/htdocs/admin/browse/index.bml U trunk/htdocs/admin/browse/recent_posts.bml U trunk/htdocs/admin/browse/top_entries_vertical.bml
Modified: trunk/cgi-bin/LJ/Vertical.pm =================================================================== --- trunk/cgi-bin/LJ/Vertical.pm 2010-12-06 09:20:01 UTC (rev 17864) +++ trunk/cgi-bin/LJ/Vertical.pm 2010-12-06 10:54:43 UTC (rev 17865) @@ -682,6 +682,56 @@ return $kw_id; } +## Remove tags links from vertical_keymap table. +## Not delete tags from vertical_keywords. +sub delete_tags_links { + my $class = shift; + my %args = @_; + + my $comm_id = $args{'comm_id'} || $args{'journalid'}; + return undef unless $comm_id; + + my $vert_id = $args{'vert_id'} || 0; + my $jitemid = $args{'jitemid'} || 0; + + my $v_sql = " AND vert_id = $vert_id "; + my $entry_sql = " AND jitemid = $jitemid "; + + my $dbh = LJ::get_db_writer (); + my $res = $dbh->do (" + DELETE FROM vertical_keymap + WHERE + journalid = ? + $v_sql + $entry_sql + ", undef, $comm_id); + + return 1; +} + +sub get_tags_for_journal { + my $class = shift; + my %args = @_; + + my $comm_id = $args{'comm_id'} || $args{'journalid'}; + return '' unless $comm_id; + + my $vert_id = $args{'vert_id'} || 0; + my $jitemid = $args{'jitemid'} || 0; + + my $dbh = LJ::get_db_reader (); + my $res = $dbh->selectall_arrayref (" + SELECT keyword + FROM vertical_keymap km, vertical_keywords kw + WHERE km.kw_id = kw.kw_id + AND km.journalid = ? + AND km.vert_id = ? + AND km.jitemid = ? + ", { Slice => {} }, $comm_id, $vert_id, $jitemid); + + return join ", ", map { $_->{keyword} } @$res; +} + sub save_tags { my $self = shift; my %args = @_; Added: trunk/htdocs/admin/browse/edit_community.bml =================================================================== --- trunk/htdocs/admin/browse/edit_community.bml (rev 0) +++ trunk/htdocs/admin/browse/edit_community.bml 2010-12-06 10:54:43 UTC (rev 17865) @@ -0,0 +1,162 @@ +<?page +title=><?_ml .title _ml?> +body<= +<?_code +{ + use strict; + use vars qw(%GET %POST); + use Class::Autouse qw( LJ::Browse ); + + return "This page is not available." unless LJ::is_enabled("browse"); + + my $ret; + +sub get_parent_path { + my $cat_path = shift; + my $c = shift; + + return undef unless $c; + + my $parent = $c->parent; + + push @$cat_path, $c; + + return 0 unless $parent; + + return get_parent_path ($cat_path, $c->parent); +} + +sub _build_tree { + my ($parent, $cats_ref, $selected_cat, $text, $i, $n) = @_; + + $i ||= 0; + + return $text unless $cats_ref; + + my @categories = @$cats_ref; + @categories = grep { ($_->parent == $parent) } grep { $_ } @categories; + + return $text unless scalar @categories; + + my @path_ = (); + get_parent_path (\@path_, $selected_cat); + my %path = map { $_->catid => 1 } @path_; + my @sel_cat = grep { $path{$_->catid} } @categories; + + my @caturls = map { { text => $_->{pretty_name}, value => $_->catid } } @categories; + @caturls = sort { $a->{text} cmp $b->{text} } @caturls; + + $text .= "<tr><td>Category</td>"; + $text .= "<td>" . LJ::html_select({ + name => "catid$i\_$n", style => "width:100%;", + selected => $sel_cat[0] ? $sel_cat[0]->catid : '' }, + { text => $ML{'.add'}, + value => '' }, + @caturls + ) . "</td>"; + $text .= "<td>" . LJ::html_submit('select_c', 'Select Category') . "</td>"; + $text .= "</tr>"; + + if ($sel_cat[0]) { + my @children = $sel_cat[0]->children; + $text = _build_tree($sel_cat[0], \@children, $selected_cat, $text, ++$i, $n); + } + + return $text; +} + + # get remote + my $remote = LJ::get_remote(); + unless ($remote) { + $ret .= "<?needlogin?>"; + } + + my @cat_ = (); + my @vert_ = (); + + my $limit = 2; # Max number of categories a community can appear in + my @catid_; + my @catrem; + + my $i = 1; + my $j = $i - 1; + ## which category the user wants to add a community? + my @ids = sort { $b cmp $a } grep { $_ =~ /^catid\d+\_\Q$i\E$/ } keys %POST; + my $cat_id = $POST{$ids[0]}; + push @catid_, $cat_id if $cat_id; + push @catrem, $POST{"catremove_$i"} if $POST{"catremove_$i"}; + push @cat_, $cat_id ? LJ::Browse->load_by_id ($cat_id) : undef; + my $vert_id = $POST{"vert_id_$i"} || $GET{"vert_id"}; + push @vert_, $vert_id ? LJ::Vertical->load_by_id ($vert_id) : undef; + + if (LJ::did_post && $POST{'action:update'}) { + # validate form auth + return "<?h1 $ML{'Error'} h1?><?p $ML{'error.invalidform'} p?>" + unless LJ::check_form_auth(); + + my @new_tags = grep { $_ =~ /^tags_\d+/ } keys %POST; + foreach my $tag (@new_tags) { + my ($cid) = $tag =~ /^tags_(\d+)/; + my @tags = split /,\s*/, $POST{$tag}; + LJ::Vertical->delete_tags_links (comm_id => $cid, vert_id => $vert_[$j] ? $vert_[$j]->vert_id : 0); + $cat_[$j]->add_community ($cid, { tags => \@tags, not_need_approve => 1 }); + } + + } + + $ret .= "<form method='post' method='post'>"; + $ret .= LJ::form_auth(); + + $ret .= "<table>"; + my @verticals = LJ::Vertical->load_all(); + if (!$LJ::DISABLED{'verticals_menu'}) { + $ret .= "<tr><td valign='top'><!-- $i.-->Vertical</td>"; + @verticals = map { { text => $_->{name}, value => $_->{vert_id} } } @verticals; + + $ret .= "<td>".LJ::html_select({ + name => "vert_id_$i", style => "", + selected => $vert_[$j] ? $vert_[$j]->vert_id : 0, + }, + { text => 'Select Vertical', + value => '',}, + @verticals + ); + $ret .= "</td><td>\n"; + + $ret .= LJ::html_submit('select_v', 'Select Vertical') . "</td></tr>"; + } + + if ((LJ::did_post() && $vert_[$j]) || ($LJ::DISABLED{'verticals_menu'})) { + my @children = $cat_[$j] ? $cat_[$j]->children : (); + # Get the full list of categories + my @categories = LJ::Browse->load_all($vert_[$j]); + + $ret .= _build_tree (0, \@categories, $cat_[$j], undef, undef, $i); + if ($cat_[$j]) { + $ret .= "<tr><td valign='top'>Communities from category:</td><tr><td colspan='3'>"; + if ($cat_[$j]->communities) { + $ret .= "<table width='100%'>"; + foreach my $comm ($cat_[$j]->communities) { + $ret .= "<tr><td>".LJ::ljuser($comm->user) . "</td><td><input type='text' size='60' name='tags_".$comm->userid."' value='".LJ::Vertical->get_tags_for_journal (vert_id => $vert_[$j] ? $vert_[$j]->vert_id : 0, comm_id => $comm->userid)."'></td></tr>"; + } + $ret .= "</table>"; + } + $ret .= "</td></tr>"; + } + } + $ret .= "</table>\n"; + $ret .= "</p>\n"; + + $ret .= "<p>" . LJ::html_submit('action:update', $ML{'.update'}) . "</p>\n" + if $cat_[$j]; + $ret .= "</div></form>\n\n"; + + $ret .= "<p><a href='/admin/browse/'>Back to main page</a></p>"; + + return $ret; + +} +_code?> + +<=body +page?> Added: trunk/htdocs/admin/browse/edit_community.bml.text =================================================================== --- trunk/htdocs/admin/browse/edit_community.bml.text (rev 0) +++ trunk/htdocs/admin/browse/edit_community.bml.text 2010-12-06 10:54:43 UTC (rev 17865) @@ -0,0 +1,4 @@ +.title=Edit Community +.add=Select Category +.update=Update tags list + Modified: trunk/htdocs/admin/browse/index.bml =================================================================== --- trunk/htdocs/admin/browse/index.bml 2010-12-06 09:20:01 UTC (rev 17864) +++ trunk/htdocs/admin/browse/index.bml 2010-12-06 10:54:43 UTC (rev 17865) @@ -36,6 +36,7 @@ $ret .= "<h2>Manage Communities</h2><ul style='list-style:none;line-height:1.6em;padding:0 0 0 20px;'>"; $ret .= "<li><a href='./moderate_community.bml'>Moderate Community Submissions</a></li>"; $ret .= "<li><a href='./add_community.bml'>Add Community to Category</a></li>"; + $ret .= "<li><a href='./edit_community.bml'>Edit Community</a></li>"; $ret .= "<li><a href='./remove_community.bml'>Remove Community from Category</a></li>"; $ret .= "</ul>"; Modified: trunk/htdocs/admin/browse/recent_posts.bml =================================================================== --- trunk/htdocs/admin/browse/recent_posts.bml 2010-12-06 09:20:01 UTC (rev 17864) +++ trunk/htdocs/admin/browse/recent_posts.bml 2010-12-06 10:54:43 UTC (rev 17865) @@ -73,6 +73,7 @@ $ret .= "<ul style='list-style:none;line-height:1.6em;padding:0;'>"; foreach (@posts) { + next unless $_->valid; my $url = $_->url; my $subject = $_->subject_text; my $jitemid = $_->jitemid; Modified: trunk/htdocs/admin/browse/top_entries_vertical.bml =================================================================== --- trunk/htdocs/admin/browse/top_entries_vertical.bml 2010-12-06 09:20:01 UTC (rev 17864) +++ trunk/htdocs/admin/browse/top_entries_vertical.bml 2010-12-06 10:54:43 UTC (rev 17865) @@ -113,6 +113,7 @@ my @top_posts = (); foreach (@$posts) { my $entry = LJ::Entry->new ($_->{journalid}, jitemid => $_->{jitemid}); + next unless $entry->valid; my $url = $entry->url; my $subject = $entry->subject_text; my $jitemid = $entry->jitemid; @@ -128,6 +129,7 @@ my $posts = $vertical->load_vertical_posts( count => $vertical->show_entries, is_random => 1 ); foreach (@$posts) { my $entry = LJ::Entry->new ($_->{journalid}, jitemid => $_->{jitemid}); + next unless $entry->valid; my $userpic = $entry->userpic; my $poster = $entry->poster; push @top_posts, {