[Cpan-forum-commit] rev 237 - in trunk: . lib/CPAN lib/CPAN/Forum/DB lib/CPAN/Forum/RM templates
svn at pti.co.il
svn at pti.co.il
Wed Jul 4 00:01:50 IDT 2007
Author: gabor
Date: 2007-07-04 00:01:50 +0300 (Wed, 04 Jul 2007)
New Revision: 237
Added:
trunk/lib/CPAN/Forum/RM/Update.pm
Modified:
trunk/
trunk/lib/CPAN/Forum.pm
trunk/lib/CPAN/Forum/DB/Tags.pm
trunk/lib/CPAN/Forum/RM/Dist.pm
trunk/templates/groups.tmpl
trunk/templates/notes.tmpl
Log:
updating tags (Adding/deleting) works now
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4096
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
+ 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4097
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
Modified: trunk/lib/CPAN/Forum/DB/Tags.pm
===================================================================
--- trunk/lib/CPAN/Forum/DB/Tags.pm 2007-07-03 20:59:43 UTC (rev 236)
+++ trunk/lib/CPAN/Forum/DB/Tags.pm 2007-07-03 21:01:50 UTC (rev 237)
@@ -6,18 +6,34 @@
use Carp qw();
+sub get_tags_hash_of {
+ my ($self, $group_id, $uid) = @_;
+ my $dbh = CPAN::Forum::DBI::db_Main();
+ my $sql = "SELECT tags.name, tags.id
+ FROM tag_cloud, tags
+ WHERE tag_cloud.tag_id=tags.id AND tag_cloud.uid=? AND tag_cloud.group_id=?";
+ my $sth = $dbh->prepare($sql);
+ $sth->execute($uid, $group_id);
+ my %tags;
+ while (my ($name, $id) = $sth->fetchrow_array) {
+ $tags{$name} = $id;
+ }
+ return \%tags;
+}
+
+
sub get_tags_of {
my ($self, $group_id, $uid) = @_;
if (not defined $uid) {
return $self->get_tags_of_module($group_id);
}
my $dbh = CPAN::Forum::DBI::db_Main();
- my $sql = "SELECT tags.name name
+ my $sql = "SELECT tags.name name
FROM tag_cloud, tags
WHERE tag_cloud.tag_id=tags.id AND tag_cloud.uid=? AND tag_cloud.group_id=?";
my $sth = $dbh->prepare($sql);
$sth->execute($uid, $group_id);
- my $ar = $sth->fetchrow_arrayref;
+ my $ar = $sth->fetchall_arrayref;
my @names = map { {name => $_->[0]} } @$ar;
return \@names;
}
@@ -30,14 +46,15 @@
WHERE tag_cloud.tag_id=tags.id AND tag_cloud.group_id=?";
my $sth = $dbh->prepare($sql);
$sth->execute($group_id);
- my $ar = $sth->fetchrow_arrayref;
+ my $ar = $sth->fetchall_arrayref;
my @names = map { {name => $_->[0]} } @$ar;
return \@names;
}
sub attach_tag {
- my ($self, $group_id, $text) = @_;
- Carp::croak("Invalid tag") if not defined $text or $text !~ /^\w+$/;
+ my ($self, $uid, $group_id, $text) = @_;
+ Carp::croak("Missing tag") if not defined $text;
+ #Carp::croak("Invalid tag") if not defined $text or $text !~ /^\w+$/;
$text = lc $text;
@@ -48,16 +65,25 @@
return if not $tag_id;
my $dbh = CPAN::Forum::DBI::db_Main();
- return $dbh->do("INSERT INTO tags_on_groups (tag_id, group_id) VALUES (?, ?)",
- undef, $tag_id, $group_id);
+ return $dbh->do("INSERT INTO tag_cloud (tag_id, group_id, uid) VALUES (?, ?, ?)",
+ undef, $tag_id, $group_id, $uid);
}
+sub remove_tag {
+ my ($self, $uid, $group_id, $tag_id) = @_;
+
+ my $dbh = CPAN::Forum::DBI::db_Main();
+ return $dbh->do("DELETE FROM tag_cloud WHERE uid=? AND group_id=? AND tag_id=?",
+ undef,
+ $uid, $group_id, $tag_id);
+}
+
# assume valid text
sub _add_tag {
my ($self, $text) = @_;
my $dbh = CPAN::Forum::DBI::db_Main();
- my $sth->do("INSERT INTO tags (name) VALUES (?)", undef, $text);
+ $dbh->do("INSERT INTO tags (name) VALUES (?)", undef, $text);
return $self->_get_tag_id($text);
}
Modified: trunk/lib/CPAN/Forum/RM/Dist.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Dist.pm 2007-07-03 20:59:43 UTC (rev 236)
+++ trunk/lib/CPAN/Forum/RM/Dist.pm 2007-07-03 21:01:50 UTC (rev 237)
@@ -66,6 +66,7 @@
my $uid = $self->session->param('uid');
my $tags = CPAN::Forum::DB::Tags->get_tags_of($gid, $uid);
$t->param(tags => $tags);
+ $t->param(group_id => $gid);
return $t->output;
}
Added: trunk/lib/CPAN/Forum/RM/Update.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Update.pm (rev 0)
+++ trunk/lib/CPAN/Forum/RM/Update.pm 2007-07-03 21:01:50 UTC (rev 237)
@@ -0,0 +1,51 @@
+package CPAN::Forum::RM::Update;
+use strict;
+use warnings;
+
+sub update {
+ my ($self) = @_;
+
+ my $q = $self->query;
+ my $what = $q->param('what');
+ if (defined $what and $what eq 'tags') {
+ return $self->_update_tags;
+ }
+
+
+ return $self->internal_error();
+}
+
+sub _update_tags {
+ my ($self) = @_;
+
+ my $q = $self->query;
+ my $group_id = $q->param('group_id');
+ my $new_tags = $q->param('new_tags');
+ $self->log->debug("_update_tags in group '$group_id' tags='$new_tags'");
+ $new_tags =~ s/^\s+//;
+ $new_tags =~ s/\s+$//;
+ my @tags = split /,/, lc $new_tags;
+
+ my $uid = $self->session->param('uid');
+
+ # TODO: let the client side decide which tags need to be added and removed
+ my $tags_hr = CPAN::Forum::DB::Tags->get_tags_hash_of($group_id, $uid);
+
+ foreach my $tag (@tags) {
+ if ($tags_hr->{$tag}) {
+ delete $tags_hr->{$tag};
+ } else {
+ CPAN::Forum::DB::Tags->attach_tag($uid, $group_id, $tag);
+ }
+ }
+ foreach my $old_tag (keys %$tags_hr) {
+ CPAN::Forum::DB::Tags->remove_tag($uid, $group_id, $tags_hr->{$old_tag});
+ }
+
+ return $self->notes('tags_updated');
+}
+
+
+1;
+
+
Modified: trunk/lib/CPAN/Forum.pm
===================================================================
--- trunk/lib/CPAN/Forum.pm 2007-07-03 20:59:43 UTC (rev 236)
+++ trunk/lib/CPAN/Forum.pm 2007-07-03 21:01:50 UTC (rev 237)
@@ -510,6 +510,7 @@
help
rss
atom
+ update
);
my @restricted_modes = qw(
new_post process_post
@@ -538,6 +539,7 @@
search all
rss
atom
+ update
);
use base 'CPAN::Forum::RM::Author';
@@ -550,6 +552,7 @@
use base 'CPAN::Forum::RM::Search';
use base 'CPAN::Forum::RM::Subscriptions';
use base 'CPAN::Forum::RM::UserAccounts';
+use base 'CPAN::Forum::RM::Update';
my %RM_MAP = (
author => 'CPAN::Forum::RM::Author',
@@ -696,7 +699,8 @@
sub autoload {
my $self = shift;
- $self->log->debug("autoload called: @ARGV");
+ my $rm = $self->get_current_runmode();
+ $self->log->debug("autoload called run-mode='$rm' ARGV='@ARGV'");
$self->internal_error();
}
Modified: trunk/templates/groups.tmpl
===================================================================
--- trunk/templates/groups.tmpl 2007-07-03 20:59:43 UTC (rev 236)
+++ trunk/templates/groups.tmpl 2007-07-03 21:01:50 UTC (rev 237)
@@ -16,9 +16,9 @@
My Tags: <TMPL_LOOP tags><TMPL_VAR name>, </TMPL_LOOP>
</TMPL_IF><br />
<form method="post" action="/update/">
-<input type="hidden" name="rm" value="tags" />
-<input type="hidden" name="group" value="<TMPL_VAR group>" />
-<input name="tag" value="<TMPL_LOOP tags><TMPL_VAR name>, </TMPL_LOOP>" />
+<input type="hidden" name="what" value="tags" />
+<input type="hidden" name="group_id" value="<TMPL_VAR group_id>" />
+<input name="new_tags" value="<TMPL_LOOP tags><TMPL_VAR name>, </TMPL_LOOP>" />
<input type="submit" value="Update tags" />
</form>
</p>
Modified: trunk/templates/notes.tmpl
===================================================================
--- trunk/templates/notes.tmpl 2007-07-03 20:59:43 UTC (rev 236)
+++ trunk/templates/notes.tmpl 2007-07-03 21:01:50 UTC (rev 237)
@@ -42,5 +42,9 @@
</p>
</TMPL_IF>
+<TMPL_IF tags_updated>
+Tags were updated
+</TMPL_IF>
+
<TMPL_INCLUDE NAME="footer.tmpl">
More information about the Cpan-forum-commit
mailing list