Index: openacs-4/packages/layout-managed-subsite/layout-managed-subsite.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-managed-subsite/layout-managed-subsite.info,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/layout-managed-subsite/layout-managed-subsite.info 9 May 2009 22:49:39 -0000 1.2 +++ openacs-4/packages/layout-managed-subsite/layout-managed-subsite.info 19 Jan 2010 22:52:48 -0000 1.3 @@ -16,7 +16,7 @@ 0 - + Index: openacs-4/packages/layout-managed-subsite/lib/tabbed-master.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-managed-subsite/lib/tabbed-master.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/layout-managed-subsite/lib/tabbed-master.tcl 3 Dec 2008 09:22:00 -0000 1.2 +++ openacs-4/packages/layout-managed-subsite/lib/tabbed-master.tcl 19 Jan 2010 22:52:48 -0000 1.3 @@ -25,11 +25,10 @@ # Grab the pages for the user pageset db_multirow -cache_key pageset_${pageset_id}_multirow_${user_id} -append \ - -unclobber -extend {group href target title lang accesskey class id} \ + -unclobber -extend {group target title lang accesskey class id} \ navigation select_pageset_pages {} { set group main - set href [export_vars -base $layout_manager_url {{pageset_id $pageset_id} \ - {page_num $tabindex}}] + set href $layout_manager_url[ad_urlencode $href] } set show_applications_p [parameter::get -package_id [ad_conn subsite_id] \ Index: openacs-4/packages/layout-managed-subsite/lib/tabbed-master.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-managed-subsite/lib/tabbed-master.xql,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/layout-managed-subsite/lib/tabbed-master.xql 26 Nov 2008 11:10:23 -0000 1.1 +++ openacs-4/packages/layout-managed-subsite/lib/tabbed-master.xql 19 Jan 2010 22:52:48 -0000 1.2 @@ -4,7 +4,7 @@ - select lp.name as label, lp.sort_key as tabindex + select lp.name as label, lp.sort_key as tabindex, url_name as href from layout_pages lp where lp.pageset_id = :pageset_id and exists (select 1 Index: openacs-4/packages/layout-manager/layout-manager.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/layout-manager.info,v diff -u -N -r1.6 -r1.7 --- openacs-4/packages/layout-manager/layout-manager.info 26 Nov 2008 11:13:52 -0000 1.6 +++ openacs-4/packages/layout-manager/layout-manager.info 19 Jan 2010 22:52:47 -0000 1.7 @@ -7,19 +7,21 @@ f t - + Don Baccus Layout Manager 2008-07-15 OpenACS The Layout Manager is used to control the layout of sets of pages built from various individual library templates provided by packages. It is a simplified and stand-alone rewrite of the .LRN new-portal package. - + + + Index: openacs-4/packages/layout-manager/catalog/layout-manager.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/catalog/layout-manager.en_US.ISO-8859-1.xml,v diff -u -N -r1.4 -r1.5 --- openacs-4/packages/layout-manager/catalog/layout-manager.en_US.ISO-8859-1.xml 3 Dec 2008 09:22:00 -0000 1.4 +++ openacs-4/packages/layout-manager/catalog/layout-manager.en_US.ISO-8859-1.xml 19 Jan 2010 22:52:47 -0000 1.5 @@ -20,5 +20,6 @@ Theme The page set package hasn't been configured yet. Update + Url Name Index: openacs-4/packages/layout-manager/lib/page-configure.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/lib/page-configure.adp,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/layout-manager/lib/page-configure.adp 3 Dec 2008 09:22:00 -0000 1.3 +++ openacs-4/packages/layout-manager/lib/page-configure.adp 19 Jan 2010 22:52:47 -0000 1.4 @@ -19,6 +19,18 @@
+ #layout-manager.Url_Name#: + + + + + + +
+ + + +
#layout-manager.Theme#: Index: openacs-4/packages/layout-manager/lib/pageset-configure-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/lib/pageset-configure-2.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/layout-manager/lib/pageset-configure-2.tcl 3 Dec 2008 09:22:00 -0000 1.2 +++ openacs-4/packages/layout-manager/lib/pageset-configure-2.tcl 19 Jan 2010 22:52:47 -0000 1.3 @@ -12,6 +12,7 @@ page_theme:optional page_template:optional name:notnull,optional + url_name:notnull,optional op:notnull return_url:notnull {anchor ""} @@ -114,6 +115,21 @@ layout::page::set_column_value -page_id $page_id -column name -value $name } + update_url_name { + + # Fix up the url name if necessary. Transform " " to "-", remove all non-alphanumeric + # characters other than "-". Though autogenerated url names are forced to lower case, + # so by default our url names match the naming conventions we have for templates in + # openacs, no harm is done if the admin uses upper case so we'll allow it. The main + # reason to get rid of non-alphanumerics is to prevent the admin from doing something + # silly like including a query string or other semantically meaningful character + # sequences in the name. + + regsub -all -nocase { } [string trim $url_name] {-} url_name + regsub -all {[^[:alnum:]\-]} $url_name {} url_name + layout::page::set_column_value -page_id $page_id -column url_name -value $url_name + } + default { ad_return_complaint 1 "\"$op\" is not a valid operator for portal configuration" } Index: openacs-4/packages/layout-manager/sql/oracle/pages-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/sql/oracle/pages-create.sql,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/layout-manager/sql/oracle/pages-create.sql 22 Jul 2008 07:31:02 -0000 1.1 +++ openacs-4/packages/layout-manager/sql/oracle/pages-create.sql 19 Jan 2010 22:52:47 -0000 1.2 @@ -10,9 +10,11 @@ constraint layout_pages_pk primary key, name varchar(100) - default 'Untitled Page' constraint l_pages_name_nn not null, + url_name varchar(100) + constraint l_pages_url_name_nn + not null, pageset_id integer constraint l_pages_pageset_id_fk references layout_pagesets (pageset_id) @@ -31,7 +33,9 @@ constraint l_pages_sort_key_nn not null, constraint l_pages_pageset_id_sort_key_un - unique (pageset_id, sort_key) + unique (pageset_id, sort_key), + constraint l_pages_pageset_id_name_un + unique (url_name, name, pageset_id) ); create index layout_pages_page_idx on layout_pages (pageset_id, page_id); Index: openacs-4/packages/layout-manager/sql/postgresql/pages-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/sql/postgresql/pages-create.sql,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/layout-manager/sql/postgresql/pages-create.sql 22 Jul 2008 07:31:02 -0000 1.1 +++ openacs-4/packages/layout-manager/sql/postgresql/pages-create.sql 19 Jan 2010 22:52:47 -0000 1.2 @@ -10,9 +10,11 @@ constraint layout_pages_pk primary key, name text - default 'Untitled Page' constraint l_pages_name_nn not null, + url_name text + constraint l_pages_url_name_nn + not null, pageset_id integer constraint l_pages_pageset_id_fk references layout_pagesets (pageset_id) @@ -31,7 +33,9 @@ constraint l_pages_sort_key_nn not null, constraint l_pages_pageset_id_sort_key_un - unique (pageset_id, sort_key) + unique (pageset_id, sort_key), + constraint l_pages_pageset_id_name_un + unique (url_name, name, pageset_id) ); create index layout_pages_page_idx on layout_pages (pageset_id, page_id); Index: openacs-4/packages/layout-manager/tcl/apm-callback-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/apm-callback-procs-oracle.xql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/tcl/apm-callback-procs-oracle.xql 19 Jan 2010 22:52:47 -0000 1.1 @@ -0,0 +1,12 @@ + + + + oracle8.1.6 + + + + alter table layout_pages modify column url_name not null + + + + Index: openacs-4/packages/layout-manager/tcl/apm-callback-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/apm-callback-procs-postgresql.xql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/tcl/apm-callback-procs-postgresql.xql 19 Jan 2010 22:52:47 -0000 1.1 @@ -0,0 +1,12 @@ + + + + postgresql7.2 + + + + alter table layout_pages alter url_name set not null + + + + Index: openacs-4/packages/layout-manager/tcl/apm-callback-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/apm-callback-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/layout-manager/tcl/apm-callback-procs.tcl 30 Jul 2008 11:59:33 -0000 1.2 +++ openacs-4/packages/layout-manager/tcl/apm-callback-procs.tcl 19 Jan 2010 22:52:47 -0000 1.3 @@ -56,3 +56,24 @@ -template /packages/layout-manager/lib/themes/blank } } + +ad_proc -private layout_manager::install::after_upgrade { + {-from_version_name:required} + {-to_version_name:required} +} { + After upgrade callback for acs-subsite. +} { + apm_upgrade_logic \ + -from_version_name $from_version_name \ + -to_version_name $to_version_name \ + -spec { + 1.1.0d1 1.1.0d2 { + db_dml add_url_name {} + db_foreach get_pages {} { + set url_name [util::name_to_path -name $name] + db_dml update_url_name {} + } + db_dml add_url_name_nn {} + } + } +} Index: openacs-4/packages/layout-manager/tcl/apm-callback-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/apm-callback-procs.xql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/tcl/apm-callback-procs.xql 19 Jan 2010 22:52:47 -0000 1.1 @@ -0,0 +1,34 @@ + + + + + + + alter table layout_pages add url_name varchar(100) + + + + + + select page_id, name + from layout_pages + + + + + + update layout_pages + set url_name = :url_name + where page_id = :page_id + + + + + + alter table layout_pages + constraint l_pages_pageset_id_name_un + unique (url_name, name, pageset_id) + + + + Index: openacs-4/packages/layout-manager/tcl/element-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/element-procs.tcl,v diff -u -N -r1.6 -r1.7 --- openacs-4/packages/layout-manager/tcl/element-procs.tcl 5 Dec 2008 13:46:38 -0000 1.6 +++ openacs-4/packages/layout-manager/tcl/element-procs.tcl 19 Jan 2010 22:52:48 -0000 1.7 @@ -12,7 +12,7 @@ ad_proc layout::element::new { -package_id:required - {-page_id ""} + -page_id:required {-page_column ""} {-state full} -includelet_name:required Index: openacs-4/packages/layout-manager/tcl/install-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/install-procs.tcl,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/layout-manager/tcl/install-procs.tcl 5 Dec 2008 13:46:39 -0000 1.1 +++ openacs-4/packages/layout-manager/tcl/install-procs.tcl 19 Jan 2010 22:52:48 -0000 1.2 @@ -69,7 +69,7 @@ set page_template [apm_attribute_value -default 2_column $node page-template] set cmd layout::page::new - foreach param {pageset_id name page_template} { + foreach param {pageset_id name url_name page_template} { lappend cmd -$param [set $param] } set page_id [eval $cmd] Index: openacs-4/packages/layout-manager/tcl/page-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/page-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/layout-manager/tcl/page-procs.tcl 5 Dec 2008 13:46:39 -0000 1.3 +++ openacs-4/packages/layout-manager/tcl/page-procs.tcl 19 Jan 2010 22:52:48 -0000 1.4 @@ -12,16 +12,22 @@ ad_proc layout::page::new { -pageset_id:required -name:required + {-url_name ""} {-page_template 2_column} {-theme ""} } { Create a new page and associate it with the given page set. @param pageset_id The id of the page set the new page will be bound to. - @param name The page name (used for navigation). + @param name The human-friendly page name. + @param url_name The page name to use for navigation. If blank, it will be automatically + generated from the name. @param page_template The page template to use to render this page. } { set page_id [db_nextval layout_seq] + if { $url_name eq "" } { + set url_name [util::name_to_path -name $name] + } db_dml insert_page {} layout::pageset::flush -pageset_id $pageset_id return $page_id Index: openacs-4/packages/layout-manager/tcl/page-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/page-procs.xql,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/layout-manager/tcl/page-procs.xql 5 Dec 2008 13:46:39 -0000 1.3 +++ openacs-4/packages/layout-manager/tcl/page-procs.xql 19 Jan 2010 22:52:48 -0000 1.4 @@ -5,8 +5,8 @@ insert into layout_pages - (page_id, name, pageset_id, page_template, theme, sort_key) - select :page_id, :name, :pageset_id, :page_template, :theme, + (page_id, name, url_name, pageset_id, page_template, theme, sort_key) + select :page_id, :name, :url_name, :pageset_id, :page_template, :theme, coalesce(max(sort_key) + 1, 0) from layout_pages where pageset_id = :pageset_id @@ -73,6 +73,7 @@ update layout_pages set name = :name, + url_name = :url_name, pageset_id = :pageset_id, page_template = :page_template, sort_key = :sort_key, Index: openacs-4/packages/layout-manager/tcl/pageset-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/tcl/pageset-procs.tcl,v diff -u -N -r1.4 -r1.5 --- openacs-4/packages/layout-manager/tcl/pageset-procs.tcl 5 Dec 2008 13:46:39 -0000 1.4 +++ openacs-4/packages/layout-manager/tcl/pageset-procs.tcl 19 Jan 2010 22:52:48 -0000 1.5 @@ -62,7 +62,8 @@ layout::page::new \ -pageset_id $pageset_id \ -name [lindex $page 0] \ - -page_template [lindex $page 1] + -url_name [lindex $page 1] \ + -page_template [lindex $page 2] } } db_flush_cache -cache_key_pattern pageset_id_${package_id}_${owner_id}* @@ -429,7 +430,7 @@ ad_proc layout::pageset::initialize { -package_id - {-page_list {{{Page 1} 2_column}}} + {-page_list {{{Page 1} page-1 2_column}}} } { Initialize this instance of the page set package if we've not already done so. This consists of creating the master template, which is assigned to party 0 and will be Index: openacs-4/packages/layout-manager/www/index.vuh =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/www/index.vuh,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/www/index.vuh 19 Jan 2010 22:52:48 -0000 1.1 @@ -0,0 +1,29 @@ +ad_page_contract { + + Map a pretty url, if given, for a layout managed page to a page number. In all + cases, internally redirect to the index template. + + @author Don Baccus (dhogaza@pacifier.com) + @creation-date 2004-01-02 + @version $Id: index.vuh,v 1.1 2010/01/19 22:52:48 donb Exp $ + +} + +set package_id [layout::package_id] +set pageset_id [layout::pageset::get_user_pageset_id -package_id $package_id] + +rp_form_put package_id $package_id +rp_form_put pageset_id $pageset_id + +set url_name [string trim [ad_conn extra_url] "/"] + +if { [ad_conn extra_url] ne "" } { + if { [db_0or1row -cache_key pageset_${pageset_id}_vuh_[ad_conn extra_url] get_page_id {}] } { + rp_form_put page_num $page_num + } else { + ns_returnnotfound + ad_script_abort + } +} + +rp_internal_redirect serve Index: openacs-4/packages/layout-manager/www/index.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/www/index.xql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/www/index.xql 19 Jan 2010 22:52:48 -0000 1.3 @@ -0,0 +1,14 @@ + + + + + + + select sort_key as page_num + from layout_pages + where url_name = :url_name + and pageset_id = :pageset_id + + + + Index: openacs-4/packages/layout-manager/www/serve.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/www/serve.adp,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/www/serve.adp 19 Jan 2010 22:52:48 -0000 1.1 @@ -0,0 +1,11 @@ + + + + + + + +@page_num@ +@pageset_id@ + + Index: openacs-4/packages/layout-manager/www/serve.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/layout-manager/www/serve.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/layout-manager/www/serve.tcl 19 Jan 2010 22:52:48 -0000 1.1 @@ -0,0 +1,32 @@ +ad_page_contract { + + Display the user's page set for the current subsite. + + @author Don Baccus (dhogaza@pacifier.com) + @creation-date 2004-01-02 + @version $Id: serve.tcl,v 1.1 2010/01/19 22:52:48 donb Exp $ + +} { + {page_num:naturalnum,optional 0} + package_id:naturalnum,notnull + pageset_id:naturalnum +} + +set master_template [parameter::get -package_id [ad_conn subsite_id] -parameter DefaultMaster] + +# Check to see if this instance of the layout manager has been initialized, and if not, +# start up the wizard if the user's got admin rights on the package. +if { $pageset_id eq "" } { + if { [permission::permission_p -object_id $package_id -privilege admin] } { + ad_returnredirect [site_node::get_url_from_object_id -object_id $package_id]admin/layouts + ad_script_abort + } else { + ad_return_exception_template \ + -params {{custom_message "[_ layout-manager.uninitialized]"}} \ + /packages/acs-subsite/www/shared/report-error + } +} + +permission::require_permission -privilege read -object_id $pageset_id +ad_return_template +