Commit ac5bafea authored by Frank Bergmann's avatar Frank Bergmann

- Comitting OpenACS 5.9

parent f4fe528c
......@@ -6,22 +6,23 @@
<pretty-plural>Site-Wide Administration Services</pretty-plural>
<initial-install-p>t</initial-install-p>
<singleton-p>t</singleton-p>
<implements-subsite-p>f</implements-subsite-p>
<inherit-templates-p>t</inherit-templates-p>
<version name="5.7.0" url="http://openacs.org/repository/download/apm/acs-admin-5.7.0.apm">
<version name="5.10.0d1" url="http://openacs.org/repository/download/apm/acs-admin-5.10.0d1.apm">
<owner url="mailto:dhogaza@pacifier.com">Don Baccus</owner>
<summary>An interface for Site-wide administration of an OpenACS Installation.</summary>
<maturity>3</maturity>
<release-date>2011-06-12</release-date>
<release-date>2013-09-08</release-date>
<vendor url="http://openacs.org">OpenACS</vendor>
<license url="http://www.gnu.org/copyleft/gpl.html">GPL</license>
<maturity>3</maturity>
<description format="text/html">Provides a UI for administering site-wide services
(including package installation, cache, authentication, and user accounts) for an OpenACS system.
</description>
<license>GPL</license>
<maturity>3</maturity>
<provides url="acs-admin" version="5.7.0"/>
<requires url="acs-kernel" version="5.7.0"/>
<requires url="acs-mail-lite" version="5.7.0"/>
<provides url="acs-admin" version="5.10.0d1"/>
<requires url="acs-kernel" version="5.10.0d1"/>
<requires url="acs-mail-lite" version="5.10.0d1"/>
<callbacks>
</callbacks>
......@@ -31,7 +32,3 @@
</version>
</package>
This diff is collapsed.
......@@ -63,7 +63,7 @@ ad_form -extend -name update -form {
# Continue
}
old_password_bad {
if { ![exists_and_not_null old_password] } {
if { (![info exists old_password] || $old_password eq "") } {
form set_error update password_old $result(password_message)
} else {
# This hack causes the form to reload as if submitted, but with the old password showing
......
......@@ -9,6 +9,53 @@ ad_library {
# Only run this if this is openacs.org
#ad_schedule_proc -thread t -schedule_proc ns_schedule_daily [list 0 0] apm_build_repository
# we register the following filters only during startup, since
# existing connection threads are not aware of the throttle object.
if {[ns_server connections] == 0} {
#
# Register the filter progs for url statistics.
# The methods to be called have the name of the filter type.
#
ns_register_filter trace GET /repository/* repository-download
if {[info commands ::xo::db::require] ne ""} {
::xo::db::require table apm_package_downloads {
time timestamp
ip text
user_id integer
channel text
package text
version text
url text
}
ad_proc ::repository_log_to_db {} {
set ip [ns_conn peeraddr]
set user_id [ad_conn user_id]
set url [ns_conn url]
if {[regexp {^/repository/([^/]+)/(.*)-([^-]+).apm$} [ns_conn url] _ channel package version]} {
::xo::dc dml record_package_download \
"insert into apm_package_downloads(time, ip, user_id, channel, package, version, url) \
values (now(), :ip, :user_id, :channel, :package, :version, :url)"
}
}
}
ad_proc ::repository-download {args} {
} {
ns_log notice "::repository-download called with <$args> [ad_conn user_id] <[ns_conn url]> [ns_conn peeraddr]"
set f [open $::acs::rootdir/log/apm.log a]
puts $f "[clock format [clock seconds]]\t[ns_conn peeraddr]\t[ad_conn user_id]\t[ns_conn url]"
close $f
if {[catch {::repository_log_to_db} errorMsg]} {
ns_log error "repository-download: $errorMsg"
}
return filter_ok
}
}
......
This diff is collapsed.
......@@ -6,18 +6,6 @@ ad_library {
@cvs-id $Id$
}
aa_register_case -cats smoke acs_admin_trivial_smoke_test {
Minimal smoke test for acs-admin package.
} {
aa_run_with_teardown \
-rollback \
-test_code {
set header_result [apm_header]
aa_true "apm_header returns a non-null string?" [exists_and_not_null header_result]
}
}
aa_register_case -cats {api smoke} apm_higher_version_installed_p {
Test apm_higher_version_installed_p proc.
} {
......
......@@ -162,7 +162,7 @@ foreach channel [lsort -decreasing [array names channel_tag]] {
set package_key [lindex [file split $spec_file] end-1]
set version_id [apm_version_id_from_package_key $package_key]
if { [lsearch -exact $exclude_package_list $package_key] != -1 } {
if {$package_key in $exclude_package_list} {
ns_write "Package $package_key is on list of packages to exclude - skipping"
continue
}
......@@ -177,7 +177,7 @@ foreach channel [lsort -decreasing [array names channel_tag]] {
with_catch errmsg {
array set version [apm_read_package_info_file $spec_file]
if { [lsearch -exact $packages $version(package.key)] != -1 } {
if {$version(package.key) in $packages} {
ns_write "<li>Skipping package $package_key, because we already have another version of it"
} else {
lappend packages $version(package.key)
......@@ -224,7 +224,7 @@ foreach channel [lsort -decreasing [array names channel_tag]] {
# The path to the 'packages' directory in the checkout
set packages_root_path [eval file join [lrange [file split $spec_file] 0 end-2]]
set tmp_filename [ns_tmpnam]
set tmp_filename [ad_tmpnam]
lappend cmd --files-from $tmp_filename -C $packages_root_path
set fp [open $tmp_filename w]
......
......@@ -7,7 +7,7 @@ ad_page_contract {
@creation-date 17 April 2000
@cvs-id $Id$
} {
version_id:integer
version_id:naturalnum,notnull
paths:multiple
{return_url ""}
}
......
......@@ -13,8 +13,9 @@
<fullquery name="apm_table">
<querytext>
select v.version_id, v.package_key, t.pretty_name, v.version_name, v.enabled_p,
v.installed_p, v.distribution_uri,
select v.version_id, v.package_key, t.pretty_name, v.version_name,
to_char(v.release_date, 'YYYY-MM-DD') as release_date
v.enabled_p, v.installed_p, v.distribution_uri,
(select count(*) from apm_package_versions v2
where v2.package_key = v.package_key
and v2.installed_p = 't'
......@@ -26,8 +27,8 @@
end as tarball_p
from apm_package_versions v, apm_package_types t
where t.package_key = v.package_key
[ad_dimensional_sql $dimensional_list where and]
[ad_order_by_from_sort_spec $orderby $table_def]
$filter_where_clause
[template::list::orderby_clause -name package_list -orderby]
</querytext>
</fullquery>
......
......@@ -5,8 +5,9 @@
<fullquery name="apm_table">
<querytext>
select v.version_id, v.package_key, t.pretty_name, v.version_name, v.enabled_p,
v.installed_p, v.distribution_uri,
select v.version_id, v.package_key, t.pretty_name, v.version_name,
to_char(v.release_date, 'YYYY-MM-DD') as release_date,
v.enabled_p, v.installed_p, v.distribution_uri,
(select count(*) from apm_package_versions v2
where v2.package_key = v.package_key
and v2.installed_p
......@@ -19,9 +20,8 @@
end as tarball_p
from apm_package_versions v, apm_package_types t
where t.package_key = v.package_key
[ad_dimensional_sql $dimensional_list where and]
[ad_order_by_from_sort_spec $orderby $table_def]
$filter_where_clause
[template::list::orderby_clause -orderby -name package_list]
</querytext>
</fullquery>
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
@body;noquote@
<div style="margin: 0 auto;">
@dimensional_list;noquote@
</div>
<h3>Packages</h3>
<div style='text-align: right;'>
@reload_filter;noquote@
</div>
<listtemplate name="package_list"></listtemplate>
<ul>
<li><a href="package-add">Create a new package.</a>
<li><a href="write-all-specs">Write new specification files for all installed, locally generated packages.</a>
<li><a href="package-load">Load a new package from a URL or local directory.</a>
<li><a href="packages-install">Install packages.</a>
</ul>
@watches_html;noquote@
<h3>Help</h3>
<blockquote>
<p>A package is <b>enabled</b> if it is scheduled to run at server startup
and is deliverable by the request processor.
</p>
<p>If a Tcl library file (<tt>*-procs.tcl</tt>) or query file (<tt>*.xql</tt>) is being
<b>watched</b>, the request processor monitors it, reloading it into running interpreters
whenever it is changed. This is useful during development
(so you don't have to restart the server for your changes to take
effect). To watch a file, click its package key above, click <i>Manage file
information</i> on the next screen, and click <i>watch</i> next to
the file's name on the following screen.
</blockquote>
......@@ -6,20 +6,20 @@ ad_page_contract {
@author Jon Salz (jsalz@arsdigita.com)
@cvs-id $Id$
} {
{ orderby "package_key" }
{ owned_by "everyone" }
{ orderby:token "package_key" }
{ owned_by:word "everyone" }
{ supertype "all" }
{ reload_links_p 0 }
{ reload_links_p:boolean 0 }
}
set page_title "Package Manager"
set context [list [list "../developer" "Developer's Administration"] $page_title]
set user_id [ad_get_user_id]
set user_id [ad_conn user_id]
# Determine the user's email address. If its not registered, put in a default.
set my_email [db_string email_by_user_id {
select email from parties where party_id = :user_id
select email from parties where party_id = :user_id
} -default "me"]
set dimensional_list {
......@@ -31,7 +31,6 @@ set dimensional_list {
}
}
{
owned_by "Owned by:" everyone {
{ me "Me" {where "[db_map everyone]"} }
{ everyone "Everyone" {where "1 = 1"} }
......@@ -39,131 +38,113 @@ set dimensional_list {
}
{
status "Status:" latest {
{
latest "Latest" {where "[db_map latest]" }
}
{ all "All" {where "1 = 1"} }
{latest "Latest" {where "[db_map latest]" } }
{all "All" {where "1 = 1"} }
}
}
}
# "latest" means that a version is installed or enabled, or there is no more latest version
# which is installed or enabled. Basically, any relevant package on the system.
set filter_where_clause [ad_dimensional_sql $dimensional_list where and]
set dimensional_list [ad_dimensional $dimensional_list]
set missing_text "<strong>No packages match criteria.</strong>"
append body "<center><table><tr><td>[ad_dimensional $dimensional_list]</td></tr></table></center>"
set missing_text "No packages match criteria."
set use_watches_p [expr {![parameter::get -package_id [ad_acs_kernel_id] -parameter PerformanceModeP -default 1]}]
set table_def {
{ package_key "Key" "" "<td><a href=\"[export_vars -base version-view { version_id }]\">$package_key</a></td>" }
{ pretty_name "Name" "" "<td><a href=\"[export_vars -base version-view { version_id }]\">$pretty_name</a></td>" }
{ version_name "Ver." "" "" }
{
status "Status" "" {<td align=center>&nbsp;&nbsp;[eval {
if { $installed_p eq "t" } {
if { $enabled_p eq "t" } {
template::list::create -name package_list \
-multirow packages \
-no_data $missing_text \
-key package_key \
-elements {
package_key {
label "Key"
link_url_col package_url
orderby "package_key"
}
pretty_name {
label "Name"
link_url_col package_url
orderby "pretty_name"
}
version_name {
label "Ver."
orderby "version_name"
}
release_date {
label "Released"
orderby "release_date"
}
status {
label "Status"
}
maintained {
label "Maintained"
}
action {
label ""
display_template {@packages.action_html;noquote@}
}
} -filters {owned_by {} supertype {} status {}}
set performance_p [parameter::get -package_id [ad_acs_kernel_id] -parameter PerformanceModeP -default 1]
set reload_links_p [ad_decode [ns_set iget [rp_getform] reload_links_p] \
"" 0 [ns_set iget [rp_getform] reload_links_p]]
db_multirow -extend {package_url maintained status action_html} packages apm_table {} {
set package_url [export_vars -base version-view {version_id}]
set maintained [ad_decode $distribution_uri "" "Locally" "Externally"]
if { $installed_p == "t" } {
if { $enabled_p == "t" } {
set status "Enabled"
} else {
set status "Disabled"
}
} elseif { $superseded_p } {
} elseif { $superseded_p } {
set status "Superseded"
} else {
} else {
set status "Uninstalled"
}
format $status
}]&nbsp;&nbsp;</td>}
}
{ maintained "Maintained" "" {<td align=center>[ad_decode $distribution_uri "" "Locally" "Externally"]</td>} }
{
action "" "" {<td>&nbsp;&nbsp;[eval {
set file_link_list [list]
lappend file_link_list "<a href=\"version-files?version_id=$version_id\">view files</a>"
if { $installed_p eq "t" && $enabled_p eq "t" } {
if {![parameter::get -package_id [ad_acs_kernel_id] -parameter PerformanceModeP -default 1]} {
lappend file_link_list "<a href=\"package-watch?package_key=$package_key\">watch all files</a>"
}
set reload_links_p [ad_decode [ns_set iget [rp_getform] reload_links_p] \
"" 0 [ns_set iget [rp_getform] reload_links_p]]
if { !$reload_links_p || [string equal [apm_version_load_status $version_id] "needs_reload"]} {
lappend file_link_list "<a href=\"version-reload?version_id=$version_id\">reload changed</a>"
}
}
set format_string [join $file_link_list " | "]
format $format_string
}]&nbsp;&nbsp;</td>}
}
set file_link_list [list]
lappend file_link_list "<a href=\"version-files?version_id=$version_id\">view files</a>"
if { $installed_p == "t" && $enabled_p == "t" } {
if {!$performance_p} {
lappend file_link_list "<a href=\"package-watch?package_key=$package_key\">watch all files</a>"
}
if { !$reload_links_p || [apm_version_load_status $version_id] eq "needs_reload"} {
lappend file_link_list "<a href=\"version-reload?version_id=$version_id\">reload changed</a>"
}
}
set action_html [join $file_link_list " | "]
}
doc_body_flush
set table [ad_table -Torderby $orderby -Tmissing_text $missing_text "apm_table" "" $table_def]
db_release_unused_handles
# The reload links make the page slow, so make them optional
set page_url "[ad_conn url]?[export_vars -url {orderby owned_by supertype}]"
set page_url [export_vars -base [ad_conn url] {orderby owned_by supertype}]
set href [export_vars -base [ad_conn url] {orderby owned_by supertype reload_links_p}]
if { $reload_links_p } {
set reload_filter "<a href=\"$page_url&reload_links_p=0\">Do not check for changed files</a>"
set reload_filter "<a href=\"[ns_quotehtml $href]\">Do not check for changed files</a>"
} else {
set reload_filter "<a href=\"$page_url&reload_links_p=1\">Check for changed files</a>"
set reload_filter "<a href=\"[ns_quotehtml $href]\">Check for changed files</a>"
}
append body "<h3>Packages</h3>
<table width=\"100%\">
<tr><td align=\"right\">$reload_filter</td</tr>
</table>
$table
<ul>
<li><a href=\"package-add\">Create a new package.</a>
<li><a href=\"write-all-specs\">Write new specification files for all installed, locally generated packages</a>
<li><a href=\"package-load\">Load a new package from a URL or local directory.</a>
<li><a href=\"packages-install\">Install packages</a> (<font color=red>Warning</font>: Installing new packages can break your system. Please make sure you know what you are doing.)
</ul>
"
# Build the list of files we're watching.
set watches_html ""
if { $use_watches_p } {
set watch_files [nsv_array names apm_reload_watch]
if { [llength $watch_files] > 0 } {
append body "<h3>Watches</h3><ul>
append watches_html "<h3>Watches</h3><ul>
<li><a href=\"file-watch-cancel\">Stop watching all files</a></li><br>"
foreach file [lsort $watch_files] {
if {$file ne "." } {
append body "<li>$file (<a href=\"file-watch-cancel?watch_file=[ns_urlencode $file]\">stop watching this file</a>)\n"
append watches_html "<li>$file (<a href=\"file-watch-cancel?watch_file=[ns_urlencode $file]\">stop watching this file</a>)\n"
}
}
append body "</ul>\n"
append watches_html "</ul>\n"
}
} else {
set kernel_id [ad_acs_kernel_id]
append body "<h3>Watches</h3>
Watching of files is not enabled in performance mode (see the PerformanceModeP parameter on the <a href=\"/admin/site-map/parameter-set?package_id=$kernel_id&package_key=acs-kernel&section_name=all\">ACS Kernel parameter page</a>)"
append watches_html "<h3>Watches</h3>
Watching of files is not enabled in performance mode (see the PerformanceModeP parameter on the <a href=\"/shared/parameters?package_id=$kernel_id&return_url=$page_url\">ACS Kernel parameter page</a>)"
}
append body "
<h3>Help</h3>
<blockquote>
A package is <b>enabled</b> if it is scheduled to run at server startup
and is deliverable by the request processor.
<p>If a Tcl library file (<tt>*-procs.tcl</tt>) or query file (<tt>*.xql</tt>) is being
<b>watched</b>, the request processor monitors it, reloading it into running interpreters
whenever it is changed. This is useful during development
(so you don't have to restart the server for your changes to take
effect). To watch a file, click its package key above, click <i>Manage file
information</i> on the next screen, and click <i>watch</i> next to
the file's name on the following screen.
</blockquote>
"
<?xml version="1.0"?>
<queryset>
<fullquery name="email_by_user_id">
<querytext>
select email
from parties
where party_id = :user_id
</querytext>
</fullquery>
<partialquery name="apm_application">
<querytext>
t.package_type = 'apm_application'
......
......@@ -9,10 +9,10 @@ ad_page_contract {
pretty_name
pretty_plural
{ package_type "apm_application"}
{ initial_install_p "f" }
{ singleton_p "f" }
{ implements_subsite_p f }
{ inherit_templates_p t }
{ initial_install_p:boolean "f" }
{ singleton_p:boolean "f" }
{ implements_subsite_p:boolean f }
{ inherit_templates_p:boolean t }
{ auto_mount "" }
package_uri
version_name
......@@ -26,9 +26,9 @@ ad_page_contract {
{ owner_uri:multiple}
{ vendor [db_null] }
{ vendor_uri [db_null] }
{ install_p 0 }
{implements_subsite_p "f"}
{inherit_templates_p "f"}
{ install_p:boolean 0 }
{implements_subsite_p:boolean "f"}
{inherit_templates_p:boolean "f"}
} -validate {
package_key_format -requires {package_key} {
if { [regexp {[^a-z0-9-]} $package_key] } {
......@@ -145,5 +145,4 @@ db_transaction {
ad_script_abort
}
db_release_unused_handles
ad_returnredirect "version-view?version_id=$version_id"
This diff is collapsed.
......@@ -9,16 +9,19 @@ ad_page_contract {
version_id:naturalnum
}
apm_version_info $version_id
doc_body_append "[apm_header [list "version-view?version_id=$version_id" "$pretty_name $version_name"] "Deinstall"]"
set title "Deinstall"
set context [list [list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
$title]
db_transaction {
doc_body_append "<ul>"
apm_package_deinstall -callback apm_doc_body_callback $package_key
doc_body_append "</ul>"
append body "<ul>\n"
set ::__apm_body ""
apm_package_deinstall -callback apm_body_callback $package_key
append body $::__apm_body
append body "</ul>\n"
} on_error {
if {![apm_version_installed_p $version_id] } {
ad_return_complaint 1 "Database Error: The database returned the following error
......@@ -26,13 +29,11 @@ db_transaction {
}
}
doc_body_append "
<p>
Return to the <a href=\"index\">index</a>.
[ad_footer]
"
append body {
<p>Return to the <a href='index'>index</a>
}
ad_return_template apm
......@@ -13,26 +13,39 @@ ad_page_contract {
if {![apm_version_installed_p $version_id]} {
doc_body_append "[apm_header "Package Deleted."]
The version you have indicated has been deleted.<p>
Return to the <a href=\"index\">index</a>.
[ad_footer]
"
ad_script_abort
set title "Package Deleted"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
set body {The version you have indicated has been deleted.<p>
Return to the <a href="index">index</a>.
}
} else {
apm_version_info $version_id
set title "Delete"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
set body ""
set ::__apm_body ""
if { [catch {apm_package_delete \
-sql_drop_scripts $sql_drop_scripts \
-remove_files=0 \
-callback apm_body_callback $package_key} errmsg] } {
append body [subst {
We encountered the following error when deleting package "$package_key":
<pre><blockquote>[ad_quotehtml $errmsg]</blockquote></pre>
}]
append body $::__apm_body
} else {
append body {
</ul>
<p>You should restart the server now to make sure the memory footprint
and cache of the package is cleared out. <a href="../server-restart">Click here</a>
to restart the server now.</p>
}
}
}
apm_version_info $version_id
ad_return_template apm
doc_body_append [apm_header "Delete"]
if { [catch {apm_package_delete -sql_drop_scripts $sql_drop_scripts -remove_files=0 -callback apm_doc_body_callback $package_key} errmsg] } {
doc_body_append "We encountered the following error when deleting package \"$package_key\":
<pre><blockquote>[ad_quotehtml $errmsg]</blockquote></pre>"
}
doc_body_append "
</ul>
<p>
<p>You should restart the server now to make sure the memory footprint and cache of the package is cleared out. <a href=\"../server-restart\">Click here</a> to restart the server now.</p>
[ad_footer]
"
......@@ -28,15 +28,17 @@ select package_key
}]
if { [llength $dependent_packages_list] > 0 } {
set dependency_warning_text "
The following packages depend on package <code>$package_key</code> that you are about to delete:
set dependency_warning_text "The following packages depend on package
<code>$package_key</code> that you are about to delete:\n<ul>\n"
foreach pkg_key $dependent_packages_list {
set query [export_vars { {package_key $pkg_key}}]
append dependency_warning_text [subst {
<li>$pkg_key (<a href="./version-view?$query">manage</a>)</li>
}]
}
append dependency_warning_text "</ul>\n"
<p>
<code>
[join $dependent_packages_list "<br>"]
</code>
</p>
"
} else {
set dependency_warning_text ""
}
......@@ -47,7 +49,7 @@ set initial_install_p [db_string initial_install_p {
where package_key = :package_key
}]
if {$initial_install_p eq "t"} {
if {$initial_install_p == "t"} {
set kernel_deletion_warning "
<p>
You are about to delete package <code>$package_key</code> which is part of the <b>OpenACS core</b>
......@@ -76,7 +78,7 @@ $dependency_warning_text
}
set file_list ""
foreach file [apm_get_package_files -package_key $package_key -file_types data_model_drop] {
foreach file [apm_get_package_files -package_key $package_key -file_types data_model_drop -include_data_model_files] {
append file_list " <tr>
<td><input type=checkbox name=\"sql_drop_scripts\" value=$file checked></td>
<td>$file</td>
......@@ -92,22 +94,25 @@ $file_list
</table>"
}
set body "[apm_header -form "action=\"package-delete-2\" method=\"post\"" [list "version-view?version_id=$version_id" "$pretty_name $version_name"] "Delete"]
$warning_text
<p>Deleting a package removes all record of it from the APM's database.</p>
set title "Delete"
set context [list [list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
$title]
<p>
[export_form_vars version_id]
$file_list
set body [subst {
<form action='package-delete-2' method='post'>
$warning_text
<p>Deleting a package removes all record of it from the APM's database.</p>
<p>
<input type=submit value=\"Delete Package\">
</form>
[ad_footer]"
[export_vars -form {version_id}]
$file_list
<p>
<input type="submit" value="Delete Package">
</form>
}]
doc_return 200 text/html $body
ad_return_template apm
......@@ -27,56 +27,44 @@ if {$delete} {
file delete -force [apm_workspace_install_dir]
}
ad_return_top_of_page "[apm_header -form "package-load" [list "package-load" "Load a New Package"] "View Package Contents"]
"
set title "Contents of Loaded Package"
set context [list [list "." "Package Manager"] [list "package-load" "Load a New Package"] $title]
set template [parameter::get -package_id [ad_conn subsite_id] -parameter StreamingHead]
ad_return_top_of_page [ad_parse_template -params [list context title] $template]
if {$file_path eq ""} {
#
# delete potential leading "http://"
#
if {[string range $url 0 6] eq "http://"} {
set url [string range $url 7 end]
}
ns_write "
<ul>
<li>Downloading <a href=\"http://$url\">http://$url</a>..."
if { [catch {
# Open a destination file.
set file_path [ns_tmpnam].apm
set fileChan [open $file_path w+ 0600]
# Open the channel to the server.
set httpChan [lindex [ns_httpopen GET "http://$url"] 0]
ns_log Debug "APM: Copying data from $url"
# Copy the data
fcopy $httpChan $fileChan
# Clean up.
ns_log Debug "APM: Done copying data."
close $httpChan
close $fileChan
} errmsg] } {
ns_write "Unable to download. Please check your URL.</ul>.
The following error was returned: <blockquote><pre>[ad_quotehtml $errmsg]
</pre></blockquote>[ad_footer]"
return
}
ns_write "<ul>"
set url_param "-url http://$url"
} else {
ns_write "
Accessing $file_path...
<p>
<ul>
"
set url_param ""
}
ns_log Debug "APM: Loading $file_path"
# If file_path ends in .apm, then load the single package.
if { ![string compare [string range $file_path [expr {[string length $file_path] -3}] end] "apm"] } {
apm_load_apm_file -callback apm_ns_write_callback $file_path
if { [file extension $file_path] eq "apm" || $url_param ne ""} {
apm_load_apm_file {*}$url_param -callback apm_ns_write_callback $file_path
} else {
# See if this is a directory.
if { [file isdirectory $file_path] } {
#Find all the .APM and load them.
set apm_file_list [glob -nocomplain "$file_path/*.apm"]
if {$apm_file_list eq ""} {
ns_write "The directory specified, <code>$file_path</code>, does not contain any APM files. Please <a href=\"package-load\">try again</a>.[ad_footer]"
ns_write [subst {
The directory specified, <code>$file_path</code>, does not contain any APM files.
Please <a href="package-load">try again</a>
}]
return
} else {
foreach apm_file $apm_file_list {
......@@ -88,15 +76,13 @@ if { ![string compare [string range $file_path [expr {[string length $file_path]
} else {
# Not sure what to do... stop.
ns_write "The specified file path is not an APM file or a directory. Please try
entering a new file path.[ad_footer]"
entering a new file path."
return
}
}
ns_write "
ns_write [subst {
</ul>
The package(s) are now extracted into your filesystem. You can <a href=\"package-load\">load
another new package</a> from a URL or proceed to <a href=\"packages-install\">install</a> the package(s).
[ad_footer]
"
The package(s) are now extracted into your filesystem. You can <a href="package-load">load
another new package</a> from a URL or proceed to <a href="packages-install">install</a> the package(s).
}]
......@@ -6,30 +6,8 @@ ad_page_contract {
} {
}
doc_body_append "[apm_header -form "action=package-load-2" "Load a New Package"]
<p>
You can retrieve a package archive to prepare for installation by using
one of the options below.
Otherwise, please specify a filesystem location for the packages you want to install.
You can also copy the extracted package files directly into the <code>[acs_root_dir]/packages/</code> directory if you prefer.
<p>
"
set title "Load a New Package"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
doc_body_append "
Load a package from the <tt>.apm</tt> file at this URL:
<blockquote>http:// <input name=url size=50></blockquote><p>
"
doc_body_append "
Specify a local path including a filename for the APM file or a directory containing several APM files.<p>
<blockquote>Path: <input name=file_path size=50></blockquote>
<p>
<input type=checkbox name=delete value=1>Check this box if you want to delete all of the packages
currently in the installation directory.<p>
<center><input type=submit value=Load></blockquote></center>
[ad_footer]
"
This diff is collapsed.
......@@ -8,21 +8,18 @@ ad_page_contract {
} {
}
set pkg_install_list [ad_get_client_property apm pkg_install_list]
set body ""
append body "[apm_header "Package Installation"]
<h2>Select Data Model Scripts to Run</h2>
<p>
Check all the files you want to be loaded into the database.<p>
<form action=\"packages-install-4\" method=\"post\">
"
set title "Package Installation"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
set body {
<h2>Select Data Model Scripts to Run</h2>
<p>
Check all the files you want to be loaded into the database.<p>
<form action="packages-install-4" method="post">
}
set sql_file_list [list]
set file_count 0
foreach pkg_info $pkg_install_list {
foreach pkg_info [ad_get_client_property apm pkg_install_list] {
set package_key [pkg_info_key $pkg_info]
set package_path [pkg_info_path $pkg_info]
......@@ -32,59 +29,70 @@ foreach pkg_info $pkg_install_list {
# Determine if we are upgrading or installing.
if { [apm_package_upgrade_p $package_key $final_version_name] == 1} {
ns_log Debug "Upgrading package [string totitle $version(package-name)] to $final_version_name."
set upgrade_p 1
set initial_version_name [db_string apm_package_upgrade_from {
select version_name from apm_package_versions
where package_key = :package_key
and version_id = apm_package.highest_version(:package_key)
} -default ""]
ns_log Debug "Upgrading package [string totitle $version(package-name)] to $final_version_name."
set upgrade_p 1
set initial_version_name [db_string apm_package_upgrade_from {
select version_name from apm_package_versions
where package_key = :package_key
and version_id = apm_package.highest_version(:package_key)
} -default ""]
} else {
set upgrade_p 0
set initial_version_name ""
set upgrade_p 0
set initial_version_name ""
}
# Find out which script is appropriate to be run.
set data_model_in_package 0
set table_rows ""
set data_model_files [apm_data_model_scripts_find \
-upgrade_from_version_name $initial_version_name \
-upgrade_to_version_name $final_version_name \
-package_path $package_path \
$package_key]
-upgrade_from_version_name $initial_version_name \
-upgrade_to_version_name $final_version_name \
-package_path $package_path \
$package_key]
set sql_file_list [concat $sql_file_list $data_model_files]
if {$data_model_files ne ""} {
foreach file $data_model_files {
set path [lindex $file 0]
set file_type [lindex $file 1]
append table_rows " <tr>
<td><input type=checkbox checked name=\"sql_file\" value=\"$file_count\"></td>
<td>$path</td>
<td>[apm_pretty_name_for_file_type $file_type]</td>
</tr>"
incr file_count
}
if { [empty_string_p $version(auto-mount)] && [string equal $version(package.type) apm_application] } {
set mount_html "<input type=\"checkbox\" name=\"mount_p\" value=\"$version(package.key)\" checked> Mount package under the main site at path <input type=\"text\" name=\"mount_path.$version(package.key)\" value=\"$version(package.key)\">"
foreach file $data_model_files {
set path [lindex $file 0]
set file_type [lindex $file 1]
append table_rows [subst {
<tr>
<td><input type="checkbox" checked name="sql_file" value="$file_count"></td>
<td>$path</td>
<td>[apm_pretty_name_for_file_type $file_type]</td>
</tr>
}]
incr file_count
}
if { $version(auto-mount) eq ""
&& $version(package.type) eq "apm_application"
} {
set mount_html [subst {
<div>
<input type="checkbox" name="mount_packages" value="$version(package.key)" checked>
Mount package under the main site at path
<input type="text" name="mount_path.$version(package.key)" value="$version(package.key)">
</div>
}]
} else {
set mount_html ""
}
append body "
Select what data files to load for $version(package-name) $final_version_name
<blockquote>
<table cellpadding=3 cellspacing=3>
<tr>
append body [subst {
<p>Select what data files to load for $version(package-name) $final_version_name
<blockquote>
<table cellpadding='3' cellspacing='3' class='list-table'>
<tr>
<th>Load</th>
<th>File Name</th>
<th>File Type</th>
</tr>
$table_rows
</table>
$mount_html
</blockquote> <p>"
<th>File Name</th>
<th>File Type</th>
</tr>
$table_rows
</table>
$mount_html
</blockquote> <p>
}]
}
}
......@@ -95,10 +103,16 @@ if {$sql_file_list eq ""} {
ad_script_abort
}
append body "
<input type=submit value=\"Install Packages\">
</form>
[ad_footer]
"
append body {
<input type=submit value="Install Packages">
</form>
}
ad_return_template apm
#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
# indent-tabs-mode: nil
# End:
doc_return 200 text/html $body
......@@ -7,7 +7,7 @@ ad_page_contract {
@cvs-id $Id$
} {
{sql_file:multiple ""}
{mount_p:multiple ""}
{mount_packages:multiple ""}
{mount_path:array ""}
}
......@@ -15,12 +15,22 @@ set pkg_install_list [ad_get_client_property apm pkg_install_list]
set pkg_enable_list [ad_get_client_property apm pkg_enable_list]
set sql_file_paths [ad_get_client_property apm sql_file_paths]
ReturnHeaders
ns_write "[apm_header "Package Installation"]
<h2>Installing packages...</h2>
<p>
<ul>
"
set title "Package Installation"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
set template [parameter::get -package_id [ad_conn subsite_id] \
-parameter StreamingHead \
-default /packages/openacs-default-theme/lib/plain-streaming-head]
ad_return_top_of_page [ad_parse_template -params [list context title] $template]
ns_write {
<h2>Installing packages...</h2>
<script>var myInterval = setInterval(function(){window.scrollTo(0,document.body.scrollHeight)}, 300);
</script>
<p>
<ul>
}
# We have a set of SQL files that need to be sourced at the appropriate time.
set sql_files [list]
......@@ -43,6 +53,7 @@ foreach pkg_info $pkg_install_list {
}
if {[apm_package_version_installed_p $version(package.key) $version(name)] } {
ns_log notice "===== ALREADY-installed $version(package.key)"
# Already installed.
continue
}
......@@ -60,7 +71,10 @@ foreach pkg_info $pkg_install_list {
}
# Mount path of package
if { [lsearch $mount_p $package_key] != -1 && [info exists mount_path($package_key)] && $mount_path($package_key) ne "" } {
if { $package_key in $mount_packages
&& [info exists mount_path($package_key)]
&& $mount_path($package_key) ne ""
} {
set selected_mount_path $mount_path($package_key)
} else {
set selected_mount_path ""
......@@ -69,24 +83,40 @@ foreach pkg_info $pkg_install_list {
# Install the packages.
ns_log Debug "APM: Installing package at $package_path."
set enable_p [expr {[lsearch -exact $pkg_enable_list $package_key] != -1}]
#set enable_p [expr {$package_key in $pkg_enable_list}]
set enable_p 1
if {[catch {
ns_log notice "===== INSTALL $version(package.key)"
set version_id [apm_package_install \
-enable=$enable_p \
-package_path $package_path \
-callback apm_ns_write_callback \
-load_data_model \
-data_model_files $data_model_files \
-mount_path $selected_mount_path \
$spec_file]
if {[file exists $::acs::rootdir/packages/$version(package.key)/install.xml]} {
ns_log notice "===== RUN /packages/$version(package.key)/install.xml"
apm::process_install_xml /packages/$version(package.key)/install.xml ""
}
ns_log notice "===== INSTALL $version(package.key) DONE"
set version_id [apm_package_install \
-enable=$enable_p \
-package_path $package_path \
-callback apm_ns_write_callback \
-load_data_model \
-data_model_files $data_model_files \
-mount_path $selected_mount_path \
$spec_file]
} errorMsg]} {
ns_write "Error: $errorMsg\n"
ns_write [ns_quotehtml $::errorInfo]
set version_id 0
}
if { $version_id == 0 } {
# Installation of the package failed and we shouldn't continue with installation
# as there might be packages depending on the failed package. Ideally we should
# probably check for such dependencies and continue if there are none.
ns_write "</ul>
[ad_footer]"
ns_write {
</ul>
<script>window.scrollTo(0,document.body.scrollHeight);clearInterval(myInterval);</script>
}
ad_script_abort
}
......@@ -94,16 +124,18 @@ foreach pkg_info $pkg_install_list {
}
if {$installed_count < 1} {
ns_write "</ul>
All packages in this directory have already been installed.
Please return to the <a href=\"index\">index</a>.<p>
[ad_footer]"
return
ns_write {
</ul>
All packages in this directory have already been installed.
Please return to the <a href="index">index</a>.<p>
}
} else {
ns_write "</ul><p>
Done installing packages.
<p>You should restart the server now to make installed and upgraded packages available. <a href=\"../server-restart\">Click here</a> to restart the server now.</p>
[ad_footer]
"
ns_write {</ul><p>
Done installing packages.
<p>You should restart the server now to make installed and upgraded packages available.
<a href="../server-restart">Click here</a> to restart the server now.</p>
}
}
ns_write {
<script>window.scrollTo(0,document.body.scrollHeight);clearInterval(myInterval);</script>
}
......@@ -9,16 +9,19 @@ ad_page_contract {
{checked_by_default_p:boolean 0}
}
ad_return_top_of_page "[apm_header "Package Installation"]
<p>Please wait while the installer searches your system for packages to install ...<p>
set title "Package Installation"
set context [list [list "/acs-admin/apm/" "Package Manager"] $title]
"
### Get all the spec files
# If a package is in the apm_workspace dir then we assume that that is the package that
# should be installed and we ignore any such package in the packages dir.
#
# If a package is in the apm_workspace dir then we assume that that is
# the package that should be installed and we ignore any such package
# in the packages dir.
#
# TODO: make sure that it's a later version than that in the packages dir?
set packages_root_dir "[acs_root_dir]/packages"
#
set packages_root_dir "$::acs::rootdir/packages"
set packages_spec_files [apm_scan_packages $packages_root_dir]
set workspace_spec_files [apm_scan_packages [apm_workspace_install_dir]]
set workspace_filenames [list]
......@@ -28,7 +31,7 @@ foreach spec_path $workspace_spec_files {
set all_spec_files $workspace_spec_files
foreach spec_path $packages_spec_files {
set spec_filename [file tail $spec_path]
if { [lsearch -exact $workspace_filenames $spec_filename] == -1 } {
if {$spec_filename ni $workspace_filenames} {
lappend all_spec_files $spec_path
}
}
......@@ -51,58 +54,59 @@ foreach spec_file $all_spec_files {
lappend spec_files $spec_file
} else {
ns_log Notice "need upgrade of package $package_key $version_name"
lappend already_installed_list "Package &quot;$package_name&quot; ($package_key) version $version_name or higher is already installed."
lappend already_installed_list \
"Package $package_name ($package_key): version $version_name or higher is already installed."
}
} else {
lappend spec_files $spec_file
}
} else {
lappend not_compatible_list "Package &quot;$package_name&quot; ($package_key) doesn't support [db_type]."
lappend not_compatible_list "Package $package_name ($package_key): doesn't support [db_type]."
}
}
apm_log APMDebug $spec_files
ns_write "Done.
<p>
<font color=red>Warning</font>: Installing new packages can break your system. Please make sure you know what you are doing.
<p>
"
set body ""
if { $spec_files eq "" } {
# No spec files to work with.
ns_write "
<h2>No New Packages to Install</h2><p>
append body [subst {
<h2>No New Packages to Install</h2><p>
There are no new packages to install. Please load some
using the <a href=\"package-load\">Package Loader</a>.<p>
Return to the <a href=\"index\">APM</a>.<p>
"
There are no new packages to install. Please load some
using the <a href="package-load">Package Loader</a>.<p>
Return to the <a href="index">APM</a>.<p>
}]
} else {
ns_write "
<h2>Select Packages to Install</h2><p>
<p>Please select the set of packages you'd like to install.</p>"
append body {
<h2>Select Packages to Install</h2><p>
<p>Please select the set of packages you'd like to install.</p>
}
ns_write "
set formName "pkgsForm"
append body [subst {
<script type=\"text/javascript\">
function uncheckAll() {
for (var i = 0; i < [expr {[llength $spec_files] }]; ++i)
document.forms\[0\].elements\[i\].checked = false;
this.href='';
}
function checkAll() {
for (var i = 0; i < [expr {[llength $spec_files] }]; ++i)
document.forms\[0\].elements\[i\].checked = true;
this.href='';
}
</script>
<a href=\"packages-install?checked_by_default_p=0\" onclick=\"javascript:uncheckAll();return false\"><b>uncheck all boxes</b></a> |
<a href=\"packages-install?checked_by_default_p=1\" onclick=\"javascript:checkAll(); return false\"><b>check all boxes</b></a>
"
<script type="text/javascript">
function uncheckAll() {
var install_form = document.getElementsByName('$formName')\[0\];
for (var i = 0; i < [llength $spec_files]; ++i)
install_form.elements\[i\].checked = false;
this.href='';
}
function checkAll() {
var install_form = document.getElementsByName('$formName')\[0\];
for (var i = 0; i < [llength $spec_files]; ++i)
install_form.elements\[i\].checked = true;
this.href='';
}
</script>
<a href="packages-install?checked_by_default_p=0" onclick="javascript:uncheckAll();return false"><b>uncheck all boxes</b></a> |
<a href="packages-install?checked_by_default_p=1" onclick="javascript:checkAll(); return false"><b>check all boxes</b></a>
}]
ns_write "<form action=packages-install-2 method=post>"
append body "<form name='$formName' action='packages-install-2' method='post'>\n"
# Client properties do not deplete the limited URL variable space.
# But they are limited to the maximum length of a varchar ...
......@@ -114,44 +118,43 @@ function checkAll() {
set pkg_key_list [list]
apm_log APMDebug "APM: Specification files available: $spec_files"
foreach spec_file $spec_files {
### Parse the package.
if { [catch {
array set package [apm_read_package_info_file $spec_file]
} errmsg] } {
lappend errors "<li>Unable to parse $spec_file. The following error was generated:
<blockquote><pre>[ad_quotehtml $errmsg]</pre></blockquote><p>"
} else {
apm_log APMDebug "APM: Adding $package(package.key) to list for installation."
lappend pkg_info_list [pkg_info_new $package(package.key) $spec_file \
$package(embeds) $package(extends) $package(provides) $package(requires) ""]
### Parse the package.
if { [catch {
array set package [apm_read_package_info_file $spec_file]
} errmsg] } {
lappend errors "<li>Unable to parse $spec_file. The following error was generated:
<blockquote><pre>[ad_quotehtml $errmsg]</pre></blockquote><p>"
} else {
apm_log APMDebug "APM: Adding $package(package.key) to list for installation."
lappend pkg_info_list [pkg_info_new $package(package.key) $spec_file \
$package(embeds) $package(extends) $package(provides) $package(requires) ""]
lappend pkg_key_list $package(package.key)
}
}
}
if { $checked_by_default_p } {
set widget [apm_package_selection_widget $pkg_info_list $pkg_key_list $pkg_key_list]
set widget [apm_package_selection_widget $pkg_info_list $pkg_key_list]
} else {
set widget [apm_package_selection_widget $pkg_info_list]
}
if {$widget eq ""} {
ns_write "There are no new packages available.<p>
[ad_footer]"
ad_script_abort
append body "There are no new packages available."
ad_script_abort
}
ns_write $widget
ns_write "
<input type=submit value=\"Next -->\">
</form>
"
append body $widget
append body [subst {
<div><input type="submit" value="Next -->"></div>
</form>
}]
if {$errors ne ""} {
ns_write "The following errors were generated
<ul>
$errors
</ul>
"
append body "The following errors were generated
<ul>
$errors
</ul>
"
}
}
......@@ -162,9 +165,11 @@ if { [llength $not_compatible_list] > 0 } {
if { [llength $already_installed_list] > 0 } {
ns_log Notice "APM packages-install: Already Installed Packages\n- [join $already_installed_list "\n- "]"
}
ns_write "
[ad_footer]
"
ad_return_template apm
#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
# indent-tabs-mode: nil
# End:
......@@ -11,26 +11,25 @@ ad_page_contract {
}
if { [db_string apm_archive_exist_p {
select count(*)
from cr_revisions
where revision_id = (select content_item.get_latest_revision(item_id)
select count(*)
from cr_revisions
where revision_id = (select content_item.get_latest_revision(item_id)
from apm_package_versions
where version_id = :version_id)
where version_id = :version_id)
} -default 0] } {
set file [ns_tmpnam]
set file [ad_tmpnam]
db_blob_get_file apm_archive_serve "
select content
from cr_revisions
where revision_id = (select content_item.get_latest_revision(item_id)
from apm_package_versions
where version_id = :version_id)
" -file $file
db_release_unused_handles
db_blob_get_file apm_archive_serve {
select content
from cr_revisions
where revision_id = (select content_item.get_latest_revision(item_id)
from apm_package_versions
where version_id = :version_id)
} -file $file
ns_returnfile 200 application/octet-stream $file
} else {
ad_return_complaint "No Archive Available" "There is no APM archive for the version you requested."
ad_return_complaint "No Archive Available" "There is no APM archive for the version you requested."
}
......
......@@ -18,7 +18,7 @@ ad_page_contract {
{max_n_values:integer 1}
} -validate {
datatype_type_ck {
if {$datatype != "number" && $datatype != "string" && $datatype != "text"} {
if {$datatype ne "number" && $datatype ne "string" && $datatype ne "text"} {
ad_complain
}
}
......@@ -51,7 +51,7 @@ db_transaction {
}
# LARS hack
set sections [lindex [lindex [apm_parameter_section_slider $package_key] 0] 3]
set sections [lindex [apm_parameter_section_slider $package_key] 0 3]
foreach section $sections {
if {$section_name eq [lindex $section 1]} {
set section_name [lindex $section 0]
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
@body;noquote@
......@@ -8,20 +8,27 @@ ad_page_contract {
{section_name ""}
}
set user_id [ad_get_user_id]
set user_id [ad_conn user_id]
set parameter_id [db_nextval acs_object_id_seq]
db_1row apm_get_name {}
db_release_unused_handles
db_1row apm_get_name {
select package_key, pretty_name, version_name
from apm_package_version_info
where version_id = :version_id
}
set page_title "Add Parameter"
set context [list [list "." "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] [list [export_vars -base version-parameters { version_id }] "Parameters"] $page_title]
set title "Add Parameter"
set context [list \
[list "." "Package Manager"] \
[list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] \
[list [export_vars -base version-parameters { version_id }] "Parameters"] \
$title]
append body "
<form action=\"parameter-add-2\" method=\"post\">
append body [subst {
<form action="parameter-add-2" method="post">
<blockquote>
<table>
[export_form_vars package_key parameter_id version_id]
[export_vars -form {package_key parameter_id version_id}]
<tr>
<td></td>
......@@ -32,8 +39,8 @@ plain text string that identifies the parameter.
</tr>
<tr>
<th align=right nowrap>Parameter Name:</th>
<td><input name=parameter_name size=50></td>
<th align="right" nowrap>Parameter Name:</th>
<td><input name="parameter_name" size="50"></td>
</tr>
<tr>
......@@ -42,33 +49,35 @@ plain text string that identifies the parameter.
</tr>
<tr valign=top>
<th align=right><br>Description:</th>
<td><textarea name=description cols=60 rows=8></textarea>
<th align="right"><br>Description:</th>
<td><textarea name="description" cols="60" rows="8"></textarea>
</td>
</tr>
<tr>
<td></td>
<td>You may enter a section name to identify the parameter. For example, the ACS Kernel has a \"security\" section
to indicate which parameters pertain to security.
<td>You may enter a section name to identify the parameter.
For example, the ACS Kernel has a "security" section
to indicate which parameters pertain to security.
</tr>
<tr valign=top>
<th align=right><br>Section Name:</th>
<td><input name=section_name size=50 value=\"[ad_quotehtml $section_name]\"><br>
<tr valign="top">
<th align="right"><br>Section Name:</th>
<td><input name="section_name" size="50" value="[ad_quotehtml $section_name]"><br>
</td>
</tr>
<tr>
<td></td>
<td>Please indicate if the parameter is of \"global\" (has one system-wide value) or \"instance\" (a vlue for each package instance) scope.<br>
<td>Please indicate if the parameter is of "global" (has one system-wide value)
or "instance" (a value for each package instance) scope.<br>
</td>
</tr>
<tr>
<th align=right nowrap>Scope:</th>
<td><select name=scope>
<th align="right" nowrap>Scope:</th>
<td><select name="scope">
[ad_generic_optionlist {instance global} {instance global}]
</select>
</td>
......@@ -80,8 +89,8 @@ to indicate which parameters pertain to security.
</tr>
<tr>
<th align=right nowrap>Type:</th>
<td><select name=datatype>
<th align="right" nowrap>Type:</th>
<td><select name="datatype">
[ad_generic_optionlist {number string textarea} {number string text}]
</select>
</td>
......@@ -96,15 +105,15 @@ to indicate which parameters pertain to security.
<tr>
<th align=right nowrap>Default:</th>
<td><input name=default_value size=50></td>
<td><input name="default_value" size="50"></td>
</tr>
<tr><th colspan=2><input type=submit value=\"Add Parameter\"></th>
<tr><th colspan="2"><input type="submit" value="Add Parameter"></th>
</tr>
</table>
</blockquote>
</form>
"
}]
ad_return_template apm
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<formtemplate id="del"></formtemplate>
......@@ -12,12 +12,12 @@ ad_page_contract {
db_1row apm_package_by_version_id {
select pretty_name, version_name, package_key
from apm_package_version_info
where version_id = :version_id
from apm_package_version_info
where version_id = :version_id
}
# LARS hack
set sections [lindex [lindex [apm_parameter_section_slider $package_key] 0] 3]
set sections [lindex [apm_parameter_section_slider $package_key] 0 3]
foreach section $sections {
if {$section_name eq [lindex $section 1]} {
set section_name [lindex $section 0]
......@@ -50,6 +50,8 @@ ad_form -name del -form {
} -cancel_url $return_url
set page_title "Confirm Deletion"
set context [list [list "." "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] [list [export_vars -base version-parameters { version_id section_name }] "Parameters"] $page_title]
set context [list [list "." "Package Manager"] \
[list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] \
[list [export_vars -base version-parameters { version_id section_name }] "Parameters"] \
$page_title]
ad_return_template
......@@ -17,7 +17,7 @@ ad_page_contract {
{max_n_values:integer 1}
} -validate {
datatype_type_ck {
if {$datatype != "number" && $datatype != "string" && $datatype != "text"} {
if {$datatype ne "number" && $datatype ne "string" && $datatype ne "text"} {
ad_complain
}
}
......@@ -39,7 +39,7 @@ The database returned the following error:<p>
}
# LARS hack
set sections [lindex [lindex [apm_parameter_section_slider $package_key] 0] 3]
set sections [lindex [apm_parameter_section_slider $package_key] 0 3]
foreach section $sections {
if {$section_name eq [lindex $section 1]} {
set section_name [lindex $section 0]
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
@body;noquote@
......@@ -8,9 +8,6 @@ ad_page_contract {
version_id:notnull,naturalnum
}
set user_id [ad_conn user_id]
db_1row param_info {
select parameter_name, datatype, description, default_value, min_n_values, max_n_values, parameter_id,
section_name, default_value
......@@ -24,16 +21,18 @@ db_1row apm_get_name {
where version_id = :version_id
}
db_release_unused_handles
set page_title "Edit Parameter"
set context [list [list "." "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] [list [export_vars -base version-parameters { version_id }] "Parameters"] $page_title]
set title "Edit Parameter"
set context [list \
[list "." "Package Manager"] \
[list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] \
[list [export_vars -base version-parameters { version_id }] "Parameters"] \
$title]
append body "
<form action=\"parameter-edit-2\" method=\"post\">
append body [subst {
<form action="parameter-edit-2" method="post">
<blockquote>
<table>
[export_form_vars package_key parameter_id version_id]
[export_vars -form {package_key parameter_id version_id}]
<tr>
<td></td>
......@@ -44,8 +43,8 @@ plain text string that identifies the parameter.
</tr>
<tr>
<th align=right nowrap>Parameter Name:</th>
<td><input name=parameter_name size=50 value=\"[ad_quotehtml $parameter_name]\"></td>
<th aligh="right" nowrap>Parameter Name:</th>
<td><input name="parameter_name" size="50" value="[ad_quotehtml $parameter_name]"></td>
</tr>
<tr>
......@@ -54,20 +53,20 @@ plain text string that identifies the parameter.
</tr>
<tr valign=top>
<th align=right><br>Description:</th>
<td><textarea name=description cols=60 rows=8>[ad_quotehtml $description]</textarea>
<th aligh="right"><br>Description:</th>
<td><textarea name="description" cols="60" rows="8">[ad_quotehtml $description]</textarea>
</td>
</tr>
<tr>
<td></td>
<td>You may enter a section name to identify the parameter. For example, the ACS Kernel has a \"security\" section
<td>You may enter a section name to identify the parameter. For example, the ACS Kernel has a "security" section
to indicate which parameters pertain to security.
</tr>
<tr valign=top>
<th align=right><br>Section Name:</th>
<td><input name=section_name value=\"[ad_quotehtml $section_name]\" size=50><br>
<th aligh="right"><br>Section Name:</th>
<td><input name="section_name" value="[ad_quotehtml $section_name]" size=50><br>
</td>
</tr>
......@@ -78,8 +77,8 @@ to indicate which parameters pertain to security.
</tr>
<tr>
<th align=right nowrap>Type:</th>
<td><select name=datatype>
<th aligh="right" nowrap>Type:</th>
<td><select name="datatype">
[ad_generic_optionlist {number string "textarea"} {number string text} $datatype]
</select>
</td>
......@@ -93,17 +92,15 @@ to indicate which parameters pertain to security.
</tr>
<tr>
<th align=right nowrap>Default:</th>
<td><input name=default_value size=50 value=\"[ad_quotehtml $default_value]\"></td>
<th aligh="right" nowrap>Default:</th>
<td><textarea name="default_value" cols="60" rows="[expr {$datatype eq "text" ? 8 : 1}]">[ad_quotehtml $default_value]</textarea>
</tr>
<tr><th colspan=2><input type=submit value=\"Edit Parameter\"></th>
<tr><th colspan=2><input type="submit" value="Edit Parameter"></th>
</tr>
</table>
</blockquote>
</form>
[ad_footer]
"
}]
ad_return_template apm
<h2>OpenACS @channel@ Core and compatibile packages</h2>
<p>Packages can be installed with the OpenACS Automated Installer on
your OpenACS site at <code>/acs-admin/install</code>. Only packages
designated compatible with your OpenACS kernel will be shown.</p>
<table border="1" cellpadding="4" cellspacing="0">
<tr>
<th>Package</th>
<th>Status</th>
<th>Description</th>
</tr>
<multiple name="packages">
<multiple name="pkgs">
<tr>
<td style="border-color:gray; text-align:center" valign="center" >
<b>@packages.pretty_name@</b>
<td style="text-align:center;" valign="center" width="120">
<a href="/xowiki/@pkgs.package_key@">@pkgs.package_key@</a>
</td>
<td>
@packages.maturity@: @packages.maturity_text@<br>
<a href="@packages.license_url@">@packages.license@</a>
<td style="border-color:gray;">
<b>@pkgs.pretty_name@:</b><br><em>@pkgs.summary@</em>
<p>@pkgs.description;noquote@
<p><small>@pkgs.package_key@ @pkgs.version@ released @pkgs.release_date@
<if @pkgs.license@ not nil>
on
<if @pkgs.license_url@ not nil><a href="@pkgs.license_url@">@pkgs.license@</a></if>
<else>@pkgs.license@</else>
license
</if>
<if @pkgs.vendor@ not nil> by @pkgs.vendor@</if>
<if @pkgs.maturity@ not nil><br>@pkgs.maturity@: @pkgs.maturity_text@</if>
</small>
</td>
<td style="border-color:gray">
<b>@packages.summary@</b>
<br>@packages.description;noquote@
<br><small>@packages.package_key@ @packages.version@ released @packages.release_date@ by @packages.vendor@</small>
</td>
</tr>
</multiple>
</table>
<h2>OpenACS Package Repository</h2>
<p> Available channels. </p>
<ul>
<multiple name="channels">
<li><a href="@channels.name@/">@channels.name@</a></li>
<li><a href="@channels.name@/">@channels.name@</a> (@channels.tag@)</li>
</multiple>
</ul>
Updated: @update_pretty_date@
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<formtemplate id="callback"></formtemplate>
......@@ -6,13 +6,13 @@ ad_page_contract {
@creation-date 28 January 2003
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
{type ""}
}
db_1row package_version_info "select pretty_name, version_name from apm_package_version_info where version_id = :version_id"
set return_url "version-callbacks?[export_vars { version_id }]"
set return_url [export_vars -base version-callbacks { version_id }]
# Set default values for type and proc name
if { $type eq "" } {
......@@ -65,12 +65,12 @@ ad_form -name callback -cancel_url $return_url -form {
} -validate {
{proc
{ ![empty_string_p [info procs ::${proc}]] }
{The specified procedure name does not exist. Is the -procs.tcl file loaded?}
{ {info commands ::$proc} ne "" }
{The specified procedure name does not exist. Is the -procs.tcl file loaded?}
}
{proc
{ [apm_callback_has_valid_args -type $type -proc_name $proc] }
{The callback proc $proc must be defined with ad_proc [ad_decode [apm_arg_names_for_callback_type -type $type] "" "and should take no arguments" "and have the following required switches: [apm_arg_names_for_callback_type -type $type]"]}
{ [apm_callback_has_valid_args -type $type -proc_name $proc] }
{The callback proc $proc must be defined with ad_proc [ad_decode [apm_arg_names_for_callback_type -type $type] "" "and should take no arguments" "and have the following required switches: [apm_arg_names_for_callback_type -type $type]"]}
}
} -on_submit {
......
......@@ -4,7 +4,7 @@ ad_page_contract {
@creation-date 28 January 2003
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
type:notnull
}
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<if @result@ not nil>
<h2>Output</h2>
......
......@@ -5,13 +5,13 @@ ad_page_contract {
@creation-date 11 September 2003
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
type:notnull
}
db_1row package_version_info "select pretty_name, version_name from apm_package_version_info where version_id = :version_id"
set return_url "version-callbacks?[export_vars { version_id }]"
set return_url [export_vars -base version-callbacks { version_id }]
# Set default values for type and proc name
set proc_value [apm_get_callback_proc -type $type -version_id $version_id]
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<p><listtemplate name="callbacks"></listtemplate></p>
<p><listtemplate name="callbacks"></listtemplate>
<h3>Help</h3>
......@@ -24,13 +24,13 @@
process depending on which version you're upgrading from and to.
</p>
<table cellspacing="1" cellpadding="4" bgcolor="#999999">
<tr bgcolor="white">
<table cellspacing="1" cellpadding="4" style="background: #999999">
<tr style="background: white">
<th>Callback</th>
<th>Parameters</th>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
before-install
</td>
......@@ -39,7 +39,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
after-install
</td>
......@@ -48,7 +48,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
before-upgrade
</td>
......@@ -58,7 +58,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
after-upgrade
</td>
......@@ -68,7 +68,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
before-uninstall
</td>
......@@ -77,7 +77,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
after-instantiate
</td>
......@@ -86,7 +86,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
before-uninstantiate
</td>
......@@ -95,7 +95,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
after-mount
</td>
......@@ -105,7 +105,7 @@
</td>
</tr>
<tr bgcolor="white">
<tr style="background: white">
<td>
before-unmount
</td>
......
......@@ -4,7 +4,7 @@ ad_page_contract {
@creation-date 28 January 2003
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
}
db_1row package_version_info "select pretty_name, version_name from apm_package_version_info where version_id = :version_id"
......
......@@ -31,7 +31,7 @@
v.version_id dep_version_id, d.dependency_type as dep_type
from apm_package_versions v, apm_package_dependencies d, apm_package_types t
where d.service_uri = :service_uri
and d.dependency_type = in ($other_dependency_in)
and d.dependency_type in ($other_dependency_in)
and d.version_id = v.version_id
and t.package_key = v.package_key
and apm_package_version.sortable_version_name(d.service_version)
......
......@@ -4,14 +4,17 @@ ad_page_contract {
@creation-date 17 April 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
}
db_1row apm_package_info_by_version_id {}
db_1row apm_package_info_by_version_id {}
doc_body_append "[apm_header [list "version-view?version_id=$version_id" "$pretty_name $version_name"] "Dependencies"]
"
set title "Dependencies"
set context [list \
[list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
$title]
set body ""
foreach dependency_type { provide require extend embed } {
......@@ -21,13 +24,17 @@ foreach dependency_type { provide require extend embed } {
} else {
set dependency_type_prep_2 ${dependency_type}ed
}
doc_body_append "<h3>Services [string totitle $dependency_type_prep_2]</h3><ul>\n"
append body [subst {
<h3>Services [string totitle $dependency_type_prep_2]</h3>
<ul>
}]
db_foreach apm_all_dependencies {} {
doc_body_append "<li>[string totitle $dependency_type_prep] service $service_uri, version $service_version"
append body "<li>[string totitle $dependency_type_prep] service $service_uri, version $service_version "
if { $dependency_type ne "provide" } {
doc_body_append "(<a href=\"version-dependency-remove?[export_url_vars package_key dependency_id version_id dependency_type]\">remove</a>)\n"
set href [export_vars -base version-dependency-remove {package_key dependency_id version_id dependency_type}]
append body [subst {(<a href="[ns_quotehtml $href]">remove</a>)}]
}
# If this package provides a service, show a list of all packages that require it,
......@@ -42,31 +49,34 @@ foreach dependency_type { provide require extend embed } {
db_foreach apm_specific_version_dependencies {} {
incr counter
if { $counter == 1 } {
doc_body_append "<ul>\n"
append body "<ul>\n"
}
switch $dep_type {
provides { set dep_d provided }
requires { set dep_d required }
extends { set dep_d extended }
embeds { set dep_d embeds }
}
doc_body_append "<li>[string totitle $dep_d] by <a href=\"version-view?version_id=$dep_version_id\">$dep_pretty_name, version $dep_version_name</a>\n"
}
set href [export_vars -base version-view {{version_id $dep_version_id}}]
append body [subst {
<li>[string totitle $dep_d] by <a href="[ns_quotehtml $href]">$dep_pretty_name,
version $dep_version_name</a>
}]
}
if { $counter != 0 } {
doc_body_append "</ul>\n"
}
append body "</ul>\n"
}
} else {
doc_body_append "<li>This package does not $dependency_type any services.\n"
append body "<li>This package does not $dependency_type any services.\n"
}
if { $installed_p eq "t" && $dependency_type ne "provide"} {
doc_body_append "<li><a href=\"version-dependency-add?[export_url_vars version_id dependency_type]\">Add a service $dependency_type_prep_2 by this package</a>\n"
if { $installed_p == "t" && $dependency_type ne "provide"} {
append body [subst {
<li><a href="[ns_quotehtml [export_vars -base version-dependency-add {version_id dependency_type}]]">Add
a service $dependency_type_prep_2 by this package</a>
}]
}
doc_body_append "</ul>\n"
append body "</ul>\n"
}
db_release_unused_handles
doc_body_append "
</ul>
[ad_footer]
"
ad_return_template apm
......@@ -5,7 +5,7 @@ ad_page_contract {
@cvs-id $Id$
} {
{dependency_id:naturalnum}
{version_id:integer}
{version_id:naturalnum,notnull}
dependency_type
service:notnull
our_package_key:notnull
......@@ -50,4 +50,4 @@ db_transaction {
}
}
ad_returnredirect "version-dependencies?[export_url_vars version_id]"
ad_returnredirect [export_vars -base version-dependencies {version_id}]
......@@ -4,7 +4,7 @@ ad_page_contract {
@creation-date 17 April 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
dependency_type
}
......@@ -12,26 +12,33 @@ db_1row apm_package_info_by_version_id_and_package {}
set dependency_id [db_nextval acs_object_id_seq]
doc_body_append "[apm_header -form "action=version-dependency-add-2" [list "version-view?version_id=$version_id" "$pretty_name $version_name"] [list "version-dependencies?version_id=$version_id" "Dependencies"] "Add a Dependency"]
set title "Add a Dependency"
set context [list \
[list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
[list "version-dependencies?version_id=$version_id" "Dependencies"] \
$title]
[export_vars -form {version_id dependency_type dependency_id {our_package_key $package_key}}]
set body [subst {
<form action='version-dependency-add-2' method='post'>
[export_vars -form {version_id dependency_type dependency_id {our_package_key $package_key}}]
$pretty_name ${dependency_type}s the following service:
<p>
<select name=service size=8>
"
<p>$pretty_name ${dependency_type}s the following service:
<p>
<select name="service" size="20">
}]
db_foreach apm_packages {} {
doc_body_append "<option value=\"$package_key;$version_name\">$package_key, version $version_name\n"
append body [subst {
<option value="$package_key;$version_name">$package_key, version $version_name
}]
}
append body [subst {
</select>
<br>
<input type="submit" value="Add Dependency">
</form>
}]
db_release_unused_handles
doc_body_append "</select>
<br>
<input type=submit value=\"Add Dependency\">
[ad_footer]
"
ad_return_template apm
......@@ -4,8 +4,7 @@
<fullquery name="apm_package_info_by_version_id_and_package">
<querytext>
select p.package_key, p.package_uri,
p.pretty_name, v.version_name
select p.package_key, p.package_uri, p.pretty_name, v.version_name
from apm_package_types p, apm_package_versions v
where v.version_id = :version_id
and v.package_key = p.package_key
......
......@@ -4,8 +4,8 @@ ad_page_contract {
@creation-date 17 April 2000
@cvs-id $Id$
} {
{version_id:integer}
{dependency_id:integer}
{version_id:naturalnum,notnull}
{dependency_id:naturalnum,notnull}
dependency_type:notnull
package_key:notnull
}
......@@ -23,7 +23,7 @@ db_transaction {
}
default {
ad_return complaint 1 "Dependency Entry Error: Depenendencies are either interfaces or requirements."
ad_return_complaint 1 "Dependency Entry Error: Depenendencies are either interfaces or requirements."
}
}
apm_package_install_spec $version_id
......@@ -32,5 +32,5 @@ db_transaction {
<blockquote><pre>[ad_quotehtml $errmsg]</pre></blockquote>"
}
ad_returnredirect "version-dependencies?[export_url_vars version_id]"
ad_returnredirect [export_vars -base version-dependencies {version_id}]
......@@ -4,7 +4,7 @@ ad_page_contract {
@creation-date 17 April 2000
@cvs-id $Id$
} {
version_id:integer
version_id:naturalnum,notnull
}
apm_version_disable -callback apm_dummy_callback $version_id
......
......@@ -17,7 +17,7 @@ ad_page_contract {
vendor_uri
{auto_mount ""}
{release_date ""}
{ upgrade_p 0 }
{ upgrade_p:boolean 0 }
}
# Validate dynamic package version attributes
......@@ -29,7 +29,7 @@ foreach attribute_name [array names all_attributes] {
set attribute_value [ns_set iget [rp_getform] $attribute_name]
if { [info exists attribute(validation_proc)] } {
set attribute_error [eval $attribute(validation_proc) $attribute_value]
set attribute_error [$attribute(validation_proc) $attribute_value]
if { $attribute_error ne "" } {
ad_return_complaint 1 $attribute_error
......
......@@ -7,14 +7,26 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
}
db_1row apm_all_version_info {}
db_1row apm_all_version_info {
select version_id, package_key, package_uri, pretty_name, version_name,
version_uri, auto_mount, summary, description_format, description, release_date,
vendor, vendor_uri, enabled_p, installed_p, tagged_p, imported_p,
data_model_loaded_p, activation_date, tarball_length,
deactivation_date, distribution_uri, distribution_date, singleton_p,
initial_install_p, implements_subsite_p, inherit_templates_p
from apm_package_version_info where version_id = :version_id
}
doc_body_append "[apm_header -form "action=\"version-edit-2\" method=post" [list "version-view?version_id=$version_id" "$pretty_name $version_name"] "Edit a Version"]
set title "Edit a Version"
set context [list \
[list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
$title]
"
set body "<form action='version-edit-2' method='post'>"
# If the version name is incorporated into the version URL (it will almost always be!)
# then generate some JavaScript to automatically update the version URL when the
......@@ -22,24 +34,24 @@ doc_body_append "[apm_header -form "action=\"version-edit-2\" method=post" [list
set version_name_index [string first $version_name $version_uri]
if { $version_name_index >= 0 } {
set version_uri_prefix [string range $version_uri 0 [expr { $version_name_index - 1 }]]
set version_uri_suffix [string range $version_uri [expr { $version_name_index + [string length $version_name] }] end]
set version_uri_prefix [string range $version_uri 0 $version_name_index-1]
set version_uri_suffix [string range $version_uri $version_name_index+[string length $version_name] end]
doc_body_append "
<script type=\"text/javascript\">
append body [subst {
<script type="text/javascript">
function updateVersionURL() {
var form = document.forms\[0\];
form.version_uri.value = '$version_uri_prefix' + form.version_name.value + '$version_uri_suffix';
form.version_uri.value = "$version_uri_prefix" + form.version_name.value + "$version_uri_suffix";
}
</script>
"
}]
set version_name_on_change "onChange=\"updateVersionURL()\""
} else {
set version_name_on_change ""
}
doc_body_append "
<script type=\"text/javascript\">
append body [subst {
<script type="text/javascript">
function checkMailto(element) {
// If it looks like an email address without a mailto: (contains an @ but
// no colon) then prepend 'mailto:'.
......@@ -48,47 +60,47 @@ function checkMailto(element) {
}
</script>
[export_form_vars version_id release_date]
[export_vars -form {version_id release_date}]
<table>
<tr>
<th align=right nowrap>Package Key:</th>
<th style="text-align:right; white-space: nowrap">Package Key:</th>
<td><tt>$package_key</tt></td>
</tr>
<tr>
<th align=right nowrap>Package URL:</th>
<th style="text-align:right; white-space: nowrap">Package URL:</th>
<td>$package_uri</td>
</tr>
<tr>
<th align=right nowrap>Package Name:</th>
<th style="text-align:right; white-space: nowrap">Package Name:</th>
<td>$pretty_name</td>
</tr>
<tr>
<th align=right nowrap>OpenACS Core:</th>
<th style="text-align:right; white-space: nowrap">OpenACS Core:</th>
<td>[ad_decode $initial_install_p t Yes No]</td>
</tr>
<tr>
<th align=right nowrap>Singleton:</th>
<th style="text-align:right; white-space: nowrap">Singleton:</th>
<td>[ad_decode $singleton_p t Yes No]</td>
</tr>
<tr>
<th align=right nowrap>Implements Subsite:</th>
<th style="text-align:right; white-space: nowrap">Implements Subsite:</th>
<td>[ad_decode $implements_subsite_p t Yes No]</td>
</tr>
<tr>
<th align=right nowrap>Inherit Templates:</th>
<th style="text-align:right; white-space: nowrap">Inherit Templates:</th>
<td>[ad_decode $inherit_templates_p t Yes No]</td>
</tr>
<tr>
<th align=right nowrap>Auto-mount:</th>
<td><input name=auto_mount size=30 value=\"$auto_mount\"></td>
<th style="text-align:right; white-space: nowrap">Auto-mount:</th>
<td><input name="auto_mount" size="30" value="$auto_mount"></td>
</tr>
<tr>
......@@ -99,31 +111,31 @@ edit the information regarding existing version of the package.</td>
</tr>
<tr>
<th align=right nowrap>Version:</th>
<td><input name=version_name size=10 value=\"$version_name\" $version_name_on_change>
<th style="text-align:right; white-space: nowrap">Version:</th>
<td><input name="version_name" size="10" value="$version_name" $version_name_on_change>
</td>
</tr>
<tr>
<th align=right nowrap>Version URL:</th>
<td><input name=version_uri size=60 value=\"$version_uri\"></td>
<th style="text-align:right; white-space: nowrap">Version URL:</th>
<td><input name="version_uri" size="80" value="$version_uri"></td>
</tr>
<tr valign=top>
<th align=right><br>Summary:</th>
<td><textarea name=summary cols=60 rows=2 wrap=soft>[ns_quotehtml $summary]</textarea></td>
<tr valign="top">
<th style="text-align:right"><br>Summary:</th>
<td><textarea name="summary" cols="60" rows="2">[ns_quotehtml $summary]</textarea></td>
</tr>
<tr valign=top>
<th align=right><br>Description:</th>
<td><textarea name=description cols=60 rows=5 wrap=soft>[ns_quotehtml $description]</textarea><br>
This description is <select name=description_format>
<option value=text/html [ad_decode $description_format "text/plain" "" "selected"]>HTML-formatted.
<option value=text/plain [ad_decode $description_format "text/plain" "selected" ""]>plain text.
<tr valign="top">
<th style="text-align:right"><br>Description:</th>
<td><textarea name="description" cols="60" rows="5">[ns_quotehtml $description]</textarea><br>
This description is <select name="description_format">
<option value="text/html" [ad_decode $description_format "text/plain" "" "selected"]>HTML-formatted.
<option value="text/plain" [ad_decode $description_format "text/plain" "selected" ""]>plain text.
</select>
</td>
</tr>
"
}]
# Dynamic package version attributes
array set all_attributes [apm::package_version::attributes::get_spec]
......@@ -131,7 +143,7 @@ array set attributes [apm::package_version::attributes::get \
-version_id $version_id \
-array attributes]
foreach attribute_name [array names all_attributes] {
array set attribute $all_attributes($attribute_name)
set attribute $all_attributes($attribute_name)
if { [info exists attributes($attribute_name)] } {
# Attribute is already in db
......@@ -140,14 +152,16 @@ foreach attribute_name [array names all_attributes] {
# The attribute is not in the db yet
set attribute_value [apm::package_version::attributes::default_value $attribute_name]
}
doc_body_append "
# provide default size
if {![dict exists $attribute size]} {
dict set attribute size 30
}
append body [subst {
<tr>
<th align=right nowrap>${attribute(pretty_name)}:</th>
<td><input name=\"$attribute_name\" size=\"30\" value=\"$attribute_value\">
</td>
<th style="text-align:right; white-space: nowrap">[dict get $attribute pretty_name]:</th>
<td><input name="$attribute_name" size="[dict get $attribute size]" value="$attribute_value"></td>
</tr>
"
}]
}
# Build a list of owners. Ensure that there are at least two.
......@@ -173,47 +187,50 @@ foreach owner_info $owners {
set prompt "Owner #$counter"
}
doc_body_append "
append body [subst {
<tr>
<th align=right nowrap>$prompt:</th>
<td><input name=owner_name size=30 value=\"$owner_name\"></td>
<th style="text-align:right; white-space: nowrap">$prompt:</th>
<td><input name="owner_name" size="30" value="$owner_name"></td>
</tr>
<tr>
<th align=right nowrap>$prompt URL:</th>
<td><input name=owner_uri size=30 value=\"$owner_uri\" onChange=\"checkMailto(this)\"></td>
<th style="text-align:right; white-space: nowrap">$prompt URL:</th>
<td><input name="owner_uri" size="30" value="$owner_uri" onChange="checkMailto(this)"></td>
</tr>
"
}]
}
doc_body_append "
append body [subst {
<tr>
<th align=right nowrap>Vendor:</th>
<td><input name=vendor size=30 value=\"$vendor\"></td>
<th style="text-align:right; white-space: nowrap">Vendor:</th>
<td><input name="vendor" size="30" value="$vendor"></td>
</tr>
<tr>
<th align=right nowrap>Vendor URL:</th>
<td><input name=vendor_uri size=60 value=\"$vendor_uri\"></td>
<th style="text-align:right; white-space: nowrap">Vendor URL:</th>
<td><input name="vendor_uri" size="60" value="$vendor_uri"></td>
</tr>
"
}]
doc_body_append "
append body [subst {
<tr>
<td></td>
<td>
<table><tr valign=baseline><td><input type=checkbox name=upgrade_p value=1 checked></td><td>
Upgrade the local package $pretty_name to this version and supersede older versions.
</td></tr></table>
<table>
<tr valign="baseline">
<td><input type="checkbox" name="upgrade_p" value="1" checked></td>
<td>Upgrade the local package $pretty_name to this version and supersede older versions.</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan=2 align=center><br>
<input type=submit value=\"Save Information\">
</td>
<td colspan="2" align="center"><br>
<input type="submit" value="Save Information">
</td>
</tr>
</table>
</form>
[ad_footer]
"
}]
ad_return_template apm
......@@ -6,7 +6,7 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
}
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
@body;noquote@
......@@ -5,29 +5,32 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
}
apm_version_info $version_id
set return_url "[ad_conn url]?[ad_conn query]"
set page_title "Files"
set context [list [list "../developer" "Developer's Administration"] [list "/acs-admin/apm/" "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] $page_title]
append body "
<blockquote>
<table cellspacing=0 cellpadding=0>
"
doc_body_flush
set title "Files"
set context [list \
[list "../developer" "Developer's Administration"] \
[list "/acs-admin/apm/" "Package Manager"] \
[list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] \
$title]
set body {
<blockquote>
<table cellspacing="0" cellpadding="0">
<tr>
<th align="left">Path</th><th style="width:40px"></th>
<th align="left">File type</th><th style="width:40px"></th>
<th align="left">Database support</th><th style="width:40px"></th>
</tr>
}
set last_components [list]
set counter 0
append body "<tr><th align=left>Path</th><th width=40></th><th align=left>File type</th><th width=40></th>
<th align=left>Database support</th><th width=40></th></tr>\n"
foreach path [apm_get_package_files -package_key $package_key] {
set file_id ""
set db_type [apm_guess_db_type $package_key $path]
......@@ -55,7 +58,7 @@ foreach path [apm_get_package_files -package_key $package_key] {
for { set j 0 } { $j < $i } { incr j } {
append body "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
}
if { $installed_p eq "f" || [file exists "[acs_package_root_dir $package_key]/$path"] || $i < [llength $components] - 1} {
if { $installed_p == "f" || [file exists "[acs_package_root_dir $package_key]/$path"] || $i < [llength $components] - 1} {
# Either we're not looking at an installed package, or the file still exists,
# so don't use <strike> when writing the name.
append body [lindex $components $i]
......@@ -70,30 +73,37 @@ foreach path [apm_get_package_files -package_key $package_key] {
if { $i < [llength $components] - 1 } {
append body "/</td>"
} else {
append body "</td>"
append body "<td width=40>&nbsp;</td><td>$file_pretty_name</td><td width=40>&nbsp</td><td>$db_pretty_name</td>
<td width=40>&nbsp;</td>"
if { $installed_p eq "t" } {
set server_rel_path "packages/$package_key/$path"
if { [apm_file_watchable_p $server_rel_path] } {
if { [nsv_exists apm_reload_watch $server_rel_path] } {
# This procs file is already being watched.
append body "<td>&nbsp;being watched&nbsp;</td>"
append body [subst {
</td>
<td>&nbsp;</td><td>$file_pretty_name</td>
<td>&nbsp</td><td>$db_pretty_name</td>
<td>&nbsp;</td>
}]
if { $installed_p == "t" } {
set server_rel_path "packages/$package_key/$path"
if { [apm_file_watchable_p $server_rel_path] } {
if { [nsv_exists apm_reload_watch $server_rel_path] } {
# This procs file is already being watched.
append body "<td>&nbsp;being watched&nbsp;</td>"
} else {
if {![parameter::get -package_id [ad_acs_kernel_id] \
-parameter PerformanceModeP -default 1]} {
# Provide a link to watch the procs file.
set href [export_vars -base file-watch {version_id {paths $path} return_url}]
append body [subst {
<td>&nbsp;<a href="[ns_quotehtml $href]">watch</a>
&nbsp;</td>
}]
} else {
if {![parameter::get -package_id [ad_acs_kernel_id] \
-parameter PerformanceModeP -default 1]} {
# Provide a link to watch the procs file.
append body "<td>&nbsp;<a href=\"file-watch?[export_vars -url {version_id {paths $path} return_url}]\">watch</a>&nbsp;</td>"
} else {
append body "<td></td>"
}
append body "<td></td>"
}
} else {
append body "<td></td>"
}
} else {
append body "<td></td>"
}
}
}
}
append body "</tr>\n"
incr i
......@@ -101,40 +111,38 @@ foreach path [apm_get_package_files -package_key $package_key] {
set last_components $components
}
if {$counter eq "0"} {
if {$counter == 0} {
append body "<tr><td>This package does not contain any registered files.</td></tr>\n"
}
append body "</table>
</blockquote>
"
if { $installed_p eq "t" } {
append body "<ul>
<li><a href=\"package-watch?[export_vars -url {package_key return_url}]\">watch all files</a></li>
<li><a href=\"package-watch-cancel?[export_vars -url {package_key return_url}]\">cancel all watches</a></li>"
if { $distribution_uri eq "" } {
append body "
<p>
<!--li><a href=\"version-tag?version_id=$version_id\">Create a CVS tag for this version in each file</a-->"
}
append body {</table>
</blockquote>
}
if {$tagged_p eq "t"} {
append body "
<li><a href=\"archive/[file tail $version_uri]?version_id=$version_id\">Download a tarball from the package archive</a>"
if { $installed_p == "t" } {
append body [subst {<ul>
<li><a href="[ns_quotehtml [export_vars -base package-watch {package_key return_url}]]">watch all files</a></li>
<li><a href="[ns_quotehtml [export_vars -base package-watch-cancel {package_key return_url}]]">cancel all watches</a></li>
}]
if {$tagged_p == "t"} {
append body [subst {
<li><a href="[ns_quotehtml [export_vars -base archive/[file tail $version_uri] {version_id}]">Download
a tarball from the package archive</a>
}]
}
append body "</ul>"
} elseif { [info exists tagged_p] } {
if { $tagged_p eq "t" } {
append body "<ul>
<li><a href=\"archive/[file tail $version_uri]?version_id=$version_id\">Download a tarball from the package archive</a>
if { $tagged_p == "t" } {
append body [subst {<ul>
<li><a href="[ns_quotehtml [export_vars -base archive/[file tail $version_uri] {version_id}]]">Download
a tarball from the package archive</a>
</ul>
"
}]
}
}
ad_return_template apm
......@@ -9,7 +9,7 @@ ad_page_contract {
@cvs-id $Id$
} {
{version_id:integer}
{context_p 1}
{context_p:boolean 1}
}
db_1row apm_package_by_version_id {}
......
......@@ -7,8 +7,8 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{write_p 0}
{version_id:naturalnum,notnull}
{write_p:boolean 0}
}
if { $write_p } {
......
......@@ -6,7 +6,7 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
}
db_transaction {
apm_generate_tarball $version_id
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<p>
Export complete.
......
......@@ -5,7 +5,7 @@ ad_page_contract {
@creation-date 23 October 2002
@cvs-id $Id$
} {
version_id:integer
version_id:naturalnum,notnull
{return_url {[export_vars -base "version-i18n-index" { version_id }]}}
}
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<p>
Import complete.
......
......@@ -5,7 +5,7 @@ ad_page_contract {
@creation-date 23 October 2002
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
{return_url {[export_vars -base "version-i18n-index" { version_id }]}}
}
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<h3>Import/Export Messages</h3>
......
......@@ -5,7 +5,7 @@ ad_page_contract {
@creation-date 23 October 2002
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
} -properties {
page_title
context_bar
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
@processing_html_result;noquote@
......
......@@ -5,11 +5,11 @@ ad_page_contract {
@creation-date 8 October 2002
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
{files:multiple,notnull}
{file_action:multiple}
{number_of_keys:integer,notnull ""}
{replace_p:array ""}
{replace_p:boolean,array ""}
{message_keys:array ""}
skip_button:optional
}
......@@ -19,9 +19,9 @@ if { [info exists skip_button] } {
# to processing the next one
set remaining_files [lrange $files 1 end]
if { [llength $remaining_files] > 0 } {
ad_returnredirect "version-i18n-process?[export_vars -url {version_id {files:multiple $remaining_files} file_action:multiple}]"
ad_returnredirect [export_vars -base version-i18n-process {version_id {files:multiple $remaining_files} file_action:multiple}]
} else {
ad_returnredirect "version-i18n?[export_vars -url {version_id}]"
ad_returnredirect [export_vars -base version-i18n {version_id}]
}
ad_script_abort
}
......@@ -32,7 +32,7 @@ if { [info exists skip_button] } {
set message_key_list [list]
for { set counter 1 } { $counter <= $number_of_keys } { incr counter } {
if { [info exists replace_p($counter)] } {
if { [exists_and_not_null message_keys($counter)] } {
if { ([info exists message_keys($counter)] && $message_keys($counter) ne "") } {
lappend message_key_list $message_keys($counter)
} else {
ad_return_complaint 1 "<li>Message key number $counter is empty. Cannot replace text with empty key</li>"
......@@ -67,7 +67,7 @@ if { $replace_text_p } {
ns_log Notice "Replacing text in file $text_file with message tags"
append processing_html_result "<h3>Text replacements for $text_file</h3>"
set adp_text_result_list [lang::util::replace_adp_text_with_message_tags "[acs_root_dir]/$text_file" write $message_key_list]
set adp_text_result_list [lang::util::replace_adp_text_with_message_tags "$::acs::rootdir/$text_file" write $message_key_list]
set text_replacement_list [lindex $adp_text_result_list 0]
set text_untouched_list [lindex $adp_text_result_list 1]
......@@ -115,7 +115,7 @@ set files [lrange $files $number_of_processed_files end]
# The proceed link will be to the next adp file if there is one and back to the I18N page
# if we're done
set proceed_url_export_vars [export_vars -url {version_id files:multiple file_action:multiple}]
set proceed_url_export_vars [export_vars {version_id files:multiple file_action:multiple}]
if { [llength $files] > 0 } {
# There are no more files to process so present a link back to the i18n page for this version
set proceed_url "version-i18n-process?${proceed_url_export_vars}"
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<p>
<b>Current File:</b> @file@
......
......@@ -6,7 +6,7 @@ ad_page_contract {
@creation-date 8 October 2002
@cvs-id $Id$
} {
version_id:integer,notnull
version_id:naturalnum,notnull
{files:multiple}
{file_action:multiple}
}
......@@ -22,7 +22,7 @@ set replace_tags_p [ad_decode [lsearch -exact $file_action replace_tags] "-1" "0
# If no texts should be replaced we need not give the user a choice of keys to use and
# can go straight to the processing
set redirect_url "version-i18n-process-2?[export_vars -url {version_id files:multiple file_action:multiple}]"
set redirect_url [export_vars -base version-i18n-process-2 {version_id files:multiple file_action:multiple}]
if { ! $replace_text_p } {
ad_returnredirect $redirect_url
......@@ -32,9 +32,9 @@ if { ! $replace_text_p } {
# Process one adp at a time interactively
set file [lindex $files 0]
set full_file_name "[acs_root_dir]/$file"
set full_file_name "$::acs::rootdir/$file"
set adp_report_list [lang::util::replace_adp_text_with_message_tags "[acs_root_dir]/$file" report]
set adp_report_list [lang::util::replace_adp_text_with_message_tags "$::acs::rootdir/$file" report]
set adp_replace_list [lindex $adp_report_list 0]
set adp_no_replace_list [lindex $adp_report_list 1]
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<p align="center">
@file_type_filter;noquote@
......
......@@ -6,10 +6,10 @@ ad_page_contract {
@creation-date 8 October 2002
@cvs-id $Id$
} {
version_id:integer,notnull
{pre_select_files_p "1"}
{show_status_p "0"}
{only_text_p "0"}
version_id:naturalnum,notnull
{pre_select_files_p:boolean "1"}
{show_status_p:boolean "0"}
{only_text_p:boolean "0"}
{file_type adp}
}
......@@ -63,7 +63,7 @@ foreach file [lsort [ad_find_all_files [acs_package_root_dir $package_key]]] {
# If we are showing adp:s and we are only showing adp:s with texts to translate, check if
# this file has any texts
if { $file_type eq "adp" && $only_text_p } {
if { $number_of_text_snippets == "0" } {
if { $number_of_text_snippets == 0 } {
set add_file_p 0
}
}
......@@ -103,7 +103,7 @@ if {$file_type eq "adp"} {
-options {{{Find human language text and replace with <# ... #> tags} replace_text} {{Replace <# ... #> tags with #...# keys and insert message into catalog} replace_tags}} \
-values {replace_text} \
} else {
# TCL files or SQL files
# Tcl files or SQL files
element create file_list_form tcl_action_inform \
-datatype text \
-widget inform \
......@@ -118,32 +118,57 @@ if {$file_type eq "adp"} {
}
if { $pre_select_files_p } {
set pre_select_filter "<a href=\"version-i18n?[export_vars -url -override {{pre_select_files_p 0}} {version_id file_type show_status_p only_text_p}]\">Unselect all checkboxes</a>"
set href [export_vars -base version-i18n -override {{pre_select_files_p 0}} {version_id file_type show_status_p only_text_p}]
set pre_select_filter [subst {<a href="[ns_quotehtml $href]">Unselect all checkboxes</a>}]
} else {
set pre_select_filter "<a href=\"version-i18n?[export_vars -url -override {{pre_select_files_p 1}} {version_id file_type show_status_p only_text_p}]\">Select all checkboxes</a>"
set href [export_vars -base version-i18n -override {{pre_select_files_p 1}} {version_id file_type show_status_p only_text_p}]
set pre_select_filter [subst {<a href="[ns_quotehtml $href]">Select all checkboxes</a>}]
}
if { $show_status_p } {
set status_filter "<a href=\"version-i18n?[export_vars -url -override {{show_status_p 0}} {version_id file_type pre_select_files_p only_text_p}]\">Hide I18N status of files</a>"
set href [export_vars -base version-i18n -override {{show_status_p 0}} {version_id file_type pre_select_files_p only_text_p}]
set status_filter [subst {<a href="[ns_quotehtml $href]">Hide I18N status of files</a>}]
} else {
set status_filter "<a href=\"version-i18n?[export_vars -url -override {{show_status_p 1}} {version_id file_type pre_select_files_p only_text_p}]\">Show I18N status of files</a>"
set href [export_vars -base version-i18n -override {{show_status_p 1}} {version_id file_type pre_select_files_p only_text_p}]
set status_filter [subst {<a href="[ns_quotehtml $href]">Show I18N status of files</a>}]
}
switch -- $file_type {
adp {
if { $only_text_p } {
set text_only_filter "<a href=\"version-i18n?[export_vars -url -override {{only_text_p 0}} {pre_select_files_p version_id file_type show_status_p}]\">all adp files</a> | only adp files with translatable text"
set href [export_vars -base version-i18n-override {{only_text_p 0}} {pre_select_files_p version_id file_type show_status_p}]
set text_only_filter [subst {<a href="[ns_quotehtml $href]">all adp files</a> | only adp files with translatable text}]
} else {
set text_only_filter "<b>all adp files</b> | <a href=\"version-i18n?[export_vars -url -override {{only_text_p 1}} {pre_select_files_p version_id file_type show_status_p}]\">only apd files with translatable text</a>"
}
set href [export_vars -base version-i18n -override {{only_text_p 1}} {pre_select_files_p version_id file_type show_status_p}]
set text_only_filter [subst {<b>all adp files</b> | <a href="[ns_quotehtml $href]">only apd files with translatable text</a>}]
}
set file_type_filter "<b>Show adp files</b>: $text_only_filter | <a href=\"version-i18n?[export_vars -url -override {{file_type tcl}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show tcl files</a> | <a href=\"version-i18n?[export_vars -url -override {{file_type sql}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show sql files</a>"
set href1 [export_vars -base version-i18n -override {{file_type tcl}} {version_id pre_select_files_p show_status_p only_text_p}]
set href2 [export_vars -base version-i18n -override {{file_type sql}} {version_id pre_select_files_p show_status_p only_text_p}]
set file_type_filter [subst {
<b>Show adp files</b>: $text_only_filter |
<a href="[ns_quotehtml $href1]">Show tcl files</a> |
<a href="[ns_quotehtml $href2]">Show sql files</a>
}]
}
tcl {
set file_type_filter "<a href=\"version-i18n?[export_vars -url -override {{file_type adp}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show adp files</a> | <b>Show tcl files</b> | <a href=\"version-i18n?[export_vars -url -override {{file_type sql}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show sql files</a>"
set href1 [export_vars -base version-i18n -override {{file_type adp}} {version_id pre_select_files_p show_status_p only_text_p}]
set href2 [export_vars -base version-i18n -override {{file_type sql}} {version_id pre_select_files_p show_status_p only_text_p}]
set file_type_filter [subst {
<a href="[ns_quotehtml $href1]">Show adp files</a> |
<b>Show tcl files</b> |
<a href="[ns_quotehtml $href2]">Show sql files</a>
}]
}
sql {
set file_type_filter "<a href=\"version-i18n?[export_vars -url -override {{file_type adp}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show adp files</a> | <a href=\"version-i18n?[export_vars -url -override {{file_type tcl}} {version_id pre_select_files_p show_status_p only_text_p}]\">Show tcl files</a> | <b>Show sql files</b>"
set href1 [export_vars -base version-i18n -override {{file_type adp}} {version_id pre_select_files_p show_status_p only_text_p}]
set href2 [export_vars -base version-i18n -override {{file_type tcl}} {version_id pre_select_files_p show_status_p only_text_p}]
set file_type_filter [subst {
<a href="[ns_quotehtml $href1]">Show adp files</a> |
<a href="[ns_quotehtml $href2]">Show tcl files</a> |
<b>Show sql files</b>
}]
}
}
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<blockquote>
@filter_html;noquote@
<listtemplate name="parameters_list"></listtemplate>
</blockquote>
@body;noquote@
......@@ -7,55 +7,85 @@ ad_page_contract {
@creation-date 12 September 2000
@cvs-id $Id$
} {
{orderby ""}
{version_id:integer}
{orderby:token "parameter_name"}
{version_id:naturalnum,notnull}
{section_name ""}
}
db_1row apm_package_by_version_id {
select pretty_name, version_name, package_key
from apm_package_version_info
where version_id = :version_id
from apm_package_version_info
where version_id = :version_id
}
set dimensional_list [apm_parameter_section_slider $package_key]
set table_def [list \
[list parameter_name "Parameter"] \
[list datatype "Type"] \
[list scope "Scope"] \
[list description "Description" {} {<td>[ad_quotehtml $description]</td>}]]
set elements_list {
parameter_name {
label "Parameter"
orderby parameter_name
}
datatype {
label "Type"
orderby datatype
}
scope {
label "Scope"
orderby scope
}
description {
label "Description"
orderby description
}
}
#DRB: sql_clauses must not contain RDBMS-specific query clauses.
set sql_clauses ""
if { [exists_and_not_null dimensional_list] } {
lappend table_def [list section_name "Section:"]
if { ([info exists dimensional_list] && $dimensional_list ne "") } {
append sql_clauses [ad_dimensional_sql $dimensional_list]
lappend elements_list section_name {
label "Section"
orderby section_name
}
}
lappend elements_list actions {
label "Actions"
display_template { @parameters.actions;noquote@ }
}
template::list::create -name parameters_list \
-multirow parameters \
-key parameter_name \
-no_data "No parameters registered in this section." \
-actions [list "Add new parameter" [export_vars -base parameter-add {version_id section_name}] "Add new parameter"] \
-elements $elements_list \
-filters {version_id {} section_name {}}
set parent_package_keys [lrange [apm_one_package_inherit_order $package_key] 0 end-1]
append sql_clauses " [template::list::orderby_clause -orderby -name parameters_list]"
db_multirow -extend {actions} parameters parameter_table {} {
set actions [subst {\[<font size="-1">
<a href="[ns_quotehtml [export_vars -base parameter-delete {parameter_id version_id section_name}]]">delete</a> |
<a href="[ns_quotehtml [export_vars -base parameter-edit {version_id parameter_id}]]">edit</a></font>\]
}]
}
lappend table_def [list parameter_id "Actions" no_sort \
{<td>\[<font size=-1>
<a href=parameter-delete?[export_url_vars parameter_id version_id section_name]>delete</a> |
<a href=parameter-edit?[export_url_vars version_id parameter_id]>edit</a></font>\]
</td>}]
append sql_clauses [ad_order_by_from_sort_spec $orderby $table_def]
set page_title "Parameters"
set context [list [list "." "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] $page_title]
append body "
<blockquote>
"
set filter_html ""
if { $dimensional_list ne "" } {
append body "[ad_dimensional $dimensional_list]<p>"
set filter_html [ad_dimensional $dimensional_list]
}
# LARS hack
set sections [lindex [lindex $dimensional_list 0] 3]
set sections [lindex $dimensional_list 0 3]
foreach section $sections {
if {$section_name eq [lindex $section 0]} {
set section_name [lindex $section 1]
......@@ -63,22 +93,6 @@ foreach section $sections {
}
}
set parent_package_keys [lrange [apm_one_package_inherit_order $package_key] 0 end-1]
append body "[ad_table -Torderby $orderby \
-bind [ad_tcl_vars_to_ns_set version_id package_key parent_package_keys] \
-Textra_vars {version_id} \
-Tmissing_text "No parameters registered in this section." \
parameter_table "" $table_def]
<br><a href=parameter-add?[export_url_vars version_id section_name]>Add a new parameter</a>
</blockquote>
"
......
<?xml version="1.0"?>
<queryset>
<fullquery name="apm_package_by_version_id">
<querytext>
select pretty_name, version_name, package_key
from apm_package_version_info
where version_id = :version_id
</querytext>
</fullquery>
<fullquery name="parameter_table">
<querytext>
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@title;literal@</property>
<property name="context">@context;literal@</property>
<style type="text/css">
dl.error, dl.error dt { display:inline; color:red; }
/* dl.error dd { display: none; }*/
dl.error dt { font-weight:bold; }
dl.error { margin-left:1em; cursor:pointer; }
</style>
@body;noquote@
<!--
<script type="text/javascript">
<% template::head::add_javascript -src "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" %>
$('#files dd').click(function () {
$(this).slideToggle();
});
$('#files dt').click(function () {
$(this.nextElementSibling).slideToggle();
});
</script>
-->
......@@ -6,14 +6,18 @@ ad_page_contract {
@creation-date 9 May 2000
@cvs-id $Id$
} {
{version_id:integer}
{version_id:naturalnum,notnull}
{return_url "index"}
}
apm_version_info $version_id
set page_title "Reload $pretty_name"
set context [list [list "../developer" "Developer's Administration"] [list "/acs-admin/apm/" "Package Manager"] [list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] $page_title]
set title "Reload $pretty_name"
set context [list \
[list "../developer" "Developer's Administration"] \
[list "/acs-admin/apm/" "Package Manager"] \
[list [export_vars -base version-view { version_id }] "$pretty_name $version_name"] \
$title]
# files in $files.
apm_mark_version_for_reload $version_id files
......@@ -23,38 +27,87 @@ set files_to_watch [list]
if { [llength $files] == 0 } {
append body "There are no changed files to reload in this package.<p>"
} else {
append body "Marked the following file[ad_decode [llength $files] 1 "" "s"] for reloading:<ul>\n"
append body "Marked the following file[ad_decode [llength $files] 1 "" "s"] for reloading:<ul id='files'>\n"
# Source all of the marked files using the current interpreter, accumulating
# errors into apm_package_load_errors
array set errors [list]
catch { apm_load_any_changed_libraries errors }
if {[info exists errors($package_key)]} {
array set package_errors $errors($package_key)
} else {
array set package_errors [list]
}
foreach file $files {
append body "<li>$file"
if { [nsv_exists apm_reload_watch $file] } {
append body " (currently being watched)"
} else {
# This file isn't being watched right now - provide a link setting a watch on it.
set files_to_watch_p 1
append body "<li>$file"
if { [nsv_exists apm_reload_watch $file] } {
append body " (currently being watched)"
} else {
# This file isn't being watched right now - provide a link setting a watch on it.
set files_to_watch_p 1
# Remove the two first elements of the path, namely packages/package-key/
set local_path [eval [concat file join [lrange [file split $file] 2 end]]]
append body " (<a href=\"file-watch?[export_vars { version_id { paths $local_path } }]\">watch this file</a>)"
set local_path [file join {*}[lrange [file split $file] 2 end]]
set href [export_vars -base file-watch { version_id { paths $local_path } }]
append body [subst {
(<a href="[ns_quotehtml $href]">watch this file</a>)
}]
lappend files_to_watch $local_path
}
append body "\n"
}
if {[info exists package_errors($file)]} {
append body "<dl class='error'><dt title='Errors while loading $file'>ERROR!</dt>" \
"<dd><code><pre>[ad_quotehtml $package_errors($file)]</pre></code></dd></dl>"
}
append body "</li>\n"
}
append body "</ul>\n"
set n_errors [array size package_errors]
if {$n_errors > 0} {
if {$n_errors > 1} {
set exist_n_error_files "were $n_errors files"
} else {
set exist_n_error_files "was $n_errors file"
}
append body "
<p><strong style='color:red;font-size:112.5%;'>There
$exist_n_error_files with errors that prevented complete
reloading</strong>. Fix the problem, then reload the
package again to finish the reload.
</p>
"
}
}
if { [info exists files_to_watch_p] } {
append body "If you know you're going to be modifying one of the above files frequently,
select the \"watch this file\" link next to a filename to cause the interpreters to
reload the file immediately whenever it is changed.<p>
<ul class=\"action-links\">
<li><a href=\"file-watch?[export_vars { version_id { paths:multiple $files_to_watch } }]\">Watch all above files</a></li>"
set href [export_vars -base file-watch { version_id { paths:multiple $files_to_watch } }]
append body [subst {
If you know you're going to be modifying one of the above files frequently,
select the "watch this file" link next to a filename to cause the interpreters to
reload the file immediately whenever it is changed.<p>
<ul class="action-links">
<li><a href="[ns_quotehtml $href]">Watch all above files</a></li>
}]
} else {
append body "<ul class=\"action-links\">"
}
append body "
<li><a href=\"$return_url\">Return</a></li>
</ul>"
append body [subst {
<li><a href="$return_url">Return</a></li>
</ul>
}]
# template::head::add_javascript -src "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"
ad_return_template
#
# Local variables:
# mode: tcl
# tcl-indent-level: 4
# indent-tabs-mode: nil
# End:
......@@ -7,19 +7,25 @@ ad_page_contract {
@creation-date Thu Oct 12 17:45:38 2000
@cvs-id $Id$
} {
version_id
version_id:naturalnum,notnull
}
apm_version_info $version_id
set title "Upgrading to $pretty_name $version_name"
set context [list \
[list "/acs-admin/apm/" "Package Manager"] \
[list "version-view?version_id=$version_id" "$pretty_name $version_name"] \
$title]
# Disable all previous versions of this packae.
apm_version_upgrade $version_id
# Instruct user to run SQL upgrade scripts.
set body [subst {
<p>
$pretty_name $version_name has been enabled. Please run any necessary
SQL upgrade scripts to finish updating the data model and restart
the server.
}]
doc_body_append "[apm_header "Upgrading to $pretty_name $version_name"]
<p>
$pretty_name $version_name has been enabled. Please run any necessary
SQL upgrade scripts to finish updating the data model and restart
the server.
[ad_footer]
"
ad_return_template apm
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
@body;noquote@
This diff is collapsed.
......@@ -6,12 +6,15 @@ ad_page_contract {
} {
}
ad_return_top_of_page "[apm_header "Generate Package Specifications"]
set title "Generate Package Specifications"
set context [list [list "." "Package Manager"] $title]
set template [parameter::get -package_id [ad_conn subsite_id] -parameter StreamingHead]
ad_return_top_of_page [ad_parse_template -params [list context title] $template]
Regenerating all package specifications for locally maintained packages.
<ul>
"
ns_write {
Regenerating all package specifications for locally maintained packages.
<ul>
}
db_foreach apm_get_all_packages {
select version_id, version_name, pretty_name, distribution_uri, v.package_key
......@@ -35,9 +38,6 @@ db_foreach apm_get_all_packages {
}
}
db_release_unused_handles
ns_write "</ul>
<a href=\"./\">Return to the Package Manager</a>
[ad_footer]"
ns_write [subst {</ul>
<a href="./">Return to the Package Manager</a>
}]
......@@ -4,7 +4,7 @@ ad_page_contract {
@author Peter Marklund
@creation-date 2003-09-08
} {
authority_id:integer
authority_id:naturalnum,notnull
}
# Cannot delete local authority
......
<master>
<property name="context">@context;noquote@</property>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="focus">parameters.@first_param_name;noquote@</property>
<if @has_parameters_p@>
......
......@@ -4,7 +4,7 @@ ad_page_contract {
@author Peter Marklund
} {
authority_id:integer
authority_id:naturalnum,notnull
}
auth::authority::get -authority_id $authority_id -array authority
......@@ -39,7 +39,7 @@ foreach element_name [auth::authority::get_sc_impl_columns] {
}
set has_parameters_p [expr [llength [array names parameters]] > 0]
set has_parameters_p [expr {[array size parameters] > 0}]
set first_param_name ""
if { $has_parameters_p } {
......@@ -48,7 +48,7 @@ if { $has_parameters_p } {
set first_param_name [lindex [array names parameters] 0]
set form_widgets [list]
foreach parameter_name [lsort [array names parameters]] {
foreach parameter_name [array names parameters] {
lappend form_widgets [list ${parameter_name}:text,optional [list label $parameter_name] [list help_text $parameters($parameter_name)] {html {size 80}}]
}
......
......@@ -21,8 +21,7 @@
trunc(extract(epoch from (coalesce(job_end_time, current_timestamp) - job_start_time))) as run_time_seconds
from auth_batch_jobs
where authority_id = :authority_id
order by
job_start_time DESC
order by start_time_ansi
</querytext>
</fullquery>
......
......@@ -4,7 +4,7 @@ ad_page_contract {
@author Peter Marklund
} {
authority_id:integer
authority_id:naturalnum,notnull
}
# Check that the authority has a register implementation
......
......@@ -6,13 +6,13 @@ ad_page_contract {
@creation-date 2003-09-09
} {
authority_id
authority_id:naturalnum,notnull
enabled_p:boolean
}
# Make sure we are not shutting out all site-wide-admins from the system
set allowed_p 1
if { $enabled_p eq "f" && ![auth::can_admin_system_without_authority_p -authority_id $authority_id]} {
if { $enabled_p == "f" && ![auth::can_admin_system_without_authority_p -authority_id $authority_id]} {
set allowed_p 0
}
......
......@@ -5,7 +5,7 @@ ad_page_contract {
@creation-date 2003-09-09
@cvs-id $Id$
} {
authority_id:integer
authority_id:naturalnum,notnull
direction
}
......
<master>
<property name="context">@context;noquote@</property>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="focus">authority.pretty_name</property>
<if @configure_url@ not nil>
......
This diff is collapsed.
<master>
<property name="context">@context;noquote@</property>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<formtemplate id="batch_action_form"></formtemplate>
......@@ -4,7 +4,7 @@ ad_page_contract {
@author Peter marklund (peter@collaboraid.biz)
@creation-date 2003-09-10
} {
entry_id:integer
entry_id:naturalnum,notnull
}
auth::sync::job::get_entry -entry_id $entry_id -array batch_action
......
......@@ -3,7 +3,7 @@ ad_page_contract {
@author Peter Marklund
} {
job_id:integer
job_id:naturalnum,notnull
}
set document [db_string select_document {
......
<master>
<property name="context">@context;noquote@</property>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<p> Batch sync completed. </p>
<p>
<b>&raquo;</b> <a href="@job_url@">View job results</a>
</p>
<h1>Job Results</h1>
<pre>
@debug;noquote@
</pre>
\ No newline at end of file
This diff is collapsed.
<master>
<property name="context">@context;noquote@</property>
<property name="title">@page_title;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<p>
<formtemplate id="batch_job_form"></formtemplate>
......
......@@ -4,8 +4,8 @@ ad_page_contract {
@author Peter Marklund
@creation-date 2003-09-09
} {
job_id
page:optional
job_id:naturalnum,notnull
page:naturalnum,optional
success_p:boolean,optional
}
......@@ -58,9 +58,6 @@ ad_form \
{doc_message:text(inform)
{label "\#acs-admin.Document_message\#"}
}
{document_preview:text(inform)
{label "\#acs-admin.Document\#"}
}
{document_download:text(inform)
{label "\#acs-admin.Document\#"}
}
......@@ -85,9 +82,7 @@ ad_form \
set job_start_time [lc_time_fmt $batch_job(job_start_time) "%x %X"]
set job_end_time [lc_time_fmt $batch_job(job_end_time) "%x %X"]
set document_download "<a href=\"[export_vars -base batch-document-download { job_id }]\">[lang::message::lookup "" acs-admin.Download_entire_document "Download entire document"]</a>"
set document_preview "<pre>[string range $batch_job(document) 0 3000]</pre>"
if {[string length $document_preview] >= 3000} { append document_preview " ..." }
set document_download "<a href=\"[export_vars -base batch-document-download { job_id }]\">[_ acs-admin.download]</a>"
}
list::create \
......
<master>
<property name="context">@context;noquote@</property>
<property name="main_navbar_label">admin</property>
<property name="title">@page_title;noquote@</property>
<property name="left_navbar">@left_navbar_html;noquote@</property>
<property name="context">@context;literal@</property>
<property name="doc(title)">@page_title;literal@</property>
<h1>Authorities</h1>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment