[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