As a workaround for missing content-repository functionality, copy a provided file into the directory for tcl files:
cp /var/lib/aolserver/service0/packages/acs-core-docs/www/files/note-procs.tcl /var/lib/aolserver/service0/packages/myfirstpackage/tcl/To make this file take effect, go to the APM and choose "Reload changed" for "MyFirstPackage".
Each user-visible page in your package has, typically, three parts. The tcl file holds the procedural logic for the page, including TCL and database-independent SQL code, and does things like check permissions, invoke the database queries, and modify variables, and the adp page holds html. The -postgres.xql and -oracle.xql files contains database-specific SQL. The default page in any directory is index, so we'll build that first, starting with the tcl file:
[service0 postgresql]$ cd /var/lib/aolserver/service0/myfirstpackages/www [service0 www]$ emacs index.tcl
Paste this into the file.
ad_page_contract {
This is the main page for the package. It displays all of the Notes and provides links to edit them and to create new Notes.
@author Your Name (you@example.com)
@cvs-id $Id: tutorial-pages.html,v 1.20 2004/02/20 15:13:42 joela Exp $
}
set page_title [ad_conn instance_name]
set context [list]
template::list::create \
-name notes \
-multirow notes \
-actions { "Add a Note" note-edit} \
-elements {
edit {
link_url_col edit_url
display_template {
<img src="/resources/acs-subsite/Edit16.gif" width="16" height="16" border="0">
}
sub_class narrow
}
title {
label "Title"
}
delete {
link_url_col delete_url
display_template {
<img src="/resources/acs-subsite/Delete16.gif" width="16" height="16" border="0">
}
sub_class narrow
}
}
db_multirow \
-extend {
edit_url
delete_url
} notes notes_select {
select ci.item_id,
n.title
from cr_items ci,
mfp_notesx n
where n.revision_id = ci.live_revision
} {
set edit_url [export_vars -base "note-edit" {item_id}]
set delete_url [export_vars -base "note-delete" {item_id}]
}
Now index.adp:
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<listtemplate name="notes"></listtemplate>
Now we create the add/edit page. If note_id is passed in, it edits that note. Otherwise, it presents a form for adding notes. Edit note-edit.tcl:
ad_page_contract {
This is the view-edit page for notes.
@author Your Name (you@example.com)
@cvs-id $Id: tutorial-pages.html,v 1.20 2004/02/20 15:13:42 joela Exp $
@param item_id If present, assume we are editing that note. Otherwise, we are creating a new note.
} {
item_id:integer,optional
}
ad_form -name note -form {
{item_id:key}
{title:text {label Title}}
} -new_request {
permission::require_permission -object_id [ad_conn package_id] -privilege create
set page_title "Add a Note"
set context [list $page_title]
} -edit_request {
permission::require_write_permission -object_id $item_id
mfp::note::get \
-item_id $item_id \
-array note_array
set title $note_array(title)
set page_title "Edit a Note"
set context [list $page_title]
} -new_data {
mfp::note::add \
-title $title \
-item_id $item_id
set message "Note $title added"
} -edit_data {
mfp::note::edit \
-item_id $item_id \
-title $title
set message "Note $title changed"
} -after_submit {
ad_returnredirect -message $message "."
ad_script_abort
} And note-edit.adp:
<master> <property name="title">@page_title;noquote@</property> <property name="context">@context;noquote@</property> <property name="focus">note.title</property> <formtemplate id="note"></formtemplate>
And the delete page. Since it has no UI, there is only a tcl page, and no adp page. Edit note-delete.tcl:
ad_page_contract {
This deletes a note
@author Your Name (you@example.com)
@cvs-id $Id: tutorial-pages.html,v 1.20 2004/02/20 15:13:42 joela Exp $
@param item_id The item_id of the note to delete
} {
item_id:integer
}
permission::require_write_permission -object_id $item_id
set title [item::get_title $item_id]
mfp::note::delete -item_id $item_id
ad_returnredirect -message "Item $title deleted." "."