- Timestamp:
- 06/03/13 17:43:16 (11 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Bookmark.pm
r44 r45 37 37 } 38 38 39 sub update { 40 my $self = shift; 41 # TODO: store the dbh somewhere better, or use a more generic "Bookmark Store" object 42 my $dbh = shift; 43 my $mtime = time; 44 45 my $changed_uri = 0; 46 my $sth_current = $dbh->prepare('select uri from bookmarks where id = ?'); 47 $sth_current->execute($self->id); 48 my ($stored_uri) = $sth_current->fetchrow_array; 49 50 if ($stored_uri ne $self->uri) { 51 # the URI has changed 52 my $sth_update_uri = $dbh->prepare('update resources set uri = ? where uri = ?'); 53 $sth_update_uri->execute($self->uri, $stored_uri); 54 $changed_uri++; 55 } 56 57 # update the title 58 # TODO: only do this if the title has changed 59 # TODO: should we update mtime if the title changes? 60 my $sth_update = $dbh->prepare('update resources set title = ? where uri = ?'); 61 $sth_update->execute($self->title, $self->uri); 62 63 # update the tags 64 my $changed_tags = 0; 65 my %new_tags = map { $_ => 1 } @{ $self->tags }; 66 my $sth_delete_tag = $dbh->prepare('delete from tags where uri = ? and tag = ?'); 67 my $sth_insert_tag = $dbh->prepare('insert into tags (uri, tag) values (?, ?)'); 68 my $sth_current_tags = $dbh->prepare('select tag from tags where uri = ?'); 69 $sth_current_tags->execute($self->uri); 70 while (my ($tag) = $sth_current_tags->fetchrow_array) { 71 if (!$new_tags{$tag}) { 72 # if a current tag is not in the new tags, remove it from the database 73 $sth_delete_tag->execute($self->uri, $tag); 74 $changed_tags++; 75 } else { 76 # if a new tag is already in the database, remove it from the list of tags to add 77 delete $new_tags{$tag}; 78 } 79 } 80 for my $tag (keys %new_tags) { 81 $sth_insert_tag->execute($self->uri, $tag); 82 $changed_tags++; 83 } 84 85 if ($changed_uri or $changed_tags) { 86 # update the mtime if the bookmark already existed but the tags were changed 87 my $sth_update = $dbh->prepare('update bookmarks set mtime = ? where uri = ?'); 88 $sth_update->execute($mtime, $self->uri); 89 } 90 91 # return the bookmark 92 return $self; 93 } 94 39 95 # module return 40 96 1; -
trunk/BookmarkApp.pm
r43 r45 20 20 view 21 21 view_field 22 create 22 23 edit 23 24 }]); … … 361 362 } 362 363 363 #TODO: split this into edit and create methods 364 sub edit { 364 sub create { 365 365 my $self = shift; 366 366 my $q = $self->query; 367 #TODO: get the bookmark based on the id and edit it directly?368 #TODO: deal with changing URIs369 367 my $uri = $q->param('uri'); 370 368 my $title = $q->param('title'); … … 392 390 } 393 391 392 sub edit { 393 my $self = shift; 394 my $q = $self->query; 395 my $id = $self->param('id'); 396 397 my $bookmark = $self->_bookmarks->get_bookmark({ id => $id }); 398 if ($bookmark) { 399 # update the URI, title, and tags 400 $bookmark->uri($q->param('uri')); 401 $bookmark->title($q->param('title')); 402 $bookmark->tags([ split(' ', $q->param('tags')) ]); 403 $bookmark->update($self->_bookmarks->dbh); 404 405 # return to the form 406 $self->header_type('redirect'); 407 $self->header_props( 408 -uri => $bookmark->bookmark_uri->canonical, 409 -status => 303, 410 ); 411 } else { 412 $self->header_props( 413 -type => 'text/html', 414 -charset => 'UTF-8', 415 -status => 404, 416 ); 417 return "Bookmark $id Not Found"; 418 } 419 } 420 394 421 1; -
trunk/BookmarkApp/Dispatch.pm
r42 r45 13 13 ':id[get]' => { app => 'BookmarkApp', rm => 'view' }, 14 14 ':id/:field[get]' => { app => 'BookmarkApp', rm => 'view_field' }, 15 ':id?[post]' => { app => 'BookmarkApp', rm => 'edit' }, 15 '[post]' => { app => 'BookmarkApp', rm => 'create' }, 16 ':id[post]' => { app => 'BookmarkApp', rm => 'edit' }, 16 17 ], 17 18 }; -
trunk/TODO
r18 r45 1 1 - import/export of bookmark data 2 - allow changing of URLs of resources3 2 - tool to scan database for broken URLs 4 3 - machine tags -
trunk/bookmark.tt
r40 r45 36 36 <th>URI:</th> 37 37 <td> 38 <input type="text" name="uri" value="[% uri | html %]" size="80" 39 [% IF exists %]readonly="readonly"[% END%]/> 38 <input type="text" name="uri" value="[% uri | html %]" size="80"/> 40 39 </td> 41 40 </tr>
Note: See TracChangeset
for help on using the changeset viewer.