Changeset 11
- Timestamp:
- 05/17/05 18:40:56 (3 years ago)
- Files:
-
- trunk/lib/Scrpbk.pm (modified) (3 diffs)
- trunk/lib/Scrpbk/C/Display.pm (added)
- trunk/lib/Scrpbk/C/Holder.pm (modified) (2 diffs)
- trunk/lib/Scrpbk/C/Page.pm (added)
- trunk/lib/Scrpbk/C/Person.pm (modified) (3 diffs)
- trunk/lib/Scrpbk/M/Holder.pm (modified) (2 diffs)
- trunk/lib/Scrpbk/M/Page.pm (added)
- trunk/lib/Scrpbk/M/Person.pm (modified) (1 diff)
- trunk/misc/sql/0001.sql (modified) (4 diffs)
- trunk/root/base/display (added)
- trunk/root/base/display/page (added)
- trunk/root/base/holder/column (modified) (1 diff)
- trunk/root/base/holder/edit (modified) (1 diff)
- trunk/root/base/menu/goodies (modified) (1 diff)
- trunk/root/base/menu/person (modified) (2 diffs)
- trunk/root/base/menu/top (modified) (1 diff)
- trunk/root/base/page (added)
- trunk/root/base/page/edit (added)
- trunk/root/base/person/page (deleted)
- trunk/root/base/redirect (deleted)
- trunk/t/c/display.t (added)
- trunk/t/c/page.t (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/Scrpbk.pm
r8 r11 27 27 28 28 # If we are testing turn on debugging. 29 #sub debug { $yaml_config->{setting} eq 'testing' ? 1 : 0 };29 sub debug { $yaml_config->{setting} eq 'testing' ? 1 : 0 }; 30 30 31 31 sub begin : Private { … … 43 43 44 44 # Get user 'homepage' onto stash as 'target'. 45 $c->stash->{target} = Scrpbk::M::Person->retrieve( tag => 'homepage' ) 46 || warn "Could not load user 'homepage'"; 45 my $target = Scrpbk::M::Person->retrieve( tag => 'homepage' ); 46 47 if ( $target ) { 48 $c->stash->{target} = $target; 49 ( $c->stash->{page} ) = $target->pages( url => 'home' ); 50 } else { 51 warn "Could not load user 'homepage'"; 52 } 47 53 } 48 54 … … 52 58 # If there is a redirect going change the template. 53 59 if ( $c->res->redirect ) { 54 $c->stash->{template} = 'redirect'; 60 $c->res->output("You are being redirected."); 61 } else { 62 $c->forward('Scrpbk::V::TT'); 55 63 } 56 64 57 $c->forward('Scrpbk::V::TT');65 return 1; 58 66 } 67 59 68 60 69 sub load_session_from_cookie : Private { trunk/lib/Scrpbk/C/Holder.pm
r5 r11 129 129 return unless $c->req->param('form_submitted'); 130 130 131 # Get the page to use. 132 my $page_id = $c->req->param('page'); 133 my $page = Scrpbk::M::Page->retrieve( id => $page_id, person => $person ) 134 || Scrpbk::M::Page->retrieve( tag => 'home', person => $person ) 135 || die "Could not load 'home' page for user '$person'"; 136 131 137 # Get and tidy the name. 132 138 my $name = $c->req->param('name'); … … 149 155 # Update or create the holder. 150 156 if ($holder) { 151 $holder->name($name); 157 $holder->name( $name ); 158 $holder->page( $page ); 159 160 # If the page has changed then set rank and col to low values. 161 if ( grep { m/page/ } $holder->is_changed ) { 162 $holder->rank( 0 ); 163 $holder->col( 1 ); 164 } 165 152 166 $holder->update; 153 167 } 154 168 else { 155 169 $holder = 156 Scrpbk::M::Holder->create( { person => $person, name => $name } ); 170 Scrpbk::M::Holder->create 171 ( { person => $person, name => $name, page => $page } ); 157 172 } 158 173 $holder->rerank_column; 159 174 160 175 # Send the user to the page with the holder on. 161 return $c->res->redirect( '/~' . $person->tag);176 return $c->res->redirect( $page->path ); 162 177 } 163 178 trunk/lib/Scrpbk/C/Person.pm
r5 r11 13 13 $c->stash->{fatal_error} = "You need to tell us what to do."; 14 14 return $c->forward('/fatal_error'); 15 }16 17 ################################################################################18 19 sub person_page : Regex('^~(\w+)$') {20 my ( $self, $c ) = @_;21 my $target = Scrpbk::M::Person->retrieve( tag => $c->req->snippets->[0] );22 $c->stash->{target} = $target if $target;23 $c->stash->{template} = 'person/page';24 15 } 25 16 … … 179 170 if ($template) { 180 171 172 my %page_id_lkup = (); 181 173 my %holder_id_lkup = (); 182 174 183 foreach my $holder ( $template->holders ) { 184 185 # Create the holder and add to the lookup table. 186 my $new_holder = $holder->copy( { person => $person } ); 187 $holder_id_lkup{ $holder->id } = $new_holder; 188 } 189 190 foreach my $scrap ( $template->scraps ) { 191 192 # Copy the scrap. 193 my %args = (); 194 $args{holder} = $holder_id_lkup{ $scrap->holder->id } 195 if $scrap->holder; 196 197 my $new_scrap = $scrap->copy( 198 { 199 person => $person, 200 %args 201 } 202 ); 203 } 204 205 } 175 foreach my $page ( $template->pages ) { 176 # Create the holder and add to the lookup table. 177 my $new_page = $page->copy( { person => $person } ); 178 $page_id_lkup{ $page->id } = $new_page; 179 } 180 181 foreach my $holder ( $template->holders ) { 182 # Create the holder and add to the lookup table. 183 my $new_holder = $holder->copy 184 ( { person => $person, 185 page => $page_id_lkup{ $holder->page->id } 186 } ); 187 188 $holder_id_lkup{ $holder->id } = $new_holder; 189 } 190 191 foreach my $scrap ( $template->scraps ) { 192 # Copy the scrap. 193 my %args = (); 194 $args{holder} = $holder_id_lkup{ $scrap->holder->id } 195 if $scrap->holder; 196 197 my $new_scrap = $scrap->copy( { person => $person, %args } ); 198 } 199 } 200 201 # There is no template user. 206 202 else { 207 203 $c->log->info("You should create the template user to copy from."); … … 211 207 $c->forward('create_session'); 212 208 $c->res->redirect( "/~" . $person->tag ); 209 return 1; 213 210 } 214 211 trunk/lib/Scrpbk/M/Holder.pm
r5 r11 6 6 __PACKAGE__->table('holders'); 7 7 8 __PACKAGE__->columns( All => qw( id p erson name col rank ) );8 __PACKAGE__->columns( All => qw( id page person name col rank ) ); 9 9 10 10 __PACKAGE__->has_a( person => 'Scrpbk::M::Person' ); 11 __PACKAGE__->has_a( page => 'Scrpbk::M::Page' ); 11 12 12 13 __PACKAGE__->has_many( scraps => 'Scrpbk::M::Scrap' ); … … 88 89 my @holders = __PACKAGE__->search( 89 90 person => $self->person, 91 page => $self->page, 90 92 col => $column, 91 93 { order_by => 'rank, id' } trunk/lib/Scrpbk/M/Person.pm
r5 r11 11 11 12 12 __PACKAGE__->has_many( sessions => 'Scrpbk::M::Session' ); 13 __PACKAGE__->has_many( pages => 'Scrpbk::M::Page' ); 13 14 __PACKAGE__->has_many( holders => 'Scrpbk::M::Holder' ); 14 15 __PACKAGE__->has_many( scraps => 'Scrpbk::M::Scrap' ); trunk/misc/sql/0001.sql
r9 r11 1 1 -------------------------------------------------------------------------------- 2 2 -- email must be unique. 3 3 CREATE UNIQUE INDEX persons_email_key ON persons(email); 4 4 5 5 6 -------------------------------------------------------------------------------- … … 21 22 22 23 -- get rid of bad urls. 23 UPDATE scraps SET url = '' whereurl = 'http://';24 UPDATE scraps SET url = '' WHERE url = 'http://'; 24 25 25 26 -- add the content column. … … 27 28 28 29 -- get rid of name. 29 UPDATE scraps SET content = '**' || name || '**' wherename != '';30 UPDATE scraps SET content = '**' || name || '**' WHERE name != ''; 30 31 ALTER TABLE scraps DROP COLUMN name; 31 32 32 33 -- get rid of note 33 UPDATE scraps SET content = content || ' ' || note wherenote != '';34 UPDATE scraps SET content = content || ' ' || note WHERE note != ''; 34 35 ALTER TABLE scraps DROP COLUMN note; 35 36 36 37 -- get rid of url. 37 UPDATE scraps SET content = content || ' [' || url || ']' whereurl != '';38 UPDATE scraps SET content = content || ' [' || url || ']' WHERE url != ''; 38 39 ALTER TABLE scraps DROP COLUMN url; 39 40 … … 41 42 ALTER TABLE scraps ALTER content SET NOT NULL; 42 43 44 45 -------------------------------------------------------------------------------- 46 -- Create pages for the users. 47 48 -- create the table 49 CREATE TABLE pages ( 50 id int8 PRIMARY KEY, 51 person int8 NOT NULL 52 REFERENCES persons(id), 53 url text NOT NULL 54 DEFAULT 'home', 55 name text NOT NULL 56 DEFAULT 'Home', 57 rank int8 NOT NULL 58 DEFAULT 1, 59 60 CONSTRAINT pages_url_lower_and_trimmed 61 CHECK( url = lower(url) AND url = trim(url) ), 62 63 CONSTRAINT pages_unique_person_url 64 UNIQUE( person, url ), 65 66 CONSTRAINT pages_unique_person_name 67 UNIQUE( person, name ) 68 ); 69 70 -- fill the table with defaults for all users. 71 INSERT INTO pages ( id, person, rank ) 72 SELECT nextval('global_id_sequence'), id, 0 73 FROM persons; 74 75 -- create a page column in holders 76 ALTER TABLE holders ADD page int8 REFERENCES pages; 77 78 -- fill in the page column in holders. 79 UPDATE holders 80 SET page = pages.id 81 FROM pages 82 WHERE holders.person = pages.person; 83 84 -- set the page column not null in holders 85 ALTER TABLE holders ALTER page SET NOT NULL; 86 87 -------------------------------------------------------------------------------- 43 88 -- set the database version. 44 89 CREATE OR REPLACE trunk/root/base/holder/column
r2 r11 1 [% order_by = { 'order_by' = 'rank' } %] 2 [% holders = target.holders( 'col', column_number, order_by ) %] 3 1 [% order_by = { 'order_by' => 'rank' } %] 2 [% holders = page.holders( 'col', column_number, order_by ) %] 4 3 5 4 [% FOREACH holder = holders %] 6 5 7 6 [% 8 7 # Set up the directions that can be used. trunk/root/base/holder/edit
r2 r11 18 18 19 19 <td align="right">name:</td> 20 <td ><input type="text" name="name" size=60 value="[% new.name || holder.name | html %]"></td>20 <td align="left"><input type="text" name="name" size=60 value="[% new.name || holder.name | html %]"></td> 21 21 22 22 <tr></tr> 23 23 24 <td> </td> 25 <td><input type="submit" value="Change Holder"></td> 24 <td align="right">page:</td> 25 <td align="left"> 26 <select name='page'> 27 [% order_by = { order_by => 'rank, name' } %] 28 [% page_id = new.page || holder.page %] 29 [% FOREACH my_page = person.pages( order_by ) %] 30 <option value="[% my_page.id %]"[% ' selected' IF my_page.id == page_id %]> 31 [% my_page.name %] 32 </option> 33 [% END %] 34 </select> 35 </td> 36 37 <tr></tr> 38 39 <td colspan="2"><input type="submit" value="Change Holder"></td> 26 40 27 41 </tr> trunk/root/base/menu/goodies
r2 r11 1 [% WRAPPER plain_table title = 'Goodies' %] 2 <!--<p class="instruction"><a href="/go/to/random/person">Random person</a></p>--> 3 1 4 [% IF person %] 2 3 [% WRAPPER plain_table title = 'Goodies' %] 4 5 <div class="instruction"> 6 7 Add this link to your browser to create scraps from web pages: 8 <a href="javascript:location.href='http://[% c.config.http_host %]/scrap/edit/new?form_submitted=1&name='+encodeURIComponent(document.title)+'&url='+encodeURIComponent(location.href)">Add page to Scrpbk.com</a> 9 10 </div> 5 <p class="instruction">Add this link to your browser to create scraps from web pages:<br> 6 <a href="javascript:location.href='http://[% c.config.http_host %]/scrap/edit/new?form_submitted=1&name='+encodeURIComponent(document.title)+'&url='+encodeURIComponent(location.href)">Add page to Scrpbk.com</a></p> 7 [% END # if person %] 11 8 12 9 [% END # wrapper %] 13 10 14 [% END # if person %]trunk/root/base/menu/person
r8 r11 53 53 <form action="/holder/edit/new" name="add_holder" method="POST"> 54 54 <input type="hidden" name="form_submitted" value="1"> 55 <input type="hidden" name="page" value="[% page.id %]"> 55 56 <tr> 56 57 <td align=right>name:</td> … … 70 71 [% END %] 71 72 73 74 [% WRAPPER 'plain_table' title = 'Add a page' %] 75 76 <a href="/page/edit/new">Add a page</a> 77 78 [% END %] 79 80 81 72 82 [% END %] 73 83 trunk/root/base/menu/top
r2 r11 1 [% IF sys_message %] 2 [% WRAPPER 'plain_table' table_class = 'warning_holder' %] 3 [% sys_message %] 1 [% IF target %] 2 [% WRAPPER 'plain_table' %] 3 4 <b>~[% target.tag %]:</b> 5 6 [% order_by = { order_by => 'name' } %] 7 [% FOREACH mypage = target.pages( order_by ) %] 8 [% '<span style="background: #ffffff;">' IF mypage.url == page.url %] 9 <a href="[% mypage.path %]">[% mypage.name %]</a> 10 [% '</span>' IF mypage.url == page.url %] 11 [% ' ~ ' UNLESS loop.last %] 12 [% END %] 13 4 14 [% END %] 5 15 [% END %] 6 16 7 8 [% IF target %]9 [% WRAPPER 'plain_table' %]10 <b>~[% target.tag %]:</b>11 <a href="/~[% target.tag %]">Home</a>12 [% END %]13 [% END %]14
