Commit b9bc355c authored by Frank Bergmann's avatar Frank Bergmann

- OpenACS 5.9

parent a088804e
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="categories" locale="de_DE" charset="ISO-8859-1">
<msg key="cadmin">Management der Kategorien</msg>
<msg key="Action">Aktion</msg>
<msg key="Action_add_root">Kategorie hinzufgen</msg>
<msg key="Action_add_root_link_title">Kategorie auf der ersten Ebene hinzufgen</msg>
<msg key="Action_applications">Anwendungen</msg>
<msg key="Action_applications_link_title">Anwendungen</msg>
<msg key="Action_change_parent">Zuordnung ndern</msg>
<msg key="Action_copy_tree">Kategorienbaum bernehmen</msg>
<msg key="Action_copy_tree_link_title">Kategorien von einem anderen Baum bernehmen</msg>
<msg key="Action_delete_tree">Kategorienbaum lschen</msg>
<msg key="Action_delete_tree_link_title">Diesen Kategorienbaum lschen</msg>
<msg key="Action_permissions_link_title">Berechtigungen des Kategorienbaums verwalten</msg>
<msg key="Action_view_links">Links ansehen</msg>
<msg key="Action_view_synonyms">Synonyme ansehen</msg>
<msg key="Actions">Aktionen</msg>
<msg key="Actions_permissions_link_title">Berechtigungen des Kategorienbaums verwalten</msg>
<msg key="Add_category">Kategorie hinzufgen</msg>
<msg key="Add_subcategory_link_title">Subkategorie hinzufgen</msg>
<msg key="Add_tree">Kategorienbaum hinzufgen</msg>
<msg key="Browse">Durchsuchen</msg>
<msg key="Browse_link_title">Ausgewhlte Kategorienbume durchsuchen</msg>
<msg key="cadmin">Kategorien verwalten</msg>
<msg key="Cancel_do_not_unmap">Nein, Zuordnung nicht aufheben</msg>
<msg key="Categories">Kategorien</msg>
<msg key="code_export">Code zum Erstellen der Kategoriebume exportieren</msg>
<msg key="code_necessary">TCL Code um ausgewhlte Kategoriebume zu importieren</msg>
<msg key="Categorize_name">%name% kategorisieren </msg>
<msg key="Category">Kategorie</msg>
<msg key="checked">ausgewhlt</msg>
<msg key="code_export">Code zum Erstellen der Kategorienbume exportieren</msg>
<msg key="code_necessary">TCL Code, um ausgewhlte Kategoriebume zu importieren</msg>
<msg key="Create_a_new_tree">Neuen Kategorienbaum erstellen</msg>
<msg key="Current_categories">Aktuelle Kategorien</msg>
<msg key="Delete">Lschen</msg>
<msg key="Delete_action_link_title">Ausgewhlte Kategorien lschen</msg>
<msg key="Delete_category_link_title">Kategorie und alle Subkategorien lschen</msg>
<msg key="Delete_category_tree_title">Kategorienbaum &quot;%tree_name%&quot; lschen </msg>
<msg key="Deprecate">Ausblenden</msg>
<msg key="Deprecate_category_link_title">Ausgewhlte Kategorien ausblenden</msg>
<msg key="Deprecated">Ausgeblendet</msg>
<msg key="Description">Beschreibung</msg>
<msg key="Edit_category">Kategorie bearbeiten</msg>
<msg key="Edit_category_link_title">Diese Kategorie bearbeiten</msg>
<msg key="Edit_parameters">Einstellungen bearbeiten</msg>
<msg key="Edit_tree">Kategorienbaum bearbeiten</msg>
<msg key="export">Export</msg>
<msg key="here">hier</msg>
<msg key="Language">Sprache</msg>
<msg key="lt_Are_you_sure_you_want">Sind Sie sicher, dass Sie diese Kategorien lschen wollen:</msg>
<msg key="lt_Are_you_sure_you_want_1">Sind Sie sicher, dass Sie diese Kategorien-Links lschen wollen:</msg>
<msg key="lt_Are_you_sure_you_want_2">Sind Sie sicher, dass Sie diese Synonyme lschen wollen:</msg>
<msg key="lt_Are_you_sure_you_want_3">Sind Sie sicher, dass Sie den Kategorienbaum &quot;%tree_name%&quot; lschen wollen:</msg>
<msg key="lt_Are_you_sure_you_want_4">Sind Sie sicher, dass Sie die Zuordnung des Kategorienbaums &quot;%tree_name%&quot; zum Wiki &quot;%object_name%&quot; aufheben wollen?</msg>
<msg key="lt_Categories_still_used">Kategorien in Verwendung</msg>
<msg key="lt_Category_Administrati">Kategorien verwalten</msg>
<msg key="lt_Category_trees_availa">Kategorienbume, die zugeordnet werden knnen</msg>
<msg key="lt_Category_trees_mapped">Kategorienbume, die dem Wiki &quot;%object_name%&quot; zugeordnet sind</msg>
<msg key="lt_Create_and_map_a_new_">Neuen Kategorienbaum erstellen und zuordnen</msg>
<msg key="lt_Explanation_Any_categ">Erklrung: Jede Kategorisierung innerhalb der Quellkategorie erfolgt auch in der Zielkategorie.</msg>
<msg key="lt_object_count_objects_">%object_count% Objekte auf %page_count% Seiten</msg>
<msg key="lt_Search_for_a_category">Kategorie suchen</msg>
<msg key="lt_Select_Trees_for_brow">Kategorienbume zum Durchsuchen auswhlen</msg>
<msg key="lt_There_are_instances_w">Es gibt %instances_without_permission% Verwendungen des Kategorienbaums, aber Sie haben keine Berechtigung, diese zu sehen.</msg>
<msg key="lt_This_is_a_site_wide_c">Dies ist ein Kategorienbaum, der nur fr Site-Wide-Administrator/inn/en zugnglich ist</msg>
<msg key="lt_This_tree_is_not_used">Dieser Kategorienbaum wird nicht genutzt.</msg>
<msg key="lt_This_tree_is_still_us">Dieser Kategorienbaum wird noch von einigen Anwendungen verwendet. Fr eine Liste, klicken Sie bitte</msg>
<msg key="lt_To_deselect_or_select">Um mehrere Kategorien auszuwhlen, verwenden Sie die Strg-Taste auf Ihrer Tastatur.</msg>
<msg key="Map_subtree">Subkategorie zuordnen</msg>
<msg key="Map_this_subtree">Diese Subkategorie zuordnen</msg>
<msg key="Map_tree">Kategorienbaum zuordnen</msg>
<msg key="Mapping_parameters">Zuordnungseinstellungen</msg>
<msg key="Mapping_parameters_subtree_title">Einstellungen der Zuordnung von Seiten zum Subkategorienbaum &quot;%tree_name% :: %category_name%&quot;</msg>
<msg key="Mapping_parameters_tree_title">Einstellungen der Zuordnung von Seiten zum Kategorienbaum &quot;%tree_name%&quot;</msg>
<msg key="multiple">mehrfach</msg>
<msg key="No_Cancel">Abbrechen</msg>
<msg key="None">Keine</msg>
<msg key="OK">OK</msg>
<msg key="optional">optional</msg>
<msg key="Ordering">Reihenfolge</msg>
<msg key="Ordering_update">Reihenfolge aktualisieren</msg>
<msg key="Ordering_update_link_title">Reihenfolge entsprechend der Werte aktualisieren</msg>
<msg key="Permissions_manage">Zugriffsrechte verwalten</msg>
<msg key="Permissions_manage_title">Zugriffsrechte fr Kategoriebaum &quot;%tree_name%&quot; verwalten</msg>
<msg key="required">erforderlich</msg>
<msg key="Restore">Wiederherstellen</msg>
<msg key="Restore_category_link_title">Ausgewhlte Kategorien wiederherstellen</msg>
<msg key="selected">ausgewhlt</msg>
<msg key="single">einfach</msg>
<msg key="Tree_copy">Kategorienbaum bernehmen</msg>
<msg key="Tree_copy_title">Einen Kategorienbaum in &quot;%tree_name%&quot; bernehmen</msg>
<msg key="Tree_map_title">Subkategorie von &quot;%tree_name%&quot; auswhlen und zuordnen</msg>
<msg key="Tree_Name">Name des Kategorienbaums</msg>
<msg key="Tree_view_title">Kategorienbaum &quot;%tree_name%&quot;</msg>
<msg key="Trees_you_can_manage">Kategorienbume, die Sie verwalten knnen</msg>
<msg key="Trees_you_can_view">Kategorienbume, die Sie ansehen knnen</msg>
<msg key="Unmap">Zuordnung aufheben</msg>
<msg key="unmap">Zuordnung aufheben</msg>
<msg key="Usage">Verwendung</msg>
<msg key="Usage_title">Anwendungen, die den Kategorienbaum &quot;%tree_name%&quot; verwenden</msg>
<msg key="Widget">Optionen</msg>
<msg key="Widget_checkbox">Checkbox - User/innen knnen eine Seite mehreren Kategorien zuweisen</msg>
<msg key="Widget_multiselect">Multiselect - User/innen knnen eine Seite mehreren Kategorien zuweisen</msg>
<msg key="Widget_radio">Radio</msg>
<msg key="Widget_required_category">Muss eine Seite mindestens einer Kategorie zugewiesen werden?</msg>
<msg key="Widget_select">Auswhlen</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="categories" locale="en_US" charset="ISO-8859-1">
<msg key="Action">Action</msg>
<msg key="Action_add_root">Add root category</msg>
<msg key="Action_add_root_link_title">Add category at the root level</msg>
<msg key="Action_applications">Applications</msg>
<msg key="Action_applications_link_title">Applications</msg>
<msg key="Action_change_parent">Change parent</msg>
<msg key="Action_copy_tree">Copy tree</msg>
<msg key="Action_copy_tree_link_title">Copy categories from other tree</msg>
<msg key="Action_delete_tree">Delete tree</msg>
<msg key="Action_delete_tree_link_title">Delete this category tree</msg>
<msg key="Action_permissions_link_title">Manage permissions for tree</msg>
<msg key="Action_view_links">View links</msg>
<msg key="Action_view_synonyms">View synonyms</msg>
<msg key="Actions">Actions</msg>
<msg key="Add_category">Add category</msg>
<msg key="Add_subcategory_link_title">Add subcategory</msg>
<msg key="Add_tree">Add tree</msg>
<msg key="AND__">&gt;AND
|</msg>
<msg key="Browse">Browse</msg>
<msg key="Browse_link_title">Browse through selected category trees</msg>
<msg key="cadmin">Category Management</msg>
<msg key="Cancel_do_not_unmap">Cancel, do not unmap</msg>
<msg key="Categories">Categories</msg>
<msg key="Categorize_name">Categorize %name%</msg>
<msg key="Category">Category</msg>
<msg key="checked">checked</msg>
<msg key="code_export">Export code to recreate category trees</msg>
<msg key="code_necessary">Tcl code to recreate selected category trees</msg>
<msg key="Create_a_new_tree">Create a new tree</msg>
<msg key="Current_categories">Current categories</msg>
<msg key="Delete">Delete</msg>
<msg key="Delete_action_link_title">Delete checked categories</msg>
<msg key="Delete_category_link_title">Delete category and all subcategories</msg>
<msg key="Delete_category_tree_title">Delete Category Tree &quot;%tree_name%&quot;</msg>
<msg key="Deprecate">Deprecate</msg>
<msg key="Deprecate_category_link_title">Deprecate checked categories</msg>
<msg key="Deprecated">Deprecated</msg>
<msg key="Description">Description</msg>
<msg key="Edit_category">Edit category</msg>
<msg key="Edit_category_link_title">Edit this category</msg>
<msg key="Edit_parameters">Edit parameters</msg>
<msg key="Edit_tree">Edit tree</msg>
<msg key="export">Export</msg>
<msg key="here">here</msg>
<msg key="Language">Language</msg>
<msg key="lt_Are_you_sure_you_want">Are you sure you want to delete these categories:</msg>
<msg key="lt_Are_you_sure_you_want_1">Are you sure you want to delete these category links:</msg>
<msg key="lt_Are_you_sure_you_want_2">Are you sure you want to delete these synonyms:</msg>
<msg key="lt_Are_you_sure_you_want_3">Are you sure you want to delete the tree &quot;%tree_name%&quot;?</msg>
<msg key="lt_Are_you_sure_you_want_4">Are you sure you want to unmap the tree &quot;%tree_name%&quot; from &quot;%object_name%&quot;?</msg>
<msg key="lt_Categories_still_used">Categories still used</msg>
<msg key="lt_Category_Administrati">Category Administration</msg>
<msg key="lt_Category_trees_availa">Category trees available for mapping</msg>
<msg key="lt_Category_trees_mapped">Category trees mapped to &quot;%object_name%&quot;</msg>
<msg key="lt_Create_and_map_a_new_">Create and map a new category tree</msg>
<msg key="lt_Explanation_Any_categ">Explanation: Any categorization made to the source category will
also be made to the target category.</msg>
<msg key="lt_form_varsnoquote__Com">%form_vars;noquote%
Combine by
[</msg>
<msg key="lt_object_count_objects_">%object_count% objects on %page_count% pages</msg>
<msg key="lt_Search_for_a_category">Search for a category</msg>
<msg key="lt_Select_Trees_for_brow">Select Trees for browsing</msg>
<msg key="lt_There_are_instances_w">There are %instances_without_permission% more uses of this tree, but you
don't have the permission to see them.</msg>
<msg key="lt_This_is_a_site_wide_c">This is a site wide category tree</msg>
<msg key="lt_This_tree_is_not_used">This tree is not used.</msg>
<msg key="lt_This_tree_is_still_us">This tree is still used by some modules. For a complete list, please go</msg>
<msg key="lt_To_deselect_or_select">To deselect or select multiple categories use the Control-Key on your keyboard.</msg>
<msg key="Make_it_Local">Make it Local</msg>
<msg key="Make_it_Site-Wide">Make it Site-Wide</msg>
<msg key="Map_subtree">Map subtree</msg>
<msg key="Map_this_subtree">Map this subree</msg>
<msg key="Map_tree">Map tree</msg>
<msg key="Mapiing_parameters_subtree_title"></msg>
<msg key="Mapping_parameters">Mapping Parameters</msg>
<msg key="Mapping_parameters_subtree_title">Parameters of mapping to subtree &quot;%tree_name% :: %category_name%&quot;</msg>
<msg key="Mapping_parameters_tree_title">Parameters of mapping to tree &quot;%tree_name%&quot;</msg>
<msg key="multiple">multiple</msg>
<msg key="No_Cancel">No, Cancel</msg>
<msg key="None">None</msg>
<msg key="OK">OK</msg>
<msg key="optional">optional</msg>
<msg key="OR_">&gt;OR ]</msg>
<msg key="Ordering">Ordering</msg>
<msg key="Ordering_update">Update ordering</msg>
<msg key="Ordering_update_link_title">Update ordering from values in list</msg>
<msg key="Permissions_manage">Manage Permissions</msg>
<msg key="Permissions_manage_title">Permissions Managment for tree &quot;%tree_name%&quot;</msg>
<msg key="required">required</msg>
<msg key="Restore">Restore</msg>
<msg key="Restore_category_link_title">Restore checked categories</msg>
<msg key="Search_string">Search String</msg>
<msg key="selected">selected</msg>
<msg key="single">single</msg>
<msg key="SiteWide_tree">Site-Wide Tree</msg>
<msg key="This_tree_is_local">This tree is local</msg>
<msg key="Tree_copy">Tree copy</msg>
<msg key="Tree_copy_title">Copy a tree into &quot;%tree_name%&quot;</msg>
<msg key="Tree_map_title">Select a subtree of &quot;%tree_name%&quot; to map</msg>
<msg key="Tree_Name">Tree Name</msg>
<msg key="Tree_view_title">Category Tree &quot;%tree_name%&quot;</msg>
<msg key="Trees_you_can_manage">Trees you can manage</msg>
<msg key="Trees_you_can_view">Trees you can view</msg>
<msg key="Unmap">Unmap</msg>
<msg key="unmap">unmap</msg>
<msg key="Usage">Usage</msg>
<msg key="Usage_title">Modules using Category Tree &quot;%tree_name%&quot;</msg>
<msg key="Widget">Widget</msg>
<msg key="Widget_checkbox">Checkbox - let users assign multiple categories</msg>
<msg key="Widget_multiselect">Multiselect - let users assign multiple categories</msg>
<msg key="Widget_radio">Radio</msg>
<msg key="Widget_required_category">Require users to assign at least one category?</msg>
<msg key="Widget_select">Select</msg>
</message_catalog>
......@@ -8,16 +8,18 @@
<singleton-p>f</singleton-p>
<auto-mount>categories</auto-mount>
<version name="1.1.2" url="http://openacs.org/repository/apm/packages/categories-1.1.2">
<version name="1.1.3d4" url="http://openacs.org/repository/apm/packages/categories-1.1.3d4">
<owner url="mailto:timo@timohentschel.de">timo@timohentschel.de</owner>
<summary>Manage categories in category trees and let users map objects to categories.</summary>
<release-date>2008-11-06</release-date>
<description format="text/html">Datamodel for category trees with supporting API and management pages. Provides a widget for
<release-date>2013-09-08</release-date>
<description format="text/html">Datamodel for category trees with supporting API and management pages. Provides a widget for
general categorization of arbitrary objects and tracks which package instances use which category trees. Also supports localization.</description>
<maturity>0</maturity>
<license>GPL</license>
<maturity>1</maturity>
<provides url="categories" version="1.1.2"/>
<requires url="acs-kernel" version="5.5.0"/>
<provides url="categories" version="1.1.3d4"/>
<requires url="acs-kernel" version="5.8.1"/>
<callbacks>
<callback type="before-uninstall" proc="category::before_uninstall"/>
......
<h1>Categorize @name@</h1>
<h1>#categories.Categorize_name#</h1>
<if @catass_list@ not nil>
<h2> Current categories</h2>
<h2> #categories.Current_categories#</h2>
<p>@catass_list;noquote@</p>
</if>
<formtemplate id="catass"></formtemplate>
if {![exists_and_not_null object_id]} {
if {![info exists object_id] || $object_id eq ""} {
ad_complain "You must specify an object to categorize"
}
if {![exists_and_not_null container_id]} {
if {![info exists container_id] || $container_id eq ""} {
set container_id [ad_conn subsite_id]
}
......
......@@ -145,7 +145,7 @@ db_multirow -extend {url_one user_url new} content content "
set last_modified [regsub -all { } [util::age_pretty -hours_limit 0 -mode_2_fmt "%X %a" -mode_3_fmt "%x" -timestamp_ansi $last_modified -sysdate_ansi $now] {\&nbsp;}]
set user_url [acs_community_member_url -user_id $user_id]
if {[catch {set url_one [acs_sc_call -error FtsContentProvider url [list $object_id] $object_type]} errMsg]} {
if {[catch {set url_one [acs_sc::invoke -error -contract FtsContentProvider -operation url -call_args [list $object_id] -impl $object_type]} errMsg]} {
global errorCode
set url_one $errorCode
}
......
......@@ -16,6 +16,6 @@
</multiple>
</div>
<div>
<if @cat@ not nil><include src="/packages/categories/lib/contributions" orderby="@orderby@" category="@cat@" root_node_id="@node_id@"></if>
<if @cat@ not nil><include src="/packages/categories/lib/contributions" orderby="@orderby;literal@" category="@cat;literal@" root_node_id="@node_id;literal@"></if>
</div>
</div>
if {![exists_and_not_null cat]} {
set cat {}
if {![info exists cat]} {
set cat ""
}
if {![exists_and_not_null orderby]} {
if {(![info exists orderby] || $orderby eq "")} {
set orderby "object_title"
}
set user_id [ad_conn user_id]
......
OK
\ No newline at end of file
#categories.OK#
if {![exists_and_not_null object_id]} {
if {![info exists object_id] || $object_id eq ""} {
ad_complain "You must specify an item to map"
}
if {![exists_and_not_null container_id]} {
if {![info exists container_id] || $container_id eq ""} {
ad_complain "You must specify a container to map the object to"
}
......
......@@ -4,6 +4,6 @@ array set tree [category_tree::get_data $tree_id $default_locale]
multirow create categories name level pad
foreach category [category_tree::get_tree -all $tree_id $default_locale] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
multirow append categories $category_name $level [string repeat "&nbsp;" [expr {2 * $level - 2}]]
}
......@@ -12,16 +12,16 @@ ad_form -name tree_form \
-export { locale object_id ctx_id } \
-form {
{tree_id:key}
{tree_name:text {label "Name"} {html {size 50 maxlength 50}}}
{language:text(select) {label "Language"} {options $languages}}
{description:text(textarea),optional {label "Description"} {html {rows 5 cols 80}}}
{tree_name:text {label "#acs-subsite.Name#"} {html {size 50 maxlength 50}}}
{language:text(select) {label "#categories.Language#"} {options $languages}}
{description:text(textarea),optional {label "#categories.Description#"} {html {rows 5 cols 80}}}
} -new_request {
permission::require_permission -object_id $package_id -privilege category_admin
set language $locale
} -edit_request {
permission::require_permission -object_id $tree_id -privilege category_tree_write
set action Edit
util_unlist [category_tree::get_translation $tree_id $locale] tree_name description
lassign [category_tree::get_translation $tree_id $locale] tree_name description
set language $locale
} -on_submit {
set description [util_close_html_tags $description 4000]
......
......@@ -267,18 +267,7 @@ create table category_links (
create unique index category_links_rev_ix on category_links (to_category_id, from_category_id);
create or replace function inline_0 ()
returns integer as $body$ declare v_count integer; begin
select count(*) into v_count from
pg_class where lower(relname) = 'category_links_id_seq';
IF v_count = 0 THEN create sequence category_links_id_seq; END IF;
return 1;
end;$body$ language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
create sequence category_links_id_seq;
comment on table category_links is '
Stores directed graph of linked categories. If category A
......@@ -321,20 +310,7 @@ create index category_synonyms_locale_ix on category_synonyms(category_id, local
-- to sort synonyms by name
create index category_synonyms_name_ix on category_synonyms(category_id, name);
create or replace function inline_0 ()
returns integer as $body$ declare v_count integer; begin
select count(*) into v_count from
pg_class where lower(relname) = 'category_synonyms_id_seq';
IF v_count = 0 THEN create sequence category_synonyms_id_seq; END IF;
return 1;
end;$body$ language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
create sequence category_synonyms_id_seq;
comment on table category_synonyms is '
Stores multilingual synonyms of the categories.
......@@ -396,18 +372,7 @@ create table category_search (
-- to delete old queries
create index category_search_date_ix on category_search(last_queried);
create or replace function inline_0 ()
returns integer as $body$ declare v_count integer; begin
select count(*) into v_count from
pg_class where lower(relname) = 'category_search_id_seq';
IF v_count = 0 THEN create sequence category_search_id_seq; END IF;
return 1;
end;$body$ language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
create sequence category_search_id_seq;
comment on table category_search is '
Stores users multilingual search texts for category synonyms.
......
......@@ -7,28 +7,21 @@
-- This should eventually be added to the acs-service-contract installation files
create or replace function inline_0 ()
returns integer as $body$
DECLARE
v_count integer;
BEGIN
select count(*) into v_count from acs_sc_contracts
where contract_name = 'AcsObject';
IF v_count > 0 THEN return 1; END IF;
PERFORM acs_sc_contract__new(
begin;
select acs_sc_contract__new(
'AcsObject', -- contract_name
'Acs Object Id Handler' -- contract_desc
);
PERFORM acs_sc_msg_type__new(
);
select acs_sc_msg_type__new(
'AcsObject.PageUrl.InputType', -- msg_type_name
'object_id:integer' -- msg_type_spec
);
PERFORM acs_sc_msg_type__new(
);
select acs_sc_msg_type__new(
'AcsObject.PageUrl.OutputType', -- msg_type_name
'page_url:string' -- msg_type_spec
);
PERFORM acs_sc_operation__new(
);
select acs_sc_operation__new(
'AcsObject', -- contract_name
'PageUrl', -- operation_name
'Returns the package specific url to a page that displays an object', -- operation_desc
......@@ -36,66 +29,45 @@ BEGIN
1, -- operation_nargs
'AcsObject.PageUrl.InputType', -- operation_inputtype
'AcsObject.PageUrl.OutputType' -- operation_outputtype
);
return 0;
end;$body$ language 'plpgsql';
select inline_0();
drop function inline_0();
);
end;
-- there should be an implementation of this contract
-- for apm_package, user, group and other object types
-- this should eventually be added to acs-kernel
create or replace function inline_0 ()
returns integer as $body$
DECLARE
v_count integer;
BEGIN
select count(*) into v_count from user_tab_columns
where table_name = 'ACS_NAMED_OBJECTS';
IF v_count > 0 THEN return 1; END IF;
create table acs_named_objects (
object_id integer not null
constraint acs_named_objs_pk primary key
constraint acs_named_objs_object_id_fk
references acs_objects(object_id) on delete cascade,
object_name varchar(200),
package_id integer
constraint acs_named_objs_package_id_fk
references apm_packages(package_id) on delete cascade
);
create index acs_named_objs_name_ix on acs_named_objects(object_name);
create index acs_named_objs_package_ix on acs_named_objects(package_id);
return 0;
end;$body$ language 'plpgsql';
select inline_0();
drop function inline_0();
create table acs_named_objects (
object_id integer not null
constraint acs_named_objs_pk primary key
constraint acs_named_objs_object_id_fk
references acs_objects(object_id) on delete cascade,
object_name varchar(200),
package_id integer
constraint acs_named_objs_package_id_fk
references apm_packages(package_id) on delete cascade
);
create index acs_named_objs_name_ix on acs_named_objects(object_name);
create index acs_named_objs_package_ix on acs_named_objects(package_id);
create function inline_0 ()
returns integer as '
begin
PERFORM acs_object_type__create_type (
''acs_named_object'', -- object_type
''Named Object'', -- pretty_name
''Named Objects'', -- pretty_plural
''acs_object'', -- supertype
''acs_named_objects'', -- table_name
''object_id'', -- id_column
null, -- name_method
''f'',
null,
null
);
return 0;
end;' language 'plpgsql';
CREATE OR REPLACE FUNCTION inline_0 () RETURNS integer AS $$
BEGIN
PERFORM acs_object_type__create_type (
'acs_named_object', -- object_type
'Named Object', -- pretty_name
'Named Objects', -- pretty_plural
'acs_object', -- supertype
'acs_named_objects', -- table_name
'object_id', -- id_column
null, -- name_method
'f',
null,
null
);
return 0;
END;
$$ LANGUAGE plpgsql;
select inline_0 ();
drop function inline_0 ();
......@@ -6,54 +6,54 @@
-- @creation-date 2005-07-26
--
create function inline_0 ()
returns integer as '
begin
CREATE OR REPLACE FUNCTION inline_0 () RETURNS integer AS $$
BEGIN
-- We create the roles to use them on the rel_type create
PERFORM acs_rel_type__create_role(''party'', ''Party'', ''Parties'');
PERFORM acs_rel_type__create_role(''category'', ''Category'', ''Categories'');
PERFORM acs_rel_type__create_role(''meta_category'', ''Meta Category'', ''Meta Categories'');
PERFORM acs_rel_type__create_role('party', 'Party', 'Parties');
PERFORM acs_rel_type__create_role('category', 'Category', 'Categories');
PERFORM acs_rel_type__create_role('meta_category', 'Meta Category', 'Meta Categories');
-- Creating two new rel_types
PERFORM acs_rel_type__create_type (
''meta_category_rel'', -- rel_type
''Meta Category Relation'', -- pretty_name
''Meta Category Relation'', -- pretty_plural
''relationship'', -- supertype
''meta_categories'', -- table_name
''meta_category_id'', -- id_column
'meta_category_rel', -- rel_type
'Meta Category Relation', -- pretty_name
'Meta Category Relation', -- pretty_plural
'relationship', -- supertype
null, -- table_name
null, -- id_column
null, -- package_name
''category'', -- object_type_one
''category'', -- role_one
'category', -- object_type_one
'category', -- role_one
1, -- min_n_rels_one
1, -- max_n_rels_one
''category'', -- object_type_two
''category'', -- role_two
'category', -- object_type_two
'category', -- role_two
1, -- min_n_rels_two
1 -- max_n_rels_two
);
PERFORM acs_rel_type__create_type (
''user_meta_category_rel'', -- rel_type
''User Meta Category Relation'', -- pretty_name
''User Meta Category Relation'', -- pretty_plural
''relationship'', -- supertype
''user_meta_categories'', -- table_name
''user_meta_category_id'', -- id_column
'user_meta_category_rel', -- rel_type
'User Meta Category Relation', -- pretty_name
'User Meta Category Relation', -- pretty_plural
'relationship', -- supertype
null, -- table_name
null, -- id_column
null, -- package_name
''meta_category_rel'', -- object_type_one
''meta_category'', -- role_one
'meta_category_rel', -- object_type_one
'meta_category', -- role_one
1, -- min_n_rels_one
1, -- max_n_rels_one
''party'', -- object_type_two
''party'', -- role_two
'party', -- object_type_two
'party', -- role_two
1, -- min_n_rels_two
1 -- max_n_rels_two
);
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0 ();
......
......@@ -6,33 +6,48 @@
-- @creation-date 2004-02-04
--
create or replace function category_link__new (
integer, -- from_category_id
integer -- to_category_id
) returns integer as '
-- added
select define_function_args('category_link__new','from_category_id,to_category_id');
--
-- procedure category_link__new/2
--
CREATE OR REPLACE FUNCTION category_link__new(
p_from_category_id integer,
p_to_category_id integer
) RETURNS integer AS $$
-- function for adding category links
declare
p_from_category_id alias for $1;
p_to_category_id alias for $2;
DECLARE
v_link_id integer;
begin
v_link_id := nextval (''category_links_id_seq'');
BEGIN
v_link_id := nextval ('category_links_id_seq');
insert into category_links (link_id, from_category_id, to_category_id)
values (v_link_id, p_from_category_id, p_to_category_id);
return v_link_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category_link__del (
integer -- link_id
) returns integer as '
-- added
select define_function_args('category_link__del','link_id');
--
-- procedure category_link__del/1
--
CREATE OR REPLACE FUNCTION category_link__del(
p_link_id integer
) RETURNS integer AS $$
-- function for deleting category links
declare
p_link_id alias for $1;
begin
DECLARE
BEGIN
delete from category_links
where link_id = p_link_id;
return p_link_id;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -5,43 +5,40 @@
-- @creation-date 2003-04-16
--
create or replace function category__new (
integer, -- category_id
integer, -- tree_id
varchar, -- locale
varchar, -- name
varchar, -- description
integer, -- parent_id
char, -- deprecated_p
timestamp with time zone, -- creation_date
integer, -- creation_user
varchar -- creation_ip
)
returns integer as '
declare
p_category_id alias for $1;
p_tree_id alias for $2;
p_locale alias for $3;
p_name alias for $4;
p_description alias for $5;
p_parent_id alias for $6;
p_deprecated_p alias for $7;
p_creation_date alias for $8;
p_creation_user alias for $9;
p_creation_ip alias for $10;
-- added
select define_function_args('category__new','category_id,tree_id,locale,name,description,parent_id,deprecated_p,creation_date,creation_user,creation_ip');
--
-- procedure category__new/10
--
CREATE OR REPLACE FUNCTION category__new(
p_category_id integer,
p_tree_id integer,
p_locale varchar,
p_name varchar,
p_description varchar,
p_parent_id integer,
p_deprecated_p char,
p_creation_date timestamp with time zone,
p_creation_user integer,
p_creation_ip varchar
) RETURNS integer AS $$
DECLARE
v_category_id integer;
v_left_ind integer;
v_right_ind integer;
begin
BEGIN
v_category_id := acs_object__new (
p_category_id, -- object_id
''category'', -- object_type
'category', -- object_type
p_creation_date, -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
p_tree_id, -- context_id
''t'', -- security_inherit_p
't', -- security_inherit_p
p_name, -- title
null -- package_id
);
......@@ -87,28 +84,29 @@ begin
(v_category_id, p_locale, p_name, p_description);
return v_category_id;
end;
' language 'plpgsql';
create or replace function category__new_translation (
integer, -- category_id
varchar, -- locale
varchar, -- name
varchar, -- description
timestamp with time zone, -- modifying_date
integer, -- modifying_user
varchar -- modifying_ip
)
returns integer as '
declare
p_category_id alias for $1;
p_locale alias for $2;
p_name alias for $3;
p_description alias for $4;
p_modifying_date alias for $5;
p_modifying_user alias for $6;
p_modifying_ip alias for $7;
begin
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category__new_translation','category_id,locale,name,description,modifying_date,modifying_user,modifying_ip');
--
-- procedure category__new_translation/7
--
CREATE OR REPLACE FUNCTION category__new_translation(
p_category_id integer,
p_locale varchar,
p_name varchar,
p_description varchar,
p_modifying_date timestamp with time zone,
p_modifying_user integer,
p_modifying_ip varchar
) RETURNS integer AS $$
DECLARE
BEGIN
insert into category_translations
(category_id, locale, name, description)
values
......@@ -121,51 +119,72 @@ begin
where object_id = p_category_id;
return 0;
end;
' language 'plpgsql';
create or replace function category__phase_out (
integer -- category_id
)
returns integer as '
declare
p_category_id alias for $1;
begin
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category__phase_out','category_id');
--
-- procedure category__phase_out/1
--
CREATE OR REPLACE FUNCTION category__phase_out(
p_category_id integer
) RETURNS integer AS $$
DECLARE
BEGIN
update categories
set deprecated_p = ''t''
set deprecated_p = 't'
where category_id = p_category_id;
return 0;
end;
' language 'plpgsql';
create or replace function category__phase_in (
integer -- category_id
)
returns integer as '
declare
p_category_id alias for $1;
begin
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category__phase_in','category_id');
--
-- procedure category__phase_in/1
--
CREATE OR REPLACE FUNCTION category__phase_in(
p_category_id integer
) RETURNS integer AS $$
DECLARE
BEGIN
update categories
set deprecated_p = ''f''
set deprecated_p = 'f'
where category_id = p_category_id;
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category__del (
integer -- category_id
)
returns integer as '
declare
p_category_id alias for $1;
-- added
select define_function_args('category__del','category_id');
--
-- procedure category__del/1
--
CREATE OR REPLACE FUNCTION category__del(
p_category_id integer
) RETURNS integer AS $$
DECLARE
v_tree_id integer;
v_left_ind integer;
v_right_ind integer;
node record;
begin
BEGIN
select tree_id, left_ind, right_ind
into v_tree_id, v_left_ind, v_right_ind
from categories where category_id = p_category_id;
......@@ -198,28 +217,29 @@ begin
-- for debugging reasons
perform category_tree__check_nested_ind(v_tree_id);
return 0;
end;
' language 'plpgsql';
create or replace function category__edit (
integer, -- category_id
varchar, -- locale
varchar, -- name
varchar, -- description
timestamp with time zone, -- modifying_date
integer, -- modifying_user
varchar -- modifying_ip
)
returns integer as '
declare
p_category_id alias for $1;
p_locale alias for $2;
p_name alias for $3;
p_description alias for $4;
p_modifying_date alias for $5;
p_modifying_user alias for $6;
p_modifying_ip alias for $7;
begin
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category__edit','category_id,locale,name,description,modifying_date,modifying_user,modifying_ip');
--
-- procedure category__edit/7
--
CREATE OR REPLACE FUNCTION category__edit(
p_category_id integer,
p_locale varchar,
p_name varchar,
p_description varchar,
p_modifying_date timestamp with time zone,
p_modifying_user integer,
p_modifying_ip varchar
) RETURNS integer AS $$
DECLARE
BEGIN
-- change category name
update category_translations
set name = p_name,
......@@ -234,26 +254,31 @@ begin
where object_id = p_category_id;
return 0;
end;
' language 'plpgsql';
create or replace function category__change_parent (
integer, -- category_id
integer, -- tree_id
integer -- parent_id
)
returns integer as '
declare
p_category_id alias for $1;
p_tree_id alias for $2;
p_parent_id alias for $3;
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category__change_parent','category_id,tree_id,parent_id');
--
-- procedure category__change_parent/3
--
CREATE OR REPLACE FUNCTION category__change_parent(
p_category_id integer,
p_tree_id integer,
p_parent_id integer
) RETURNS integer AS $$
DECLARE
v_old_left_ind integer;
v_old_right_ind integer;
v_new_left_ind integer;
v_new_right_ind integer;
v_width integer;
begin
BEGIN
update categories
set parent_id = p_parent_id
where category_id = p_category_id;
......@@ -323,23 +348,31 @@ begin
perform category_tree__check_nested_ind(p_tree_id);
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category__name (
integer -- category_id
)
returns integer as '
declare
p_category_id alias for $1;
-- added
select define_function_args('category__name','category_id');
--
-- procedure category__name/1
--
CREATE OR REPLACE FUNCTION category__name(
p_category_id integer
) RETURNS integer AS $$
DECLARE
v_name varchar;
begin
BEGIN
select name into v_name
from category_translations
where category_id = p_category_id
and locale = ''en_US'';
and locale = 'en_US';
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -7,13 +7,21 @@
-- @creation-date 2004-01-08
--
create or replace function category_synonym__convert_string (varchar(100))
returns varchar(200) as '
-- added
select define_function_args('category_synonym__convert_string','name');
--
-- procedure category_synonym__convert_string/1
--
CREATE OR REPLACE FUNCTION category_synonym__convert_string(
p_name varchar(100)
) RETURNS varchar(200) AS $$
-- return string to build search index
declare
p_name alias for $1;
DECLARE
v_index_string varchar(200);
begin
BEGIN
-- convert string to uppercase and substitute special chars
-- TODO: complete
v_index_string := upper (
......@@ -23,39 +31,57 @@ begin
replace (
replace (
replace (
replace (p_name, ''ä'', ''AE''),
''Ä'', ''AE''),
''ö'', ''OE''),
''Ö'', ''OE''),
''ü'', ''UE''),
''Ü'', ''UE''),
''ß'', ''SS''));
replace (p_name, 'ä', 'AE'),
'Ä', 'AE'),
'ö', 'OE'),
'Ö', 'OE'),
'ü', 'UE'),
'Ü', 'UE'),
'ß', 'SS'));
return ('' '' || v_index_string || '' '');
end;' language 'plpgsql';
return (' ' || v_index_string || ' ');
END;
$$ LANGUAGE plpgsql;
create or replace function category_synonym__get_similarity (integer, integer, bigint)
returns integer as '
-- added
select define_function_args('category_synonym__get_similarity','len1,len2,matches');
--
-- procedure category_synonym__get_similarity/3
--
CREATE OR REPLACE FUNCTION category_synonym__get_similarity(
p_len1 integer,
p_len2 integer,
p_matches bigint
) RETURNS integer AS $$
-- calculates similarity of two strings
declare
p_len1 alias for $1;
p_len2 alias for $2;
p_matches alias for $3;
begin
DECLARE
BEGIN
return (p_matches * 200 / (p_len1 + p_len2));
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category_synonym__search (varchar(100), varchar(5))
returns integer as '
-- added
select define_function_args('category_synonym__search','search_text,locale');
--
-- procedure category_synonym__search/2
--
CREATE OR REPLACE FUNCTION category_synonym__search(
p_search_text varchar(100),
p_locale varchar(5)
) RETURNS integer AS $$
-- return id for search string
declare
p_search_text alias for $1;
p_locale alias for $2;
DECLARE
v_search_text varchar(200);
v_query_id integer;
v_len integer;
v_i integer;
begin
BEGIN
-- check if search text already exists
select query_id into v_query_id
from category_search
......@@ -66,20 +92,20 @@ begin
if (v_query_id is not null) then
update category_search
set queried_count = queried_count + 1,
last_queried = date(''now'')
last_queried = date('now')
where query_id = v_query_id;
return (v_query_id);
end if;
-- get new search query id
v_query_id := nextval (''category_search_id_seq'');
v_query_id := nextval ('category_search_id_seq');
-- convert string to uppercase and substitute special chars
v_search_text := category_synonym__convert_string (p_search_text);
-- insert search data
insert into category_search (query_id, search_text, locale, queried_count, last_queried)
values (v_query_id, p_search_text, p_locale, 1, date(''now''));
values (v_query_id, p_search_text, p_locale, 1, date('now'));
-- build search index
v_len := length (v_search_text) - 2;
......@@ -104,19 +130,28 @@ begin
group by s.synonym_id, s.name;
return (v_query_id);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category_synonym__reindex','synonym_id,name,locale');
create or replace function category_synonym__reindex (integer, varchar(100), varchar(5))
returns integer as '
--
-- procedure category_synonym__reindex/3
--
CREATE OR REPLACE FUNCTION category_synonym__reindex(
p_synonym_id integer,
p_name varchar(100),
p_locale varchar(5)
) RETURNS integer AS $$
-- build search index for synonym
declare
p_synonym_id alias for $1;
p_name alias for $2;
p_locale alias for $3;
DECLARE
v_name varchar(200);
v_len integer;
v_i integer;
begin
BEGIN
-- delete old search results for this synonym
delete from category_search_results
where synonym_id = p_synonym_id;
......@@ -151,40 +186,58 @@ begin
group by s.query_id, s.search_text;
return (1);
end;' language 'plpgsql';
create or replace function category_synonym__new (varchar(100), varchar(5), integer, integer)
returns integer as '
declare
p_name alias for $1;
p_locale alias for $2;
p_category_id alias for $3;
p_synonym_id alias for $4;
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category_synonym__new','name,locale,category_id,synonym_id');
--
-- procedure category_synonym__new/4
--
CREATE OR REPLACE FUNCTION category_synonym__new(
p_name varchar(100),
p_locale varchar(5),
p_category_id integer,
p_synonym_id integer
) RETURNS integer AS $$
DECLARE
v_synonym_id integer;
begin
BEGIN
-- get new synonym_id
if (p_synonym_id is null) then
v_synonym_id := nextval (''category_synonyms_id_seq'');
v_synonym_id := nextval ('category_synonyms_id_seq');
else
v_synonym_id := p_synonym_id;
end if;
-- insert synonym data
insert into category_synonyms (synonym_id, category_id, locale, name, synonym_p)
values (v_synonym_id, p_category_id, p_locale, p_name, ''t'');
values (v_synonym_id, p_category_id, p_locale, p_name, 't');
-- insert in synonym index and search results
PERFORM category_synonym__reindex (v_synonym_id, p_name, p_locale);
return (v_synonym_id);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category_synonym__del','synonym_id');
create or replace function category_synonym__del (integer)
returns integer as '
--
-- procedure category_synonym__del/1
--
CREATE OR REPLACE FUNCTION category_synonym__del(
p_synonym_id integer
) RETURNS integer AS $$
-- delete synonym
declare
p_synonym_id alias for $1;
begin
DECLARE
BEGIN
-- delete search results
delete from category_search_results
where synonym_id = p_synonym_id;
......@@ -198,15 +251,24 @@ begin
where synonym_id = p_synonym_id;
return (1);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category_synonym__edit (integer, varchar(100), varchar(5))
returns integer as '
declare
p_synonym_id alias for $1;
p_new_name alias for $2;
p_locale alias for $3;
begin
-- added
select define_function_args('category_synonym__edit','synonym_id,new_name,locale');
--
-- procedure category_synonym__edit/3
--
CREATE OR REPLACE FUNCTION category_synonym__edit(
p_synonym_id integer,
p_new_name varchar(100),
p_locale varchar(5)
) RETURNS integer AS $$
DECLARE
BEGIN
-- update synonym data
update category_synonyms
set name = p_new_name,
......@@ -217,49 +279,64 @@ begin
PERFORM category_synonym__reindex (p_synonym_id, p_new_name, p_locale);
return (p_synonym_id);
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-----
-- triggers for category synonyms
-----
create or replace function category_synonym__new_cat_trans_trg ()
returns trigger as '
--
-- procedure category_synonym__new_cat_trans_trg/0
--
CREATE OR REPLACE FUNCTION category_synonym__new_cat_trans_trg(
) RETURNS trigger AS $$
-- trigger function for inserting category translation
declare
DECLARE
v_synonym_id integer;
begin
BEGIN
-- create synonym
v_synonym_id := category_synonym__new (NEW.name, NEW.locale, NEW.category_id, null);
-- mark synonym as not editable for users
update category_synonyms
set synonym_p = ''f''
set synonym_p = 'f'
where synonym_id = v_synonym_id;
return new;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
--
-- procedure category_synonym__edit_cat_trans_trg/0
--
CREATE OR REPLACE FUNCTION category_synonym__edit_cat_trans_trg(
create or replace function category_synonym__edit_cat_trans_trg ()
returns trigger as '
) RETURNS trigger AS $$
-- trigger function for updating a category translation
declare
DECLARE
v_synonym_id integer;
begin
BEGIN
-- get synonym_id of updated category translation
select synonym_id into v_synonym_id
from category_synonyms
where category_id = OLD.category_id
and name = OLD.name
and locale = OLD.locale
and synonym_p = ''f'';
and synonym_p = 'f';
-- update synonym
PERFORM category_synonym__edit (v_synonym_id, NEW.name, NEW.locale);
return new;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create trigger category_synonym__insert_cat_trans_trg
......
This diff is collapsed.
......@@ -19,23 +19,25 @@ comment on column category_tree_map.require_category_p is '
drop function category_tree__map (integer,integer,integer);
create or replace function category_tree__map (
integer, -- object_id
integer, -- tree_id
integer, -- subtree_category_id
char, -- assign_single_p
char -- require_category_p
)
returns integer as '
declare
p_object_id alias for $1;
p_tree_id alias for $2;
p_subtree_category_id alias for $3;
p_assign_single_p alias for $4;
p_require_category_p alias for $5;
-- added
select define_function_args('category_tree__map','object_id,tree_id,subtree_category_id,assign_single_p,require_category_p');
--
-- procedure category_tree__map/5
--
CREATE OR REPLACE FUNCTION category_tree__map(
p_object_id integer,
p_tree_id integer,
p_subtree_category_id integer,
p_assign_single_p char,
p_require_category_p char
) RETURNS integer AS $$
DECLARE
v_map_count integer;
begin
BEGIN
select count(*)
into v_map_count
from category_tree_map
......@@ -50,5 +52,6 @@ begin
p_assign_single_p, p_require_category_p);
end if;
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -181,20 +181,27 @@ comment on column category_search_results.similarity is '
-- insert existing category translations as synonyms
-- and build synonym index
create function inline_0 ()
returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
rec_translations record;
v_synonym_id integer;
begin
BEGIN
for rec_translations in
select category_id, name, locale
from category_translations
loop
v_synonym_id := category_synonym__new (rec_translations.name, rec_translations.locale, rec_translations.category_id, null);
update category_synonyms set synonym_p = ''f'' where synonym_id = v_synonym_id;
update category_synonyms set synonym_p = 'f' where synonym_id = v_synonym_id;
end loop;
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0 ();
drop function inline_0 ();
......@@ -21,17 +21,23 @@ drop trigger category_synonym__update_cat_trans_trg on category_translations;
-- fix entries destroyed by old procs
--
----
create function inline_0 ()
returns integer as '
declare
--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(
) RETURNS integer AS $$
DECLARE
v_name category_translations.name%TYPE;
v_synonym_cursor RECORD;
begin
BEGIN
FOR v_synonym_cursor IN
select category_id,
locale
from category_synonyms
where synonym_p = ''f''
where synonym_p = 'f'
LOOP
select name into v_name
from category_translations
......@@ -45,8 +51,9 @@ begin
END LOOP;
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0 ();
drop function inline_0 ();
......@@ -58,42 +65,56 @@ drop function inline_0 ();
--
-----
create or replace function category_synonym__new_cat_trans_trg ()
returns trigger as '
--
-- procedure category_synonym__new_cat_trans_trg/0
--
CREATE OR REPLACE FUNCTION category_synonym__new_cat_trans_trg(
) RETURNS trigger AS $$
-- trigger function for inserting category translation
declare
DECLARE
v_synonym_id integer;
begin
BEGIN
-- create synonym
v_synonym_id := category_synonym__new (NEW.name, NEW.locale, NEW.category_id, null);
-- mark synonym as not editable for users
update category_synonyms
set synonym_p = ''f''
set synonym_p = 'f'
where synonym_id = v_synonym_id;
return new;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
create or replace function category_synonym__edit_cat_trans_trg ()
returns trigger as '
--
-- procedure category_synonym__edit_cat_trans_trg/0
--
CREATE OR REPLACE FUNCTION category_synonym__edit_cat_trans_trg(
) RETURNS trigger AS $$
-- trigger function for updating a category translation
declare
DECLARE
v_synonym_id integer;
begin
BEGIN
-- get synonym_id of updated category translation
select synonym_id into v_synonym_id
from category_synonyms
where category_id = OLD.category_id
and name = OLD.name
and locale = OLD.locale
and synonym_p = ''f'';
and synonym_p = 'f';
-- update synonym
PERFORM category_synonym__edit (v_synonym_id, NEW.name, NEW.locale);
return new;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-----
......@@ -118,25 +139,25 @@ execute procedure category_synonym__edit_cat_trans_trg();
-- fix them to have spaces
--
-----
create or replace function category__edit (
integer, -- category_id
varchar, -- locale
varchar, -- name
varchar, -- description
timestamp with time zone, -- modifying_date
integer, -- modifying_user
varchar -- modifying_ip
)
returns integer as '
declare
p_category_id alias for $1;
p_locale alias for $2;
p_name alias for $3;
p_description alias for $4;
p_modifying_date alias for $5;
p_modifying_user alias for $6;
p_modifying_ip alias for $7;
begin
-- added
select define_function_args('category__edit','category_id,locale,name,description,modifying_date,modifying_user,modifying_ip');
--
-- procedure category__edit/7
--
CREATE OR REPLACE FUNCTION category__edit(
p_category_id integer,
p_locale varchar,
p_name varchar,
p_description varchar,
p_modifying_date timestamp with time zone,
p_modifying_user integer,
p_modifying_ip varchar
) RETURNS integer AS $$
DECLARE
BEGIN
-- change category name
update category_translations
set name = p_name,
......@@ -151,5 +172,6 @@ begin
where object_id = p_category_id;
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -2,25 +2,26 @@ alter table category_tree_map add column widget varchar(20);
drop function category_tree__map ( integer, integer, integer, char, char );
create or replace function category_tree__map (
integer, -- object_id
integer, -- tree_id
integer, -- subtree_category_id
char, -- assign_single_p
char, -- require_category_p
varchar -- widget
)
returns integer as '
declare
p_object_id alias for $1;
p_tree_id alias for $2;
p_subtree_category_id alias for $3;
p_assign_single_p alias for $4;
p_require_category_p alias for $5;
p_widget alias for $6;
-- added
select define_function_args('category_tree__map','object_id,tree_id,subtree_category_id,assign_single_p,require_category_p,widget');
--
-- procedure category_tree__map/6
--
CREATE OR REPLACE FUNCTION category_tree__map(
p_object_id integer,
p_tree_id integer,
p_subtree_category_id integer,
p_assign_single_p char,
p_require_category_p char,
p_widget varchar
) RETURNS integer AS $$
DECLARE
v_map_count integer;
begin
BEGIN
select count(*)
into v_map_count
from category_tree_map
......@@ -35,5 +36,6 @@ begin
p_assign_single_p, p_require_category_p, p_widget);
end if;
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- add missing alias for $1
create or replace function category__name (
integer -- category_id
)
returns integer as '
declare
p_category_id alias for $1;
-- added
select define_function_args('category__name','category_id');
--
-- procedure category__name/1
--
CREATE OR REPLACE FUNCTION category__name(
p_category_id integer
) RETURNS integer AS $$
DECLARE
v_name varchar;
begin
BEGIN
select name into v_name
from category_translations
where category_id = p_category_id
and locale = ''en_US'';
and locale = 'en_US';
return 0;
end;
' language 'plpgsql';
\ No newline at end of file
END;
$$ LANGUAGE plpgsql;
\ No newline at end of file
create or replace function category_tree__copy (
integer, -- source_tree
integer, -- dest_tree
integer, -- creation_user
varchar -- creation_ip
)
returns integer as '
declare
p_source_tree alias for $1;
p_dest_tree alias for $2;
p_creation_user alias for $3;
p_creation_ip alias for $4;
-- added
select define_function_args('category_tree__copy','source_tree,dest_tree,creation_user,creation_ip');
--
-- procedure category_tree__copy/4
--
CREATE OR REPLACE FUNCTION category_tree__copy(
p_source_tree integer,
p_dest_tree integer,
p_creation_user integer,
p_creation_ip varchar
) RETURNS integer AS $$
DECLARE
v_new_left_ind integer;
v_category_id integer;
source record;
begin
BEGIN
select coalesce(max(right_ind),0) into v_new_left_ind
from categories
where tree_id = p_dest_tree;
......@@ -23,7 +24,7 @@ begin
v_category_id := acs_object__new (
null,
''category'', -- object_type
'category', -- object_type
now(), -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
......@@ -59,5 +60,6 @@ begin
perform category_tree__check_nested_ind(p_dest_tree);
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
-- source was undeclared.
-- fraber 110322: fixed syntax error from OpenACS?!?
create or replace function category_tree__copy (
integer, -- source_tree
integer, -- dest_tree
integer, -- creation_user
varchar -- creation_ip
)
returns integer as '
declare
p_source_tree alias for $1;
p_dest_tree alias for $2;
p_creation_user alias for $3;
p_creation_ip alias for $4;
-- added
select define_function_args('category_tree__copy','source_tree,dest_tree,creation_user,creation_ip');
--
-- procedure category_tree__copy/4
--
CREATE OR REPLACE FUNCTION category_tree__copy(
p_source_tree integer,
p_dest_tree integer,
p_creation_user integer,
p_creation_ip varchar
) RETURNS integer AS $$
DECLARE
v_new_left_ind integer;
v_category_id integer;
source record;
begin
BEGIN
select coalesce(max(right_ind),0) into v_new_left_ind
from categories
where tree_id = p_dest_tree;
......@@ -27,8 +27,7 @@ begin
for source in (select category_id, parent_id, left_ind, right_ind from categories where tree_id = p_source_tree) loop
v_category_id := acs_object__new (
null,
''category'', -- object_type
'category', -- object_type
now(), -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
......@@ -42,11 +41,11 @@ begin
end loop;
-- correct parent_ids
update categories
update categories c
set parent_id = (select t.category_id
from categories s, categories t
where s.category_id = categories.parent_id
and t.tree_id = p_dest_tree
where s.category_id = c.parent_id
and t.tree_id = copy.dest_tree
and s.left_ind + v_new_left_ind = t.left_ind)
where tree_id = p_dest_tree;
......@@ -64,6 +63,7 @@ begin
perform category_tree__check_nested_ind(p_dest_tree);
return 0;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -4,43 +4,40 @@
-- @author Jeff Davis <davis@xarg.net>
-- @creation-date 2005-02-06
create or replace function category__new (
integer, -- category_id
integer, -- tree_id
varchar, -- locale
varchar, -- name
varchar, -- description
integer, -- parent_id
char, -- deprecated_p
timestamp with time zone, -- creation_date
integer, -- creation_user
varchar -- creation_ip
)
returns integer as '
declare
p_category_id alias for $1;
p_tree_id alias for $2;
p_locale alias for $3;
p_name alias for $4;
p_description alias for $5;
p_parent_id alias for $6;
p_deprecated_p alias for $7;
p_creation_date alias for $8;
p_creation_user alias for $9;
p_creation_ip alias for $10;
-- added
select define_function_args('category__new','category_id,tree_id,locale,name,description,parent_id,deprecated_p,creation_date,creation_user,creation_ip');
--
-- procedure category__new/10
--
CREATE OR REPLACE FUNCTION category__new(
p_category_id integer,
p_tree_id integer,
p_locale varchar,
p_name varchar,
p_description varchar,
p_parent_id integer,
p_deprecated_p char,
p_creation_date timestamp with time zone,
p_creation_user integer,
p_creation_ip varchar
) RETURNS integer AS $$
DECLARE
v_category_id integer;
v_left_ind integer;
v_right_ind integer;
begin
BEGIN
v_category_id := acs_object__new (
p_category_id, -- object_id
''category'', -- object_type
'category', -- object_type
p_creation_date, -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
p_tree_id, -- context_id
''t'', -- security_inherit_p
't', -- security_inherit_p
p_name, -- title
null -- package_id
);
......@@ -86,38 +83,37 @@ begin
(v_category_id, p_locale, p_name, p_description);
return v_category_id;
end;
' language 'plpgsql';
create or replace function category_tree__new (
integer, -- tree_id
varchar, -- locale
varchar, -- tree_name
varchar, -- description
char, -- site_wide_p
timestamp with time zone, -- creation_date
integer, -- creation_user
varchar, -- creation_ip
integer -- context_id
)
returns integer as '
declare
p_tree_id alias for $1;
p_locale alias for $2;
p_tree_name alias for $3;
p_description alias for $4;
p_site_wide_p alias for $5;
p_creation_date alias for $6;
p_creation_user alias for $7;
p_creation_ip alias for $8;
p_context_id alias for $9;
END;
$$ LANGUAGE plpgsql;
-- added
select define_function_args('category_tree__new','tree_id,locale,tree_name,description,site_wide_p,creation_date,creation_user,creation_ip,context_id');
--
-- procedure category_tree__new/9
--
CREATE OR REPLACE FUNCTION category_tree__new(
p_tree_id integer,
p_locale varchar,
p_tree_name varchar,
p_description varchar,
p_site_wide_p char,
p_creation_date timestamp with time zone,
p_creation_user integer,
p_creation_ip varchar,
p_context_id integer
) RETURNS integer AS $$
DECLARE
v_tree_id integer;
begin
BEGIN
v_tree_id := acs_object__new (
p_tree_id, -- object_id
''category_tree'', -- object_type
'category_tree', -- object_type
p_creation_date, -- creation_date
p_creation_user, -- creation_user
p_creation_ip, -- creation_ip
......@@ -134,17 +130,17 @@ begin
perform acs_permission__grant_permission (
v_tree_id, -- object_id
p_creation_user, -- grantee_id
''category_tree_read'' -- privilege
'category_tree_read' -- privilege
);
perform acs_permission__grant_permission (
v_tree_id, -- object_id
p_creation_user, -- grantee_id
''category_tree_write'' -- privilege
'category_tree_write' -- privilege
);
perform acs_permission__grant_permission (
v_tree_id, -- object_id
p_creation_user, -- grantee_id
''category_tree_grant_permissions'' -- privilege
'category_tree_grant_permissions' -- privilege
);
insert into category_tree_translations
......@@ -153,6 +149,7 @@ begin
(v_tree_id, p_locale, p_tree_name, p_description);
return v_tree_id;
end;
' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
......@@ -6,54 +6,54 @@
-- @creation-date 2005-07-26
--
create function inline_0 ()
returns integer as '
begin
CREATE OR REPLACE FUNCTION inline_0 () RETURNS integer AS $$
BEGIN
-- We create two roles to use them on the rel_type create
PERFORM acs_rel_type__create_role(''party'', ''Party'', ''Parties'');
PERFORM acs_rel_type__create_role(''category'', ''Category'', ''Categories'');
PERFORM acs_rel_type__create_role(''meta_category'', ''Meta Category'', ''Meta Categories'');
PERFORM acs_rel_type__create_role('party', 'Party', 'Parties');
PERFORM acs_rel_type__create_role('category', 'Category', 'Categories');
PERFORM acs_rel_type__create_role('meta_category', 'Meta Category', 'Meta Categories');
-- Creating two new rel_types
PERFORM acs_rel_type__create_type (
''meta_category_rel'', -- rel_type
''Meta Category Relation'', -- pretty_name
''Meta Category Relation'', -- pretty_plural
''relationship'', -- supertype
''meta_categories'', -- table_name
''meta_category_id'', -- id_column
'meta_category_rel', -- rel_type
'Meta Category Relation', -- pretty_name
'Meta Category Relation', -- pretty_plural
'relationship', -- supertype
'meta_categories', -- table_name
'meta_category_id', -- id_column
null, -- package_name
''category'', -- object_type_one
''category'', -- role_one
'category', -- object_type_one
'category', -- role_one
1, -- min_n_rels_one
1, -- max_n_rels_one
''category'', -- object_type_two
''category'', -- role_two
'category', -- object_type_two
'category', -- role_two
1, -- min_n_rels_two
1 -- max_n_rels_two
);
PERFORM acs_rel_type__create_type (
''user_meta_category_rel'', -- rel_type
''User Meta Category Relation'', -- pretty_name
''User Meta Category Relation'', -- pretty_plural
''relationship'', -- supertype
''user_meta_categories'', -- table_name
''user_meta_category_id'', -- id_column
'user_meta_category_rel', -- rel_type
'User Meta Category Relation', -- pretty_name
'User Meta Category Relation', -- pretty_plural
'relationship', -- supertype
'user_meta_categories', -- table_name
'user_meta_category_id', -- id_column
null, -- package_name
''meta_category_rel'', -- object_type_one
''meta_category'', -- role_one
'meta_category_rel', -- object_type_one
'meta_category', -- role_one
1, -- min_n_rels_one
1, -- max_n_rels_one
''party'', -- object_type_two
''party'', -- role_two
'party', -- object_type_two
'party', -- role_two
1, -- min_n_rels_two
1 -- max_n_rels_two
);
return 0;
end;' language 'plpgsql';
END;
$$ LANGUAGE plpgsql;
select inline_0 ();
......
......@@ -504,7 +504,7 @@ ad_proc -private category::context_bar { tree_id locale object_id {ctx_id ""}} {
if {$object_id ne ""} {
set context_bar [list [category::get_object_context $object_id] [list [export_vars -no_empty -base object-map {locale object_id ctx_id}] [_ categories.cadmin]]]
} else {
set context_bar [list [list ".?[export_vars -no_empty {locale ctx_id}]" [_ categories.cadmin]]]
set context_bar [list [list [export_vars -base . -no_empty {locale ctx_id}] [_ categories.cadmin]]]
}
lappend context_bar [list [export_vars -no_empty -base tree-view {tree_id locale object_id ctx_id}] [category_tree::get_name $tree_id $locale]]
......
......@@ -27,8 +27,8 @@ ad_proc -public category::ad_form::add_widgets {
set category_trees [category_tree::get_mapped_trees $container_object_id]
foreach tree $category_trees {
util_unlist $tree tree_id name subtree_id assign_single_p require_category_p widget
if {[lsearch -exact $excluded_trees $tree_id] > -1} {
lassign $tree tree_id name subtree_id assign_single_p require_category_p widget
if {$tree_id in $excluded_trees} {
continue
}
set options ""
......@@ -67,14 +67,43 @@ ad_proc -public category::ad_form::get_categories {
set category_trees [category_tree::get_mapped_trees $container_object_id]
set category_ids [list]
foreach tree $category_trees {
util_unlist $tree tree_id name subtree_id assign_single_p require_category_p widget
lassign $tree tree_id name subtree_id assign_single_p require_category_p widget
upvar #[template::adp_level] \
__category__ad_form__$element_name\_${tree_id} my_category_ids
if {[info exists my_category_ids]} {
eval lappend category_ids $my_category_ids
lappend category_ids {*}$my_category_ids
} else {
ns_log Warning "category::ad_form::get_categories: __category__ad_form__$element_name\_${tree_id} for tree $tree_id not found"
}
}
return $category_ids
}
# Antonio Pisano 2014-10-15
# This proc was added because, when editing an existing object, one should get
# its mapped categories and use their values to eventually fill the widget we
# have created by 'category::ad_form::add_widgets'.
# Otherwise, we will always see an empty widget when editing, even when mappings exist.
ad_proc -public category::ad_form::fill_widgets {
{-container_object_id:required}
{-categorized_object_id}
{-element_name "category_id"}
} {
Reads mapped categories values from categorized object and sets them
into its auto-generated category form widgets. To be used in the
-edit_request clause of ad_form.
@author Antonio Pisano (antonio@elettrotecnica.it)
} {
# For each mapped tree...
foreach tree [category_tree::get_mapped_trees $container_object_id] {
lassign $tree tree_id name subtree_id assign_single_p require_category_p widget
# ...get reference to this tree's form widget...
upvar #[template::adp_level] \
__category__ad_form__$element_name\_${tree_id} my_category_ids
# ...and set its value to the categories mapped for this object.
set categories [category::get_mapped_categories -tree_id $tree_id $categorized_object_id]
set my_category_ids $categories
}
}
......@@ -146,7 +146,7 @@ ad_proc -public category::list::get_pretty_list {
set result ""
set old_tree_id 0
foreach category $sorted_categories {
util_unlist $category category_id category_name tree_id tree_name
lassign $category category_id category_name tree_id tree_name
set category_name [ad_quotehtml $category_name]
if {$category_link_eval ne ""} {
......@@ -157,10 +157,10 @@ ad_proc -public category::list::get_pretty_list {
set remove_link [uplevel $uplevel concat $remove_link_eval]
}
if {$category_link ne ""} {
set category_name "<a href=\"$category_link\"$cat_link_html>$category_name</a>"
set category_name "<a href=\"[ns_quotehtml $category_link]\"$cat_link_html>$category_name</a>"
}
if {$remove_link ne ""} {
append category_name "&nbsp;<a href=\"$remove_link\" title=\"Remove this category\">$remove_link_text</a>"
append category_name "&nbsp;<a href=\"[ns_quotehtml $remove_link]\" title=\"Remove this category\">$remove_link_text</a>"
}
if {$tree_id != $old_tree_id} {
......@@ -172,7 +172,7 @@ ad_proc -public category::list::get_pretty_list {
set tree_link [uplevel $uplevel concat $tree_link_eval]
}
if {$tree_link ne ""} {
set tree_name "<a href=\"$tree_link\"$cat_tree_link_html>$tree_name</a>"
set tree_name "<a href=\"[ns_quotehtml $tree_link]\"$cat_tree_link_html>$tree_name</a>"
}
append result "$tree_name$tree_colon$category_name"
} else {
......@@ -306,7 +306,7 @@ ad_proc -public category::list::prepare_display {
}
foreach category_id $row($category_column) {
set tree_id [category::get_tree $category_id]
if {[lsearch -integer $valid_tree_ids $tree_id] > -1} {
if {$tree_id in $valid_tree_ids} {
lappend tree_categories($tree_id) [list $category_id [category::get_name $category_id $locale]]
}
}
......@@ -317,13 +317,13 @@ ad_proc -public category::list::prepare_display {
set pretty_category_list ""
foreach category $tree_categories($tree_id) {
util_unlist $category category_id category_name
lassign $category category_id category_name
set category_name [ad_quotehtml $category_name]
if {$category_link_eval ne ""} {
set category_link [uplevel 1 concat $category_link_eval]
}
if {$category_link ne ""} {
set category_name "<a href=\"$category_link\"$cat_link_html>$category_name</a>"
set category_name "<a href=\"[ns_quotehtml $category_link]\"$cat_link_html>$category_name</a>"
}
if {$pretty_category_list ne ""} {
append pretty_category_list "$category_delimiter$category_name"
......@@ -364,7 +364,7 @@ ad_proc -public category::list::prepare_display {
set valid_categories ""
foreach category_id $row($category_column) {
set tree_id [category::get_tree $category_id]
if {[lsearch -integer $valid_tree_ids $tree_id] > -1} {
if {$tree_id in $valid_tree_ids} {
lappend valid_categories $category_id
}
}
......@@ -494,7 +494,7 @@ ad_proc -public category::list::elements {
# pretty list of category-names
set result ""
foreach tree $trees {
util_unlist $tree tree_name tree_id
lassign $tree tree_name tree_id
append result "$categories_column\_$tree_id {
label \"$tree_name\"
display_template {[regsub -all "@$name\.$categories_column\(;noquote\)?@" $display_template "@$name\.$categories_column\_$tree_id\\1@"]}
......
......@@ -22,7 +22,7 @@ namespace eval category_tree {
} {
db_1row get_tree_data "" -column_array tree
util_unlist [get_translation $tree_id $locale] tree(tree_name) tree(description)
lassign [get_translation $tree_id $locale] tree(tree_name) tree(description)
return [array get tree]
}
......@@ -302,7 +302,7 @@ namespace eval category_tree {
set result ""
if {$subtree_id eq ""} {
foreach category $tree {
util_unlist $category category_id deprecated_p level
lassign $category category_id deprecated_p level
if {$all_p || $deprecated_p == "f"} {
lappend result [list $category_id [category::get_name $category_id $locale] $deprecated_p $level]
}
......@@ -311,7 +311,7 @@ namespace eval category_tree {
set in_subtree_p 0
set subtree_level 0
foreach category $tree {
util_unlist $category category_id deprecated_p level
lassign $category category_id deprecated_p level
if {$level <= $subtree_level} {
set in_subtree_p 0
}
......@@ -360,18 +360,18 @@ namespace eval category_tree {
}
set tree_id_old $tree_id
lappend tree [list $category_id [ad_decode "$invalid_p$deprecated_p" "" f t] $cur_level]
if { [expr {$right_ind - $left_ind}] > 1} {
if { $right_ind - $left_ind > 1} {
incr cur_level 1
set invalid_p "$invalid_p$deprecated_p"
set stack [linsert $stack 0 [list $right_ind $invalid_p]]
} else {
incr right_ind 1
while {$right_ind == [lindex [lindex $stack 0] 0] && $cur_level > 0} {
while {$right_ind == [lindex $stack 0 0] && $cur_level > 0} {
incr cur_level -1
incr right_ind 1
set stack [lrange $stack 1 end]
}
set invalid_p [lindex [lindex $stack 0] 1]
set invalid_p [lindex $stack 0 1]
}
}
if {$tree_id_old != 0} {
......@@ -391,18 +391,18 @@ namespace eval category_tree {
set tree [list]
db_foreach flush_cache "" {
lappend tree [list $category_id [ad_decode "$invalid_p$deprecated_p" "" f t] $cur_level]
if { [expr {$right_ind - $left_ind}] > 1} {
if { $right_ind - $left_ind > 1} {
incr cur_level 1
set invalid_p "$invalid_p$deprecated_p"
set stack [linsert $stack 0 [list $right_ind $invalid_p]]
} else {
incr right_ind 1
while {$right_ind == [lindex [lindex $stack 0] 0] && $cur_level > 0} {
while {$right_ind == [lindex $stack 0 0] && $cur_level > 0} {
incr cur_level -1
incr right_ind 1
set stack [lrange $stack 1 end]
}
set invalid_p [lindex [lindex $stack 0] 1]
set invalid_p [lindex $stack 0 1]
}
}
if {[info exists category_id]} {
......@@ -554,10 +554,10 @@ ad_proc -public category_tree::get_multirow {
</pre>
@parameter tree_id tree_id or container_id must be provided.
@parameter container_id returns all mapped trees for the given container_id
@parameter category_counts list of category_id and counts {catid count cat count ... }
@parameter datasource the name of the datasource to create.
@param tree_id tree_id or container_id must be provided.
@param container_id returns all mapped trees for the given container_id
@param category_counts list of category_id and counts {catid count cat count ... }
@param datasource the name of the datasource to create.
@author Jeff Davis davis@xarg.net
} {
......@@ -584,9 +584,9 @@ ad_proc -public category_tree::get_multirow {
template::multirow create $datasource tree_id tree_name category_id category_name level pad deprecated_p count child_sum
}
foreach mapped_tree $mapped_trees {
foreach {tree_id tree_name subtree_id assign_single_p require_category_p} $mapped_tree { break }
lassign $mapped_tree tree_id tree_name subtree_id assign_single_p require_category_p
foreach category [category_tree::get_tree -subtree_id $subtree_id $tree_id] {
foreach {category_id category_name deprecated_p level} $category { break }
lassign $category category_id category_name deprecated_p level
if { $level > 1 } {
set pad "[string repeat "&nbsp;" [expr {2 * $level - 4}]].."
} else {
......
......@@ -20,7 +20,7 @@ ad_proc -private category::tagcloud::get_minmax_tagweights {
@author Matthew Burke (matt-oacs@bluedino.net)
} {
set max_weight 0
set min_weight [lindex [lindex $tag_list 0] 1]
set min_weight [lindex $tag_list 0 1]
foreach tag $tag_list {
set tag_weight [lindex $tag 1]
if {$tag_weight < $min_weight} {
......@@ -45,7 +45,7 @@ ad_proc -private category::tagcloud::scale_weight {
} {
set denominator [expr {[lindex $extremes 1] - [lindex $extremes 0]}]
if {$denominator != 0} {
set multiplier [expr ($weight * 1.0)/$denominator]
set multiplier [expr {($weight * 1.0)/$denominator}]
} else {
set multiplier 0
}
......
......@@ -48,7 +48,6 @@ ad_proc -public template::widget::category {
set display_widget $element(display_widget)
}
set ms_attributes(multiple) {}
set all_single_p [info exists attributes(single)]
# Determine the size automatically for a multiselect
......@@ -65,30 +64,31 @@ ad_proc -public template::widget::category {
set require_category_p f
set widget {}
if { [exists_and_not_null element(value)] && [llength $element(value)] == 2 } {
if { [info exists element(value)] && $element(value) ne ""
&& [llength $element(value)] == 2
} {
# Legacy method for passing parameters
set object_id [lindex $element(value) 0]
set package_id [lindex $element(value) 1]
lassign $element(value) object_id package_id
} else {
if { [exists_and_not_null element(category_application_id)] } {
if { [info exists element(category_application_id)] && $element(category_application_id) ne "" } {
set package_id $element(category_application_id)
}
if { [exists_and_not_null element(category_object_id)] } {
if { [info exists element(category_object_id)] && $element(category_object_id) ne "" } {
set object_id $element(category_object_id)
}
if { [exists_and_not_null element(category_tree_id)] } {
if { [info exists element(category_tree_id)] && $element(category_tree_id) ne "" } {
set tree_id $element(category_tree_id)
}
if { [exists_and_not_null element(category_subtree_id)] } {
if { [info exists element(category_subtree_id)] && $element(category_subtree_id) ne "" } {
set subtree_id $element(category_subtree_id)
}
if { [exists_and_not_null element(category_assign_single_p)] } {
if { [info exists element(category_assign_single_p)] && $element(category_assign_single_p) ne "" } {
set assign_single_p $element(category_assign_single_p)
}
if { [exists_and_not_null element(category_require_category_p)] } {
if { [info exists element(category_require_category_p)] && $element(category_require_category_p) ne "" } {
set require_category_p $element(category_require_category_p)
}
if { [exists_and_not_null element(category_require_category_p)] } {
if { [info exists element(category_widget)] && $element(category_widget) ne "" } {
set widget $element(category_widget)
}
}
......@@ -125,7 +125,7 @@ ad_proc -public template::widget::category {
}
foreach mapped_tree $mapped_trees {
util_unlist $mapped_tree tree_id tree_name subtree_id assign_single_p require_category_p widget
lassign $mapped_tree tree_id tree_name subtree_id assign_single_p require_category_p widget
set tree_name [ad_quotehtml [lang::util::localize $tree_name]]
set one_tree [list]
......@@ -136,7 +136,7 @@ ad_proc -public template::widget::category {
}
foreach category [category_tree::get_tree -subtree_id $subtree_id $tree_id] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
set category_name [ad_quotehtml [lang::util::localize $category_name]]
if { $level>1 } {
set category_name "[string repeat "&nbsp;" [expr {2*$level -4}]]..$category_name"
......@@ -226,20 +226,22 @@ ad_proc -public template::data::transform::category { element_ref } {
set subtree_id {}
set require_category_p f
if { [exists_and_not_null element(value)] && [llength $element(value)] == 2 } {
if { [info exists element(value)] && $element(value) ne ""
&& [llength $element(value)] == 2
} {
# Legacy method for passing parameters
set package_id [lindex $element(value) 1]
} else {
if { [exists_and_not_null element(category_application_id)] } {
if { [info exists element(category_application_id)] && $element(category_application_id) ne "" } {
set package_id $element(category_application_id)
}
if { [exists_and_not_null element(category_tree_id)] } {
if { [info exists element(category_tree_id)] && $element(category_tree_id) ne "" } {
set tree_id $element(category_tree_id)
}
if { [exists_and_not_null element(category_subtree_id)] } {
if { [info exists element(category_subtree_id)] && $element(category_subtree_id) ne "" } {
set subtree_id $element(category_subtree_id)
}
if { [exists_and_not_null element(category_require_category_p)] } {
if { [info exists element(category_require_category_p)] && $element(category_require_category_p) ne "" } {
set require_category_p $element(category_require_category_p)
}
}
......@@ -250,7 +252,7 @@ ad_proc -public template::data::transform::category { element_ref } {
if { $tree_id eq "" } {
set trees [list]
foreach tree [category_tree::get_mapped_trees $package_id] {
util_unlist $tree tree_id tree_name subtree_id assign_single_p require_category_p
lassign $tree tree_id tree_name subtree_id assign_single_p require_category_p
if {$require_category_p == "t" || ![info exists element(optional)]} {
lappend trees [list $tree_id $subtree_id]
}
......@@ -265,7 +267,7 @@ ad_proc -public template::data::transform::category { element_ref } {
set trees_without_category [list]
foreach tree $trees {
util_unlist $tree tree_id subtree_id
lassign $tree tree_id subtree_id
# get categories of every tree requiring a categorization
foreach category [category_tree::get_tree -all -subtree_id $subtree_id $tree_id] {
set tree_categories([lindex $category 0]) 1
......
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer,multiple
tree_id:naturalnum,notnull
category_id:naturalnum,multiple
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<b>Are you sure you want to delete these categories:</b>
<b>#categories.lt_Are_you_sure_you_want#</b>
</p>
<listtemplate name="categories"></listtemplate>
<p>
<a href="@delete_url@" class="button">Delete</a>
<a href="@delete_url@" class="button">#categories.Delete#</a>
&nbsp;&nbsp;&nbsp;
<a href="@cancel_url@" class="button">No, Cancel</a>
<a href="@cancel_url@" class="button">#categories.No_Cancel#</a>
</p>
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer,multiple
tree_id:naturalnum,notnull
category_id:naturalnum,multiple
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<property name="focus">category_form.name</property>
......
......@@ -4,12 +4,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer,optional
{parent_id:integer,optional [db_null]}
tree_id:naturalnum,notnull
category_id:naturalnum,optional
{parent_id:naturalnum,optional [db_null]}
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
context_bar:onevalue
page_title:onevalue
......@@ -20,9 +20,9 @@ set package_id [ad_conn package_id]
permission::require_permission -object_id $tree_id -privilege category_tree_write
if {[info exists category_id]} {
set page_title "Edit category"
set page_title [_ categories.Edit_category]
} else {
set page_title "Add category"
set page_title [_ categories.Add_category]
}
set context_bar [category::context_bar $tree_id $locale \
......@@ -36,9 +36,9 @@ ad_form -name category_form -action category-form \
-export { tree_id parent_id locale object_id ctx_id } \
-form {
{category_id:key}
{name:text {label "Name"} {html {size 50 maxlength 200}}}
{language:text(select) {label "Language"} {value $locale} {options $languages}}
{description:text(textarea),optional {label "Description"} {html {rows 5 cols 80}}}
{name:text {label "#acs-admin.Name#"} {html {size 50 maxlength 200}}}
{language:text(select) {label "#categories.Language#"} {value $locale} {options $languages}}
{description:text(textarea),optional {label "#categories.Description#"} {html {rows 5 cols 80}}}
} -new_request {
set name ""
set description ""
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="tree"></listtemplate>
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
link_tree_id:integer,notnull
category_id:integer,notnull
tree_id:integer,notnull
link_tree_id:naturalnum,notnull
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -48,12 +48,12 @@ db_foreach get_linked_categories "" {
template::multirow create tree link_category_name link_category_id forward_exists_p backward_exists_p left_indent view_url link_add_url bilink_add_url
foreach category [category_tree::get_tree -all $link_tree_id $locale] {
util_unlist $category link_category_id link_category_name deprecated_p level
lassign $category link_category_id link_category_name deprecated_p level
set forward_exists_p [info exists forward_links($link_category_id)]
set backward_exists_p [info exists backward_links($link_category_id)]
template::multirow append tree $link_category_name $link_category_id $forward_exists_p $backward_exists_p \
[string repeat "&nbsp;" [expr ($level-1)*5]] \
[string repeat "&nbsp;" [expr {($level-1)*5]}] \
[export_vars -no_empty -base category-links-view {{category_id $link_category_id} {tree_id $link_tree_id} locale object_id ctx_id}] \
[export_vars -no_empty -base category-link-add-3 {link_category_id category_id tree_id locale object_id ctx_id}] \
[export_vars -no_empty -base category-link-add-4 {link_category_id category_id tree_id locale object_id ctx_id}]
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
link_category_id:integer,multiple
category_id:integer,notnull
tree_id:integer,notnull
link_category_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
link_category_id:integer,multiple
category_id:integer,notnull
tree_id:integer,notnull
link_category_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="trees"></listtemplate>
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
category_id:integer,notnull
tree_id:integer,notnull
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
link_id:integer,multiple
category_id:integer
tree_id:integer
link_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<b>Are you sure you want to delete these category links:</b>
<b>#categories.lt_Are_you_sure_you_want_1#</b>
</p>
<listtemplate name="category_links"></listtemplate>
<p>
<a href="@delete_url@" class="button">Delete</a>
<a href="@delete_url@" class="button">#categories.Delete#</a>
&nbsp;&nbsp;&nbsp;
<a href="@cancel_url@" class="button">No, Cancel</a>
<a href="@cancel_url@" class="button">#categories.No_Cancel#</a>
</p>
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
link_id:integer,multiple
category_id:integer
tree_id:integer
link_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="category_links"></listtemplate>
Explanation: Any categorization made to the source category will
also be made to the target category.
#categories.lt_Explanation_Any_categ#
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
category_id:integer,notnull
tree_id:integer,notnull
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
orderby:optional
ctx_id:integer,optional
object_id:naturalnum,optional
orderby:token,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer
{parent_id:integer,optional [db_null]}
tree_id:naturalnum,notnull
category_id:naturalnum,notnull
{parent_id:naturalnum,optional [db_null]}
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
permission::require_permission -object_id $tree_id -privilege category_tree_write
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="tree"></listtemplate>
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer
tree_id:naturalnum,notnull
category_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -35,14 +35,16 @@ template::multirow append tree "Root Level" 0 f 0 "" \
[export_vars -no_empty -base category-parent-change-2 {tree_id category_id locale object_id ctx_id}]
foreach category [category_tree::get_tree -all $tree_id $locale] {
util_unlist $category parent_id category_name deprecated_p level
lassign $category parent_id category_name deprecated_p level
if { [lsearch $subtree_categories_list $parent_id]==-1 } {
set parent_url [export_vars -no_empty -base category-parent-change-2 { parent_id tree_id category_id locale object_id ctx_id }]
set parent_url [export_vars -no_empty -base category-parent-change-2 \
{ parent_id tree_id category_id locale object_id ctx_id }]
} else {
set parent_url ""
}
template::multirow append tree $category_name $category_id $deprecated_p $level [string repeat "&nbsp;" [expr ($level-1)*5]] $parent_url
template::multirow append tree $category_name $category_id $deprecated_p $level \
[string repeat "&nbsp;" [expr {($level-1)*5}]] $parent_url
}
......
......@@ -4,11 +4,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer,multiple
tree_id:naturalnum,notnull
category_id:naturalnum,multiple
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
permission::require_permission -object_id $tree_id -privilege category_tree_write
......
......@@ -4,11 +4,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
category_id:integer,multiple
tree_id:naturalnum,notnull
category_id:naturalnum,multiple
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
permission::require_permission -object_id $tree_id -privilege category_tree_write
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<!-- pagination context bar -->
<table cellpadding=4 cellspacing=0 border=0 width="95%">
<tr><td></td><td align=center>@object_count@ objects on @page_count@ pages</td><td></td></tr>
<table cellpadding="4" cellspacing="0" border="0" width="95%">
<tr><td></td><td align="center">#categories.lt_object_count_objects_#</td><td></td></tr>
<tr>
<td align=left width="5%">
<td align="left" width="5%">
<if @info.previous_group@ not nil>
<a href="category-usage?page=@info.previous_group@&@url_vars;noquote@&orderby=@orderby@">&lt;&lt;</a>&nbsp;
<a href="category-usage?page=@info.previous_group@&amp;@url_vars@&amp;orderby=@orderby@">&lt;&lt;</a>&nbsp;
</if>
<if @info.previous_page@ gt 0>
<a href="category-usage?page=@info.previous_page@&@url_vars;noquote@&orderby=@orderby@">&lt;</a>&nbsp;
<a href="category-usage?page=@info.previous_page@&amp;@url_vars@&amp;orderby=@orderby@">&lt;</a>&nbsp;
</if>
</td>
<td align=center>
<td align="center">
<multiple name=pages>
<if @page@ ne @pages.page@>
<a href="category-usage?page=@pages.page@&@url_vars;noquote@&orderby=@orderby@">@pages.page@</a>
<a href="category-usage?page=@pages.page@&amp;@url_vars@&amp;orderby=@orderby@">@pages.page@</a>
</if>
<else>
@page@
</else>
</multiple>
</td>
<td align=right width="5%">
<td align="right" width="5%">
<if @info.next_page@ not nil>
&nbsp;<a href="category-usage?page=@info.next_page@&@url_vars;noquote@&orderby=@orderby@">&gt;</a>
&nbsp;<a href="category-usage?page=@info.next_page@&amp;@url_vars@&amp;orderby=@orderby@">&gt;</a>
</if>
<if @info.next_group@ not nil>
&nbsp;<a href="category-usage?page=@info.next_group@&@url_vars;noquote@&orderby=@orderby@">&gt;&gt;</a>
&nbsp;<a href="category-usage?page=@info.next_group@&amp;@url_vars@&amp;orderby=@orderby@">&gt;&gt;</a>
</if>
</td>
</tr>
</table>
<p>
@items;noquote@
<listtemplate name="items_list"></listtemplate>
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
category_id:integer
tree_id:integer
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
object_id:naturalnum,optional
{page:integer,optional 1}
{orderby:optional object_name}
{orderby:token,optional object_name}
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -39,14 +39,35 @@ set url_vars [export_vars -no_empty {category_id tree_id locale object_id}]
set context_bar [category::context_bar $tree_id $locale [value_if_exists object_id]]
lappend context_bar "\"$category_name\" Usage"
set table_def {
{object_name "Object Name" {upper(n.object_name) $order} {<td><a href="/o/$object_id">$object_name</a></td>}}
{instance_name "Package" {} {<td align=right><a href="/o/$package_id">$instance_name</a></td>}}
{package_type "Package Type" {} r}
{creation_date "Creation Date" {} r}
}
template::list::create -name items_list -multirow items \
-html {align center} \
-elements {
object_name {
label "Object Name"
display_template {
<a href="/o/@items.object_id@">@items.object_name@</a>
}
orderby {n.object_name}
}
instance_name {
label "Package"
display_template {
<a href="/o/@items.package_id@">@items.instance_name@</a>
}
html {align right}
}
package_type {
label "Package Type"
html {align right}
}
creation_date {
label "Creation Date"
html {align right}
}
} \
-filters {tree_id {} category_id {}}
set order_by_clause [ad_order_by_from_sort_spec $orderby $table_def]
set order_by_clause [template::list::orderby_clause -orderby -name items_list]
set p_name "category-usage"
request create
......@@ -59,7 +80,7 @@ set first_row [paginator get_row $p_name $page]
set last_row [paginator get_row_last $p_name $page]
# execute query to get the objects on current page
set items [ad_table -Torderby $orderby get_objects_using_category "" $table_def]
db_multirow items get_objects_using_category {} {}
paginator get_display_info $p_name info $page
set group [paginator get_group $p_name $page]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<h3>Trees you can manage</h3>
<h3>#categories.Trees_you_can_manage#</h3>
<listtemplate name="trees_with_write_permission"></listtemplate>
<p>
<h3>Trees you can view</h3>
<h3>#categories.Trees_you_can_view#</h3>
<listtemplate name="trees_with_read_permission"></listtemplate>
<p>
<ul class="action-links">
<li><a href="@create_url@">Create a new tree</a></li>
<li><a href="@create_url@">#categories.Create_a_new_tree#</a></li>
</ul>
......@@ -53,17 +53,17 @@ multirow sort trees_with_write_permission -dictionary tree_name
set elements {
tree_name {
label "Name"
label "#acs-subsite.Name#"
link_url_col view_url
}
description {
label "Description"
label "#categories.Description#"
}
}
list::create \
-name trees_with_write_permission \
-no_data "None" \
-no_data "#categories.None#" \
-elements $elements \
-key tree_id \
-bulk_action_export_vars {locale} \
......@@ -71,7 +71,7 @@ list::create \
list::create \
-name trees_with_read_permission \
-no_data "None" \
-no_data "#categories.None#" \
-elements $elements
set create_url [export_vars -no_empty -base tree-form { locale }]
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context_bar;noquote@</property>
<if @focus@ not nil><property name="focus">@focus;noquote@</property></if>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context_bar;literal@</property>
<if @focus@ not nil><property name="focus">@focus;literal@</property></if>
<if @change_locale@ eq t and @languages@ not nil>
<div style="float: right;">
......
......@@ -6,7 +6,7 @@ if { ![info exists change_locale] } {
set change_locale t
}
if {![exists_and_not_null locale]} {
if {(![info exists locale] || $locale eq "")} {
#set locale [parameter::get -parameter DefaultLocale -default en_US]
set locale [ad_conn locale]
}
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<h3>Category trees mapped to "@object_name@"</h3>
<h3>#categories.lt_Category_trees_mapped#</h3>
<listtemplate name="mapped_trees"></listtemplate>
<p>
<h3>Category trees available for mapping</h3>
<h3>#categories.lt_Category_trees_availa#</h3>
<listtemplate name="unmapped_trees"></listtemplate>
<ul class="action-links">
<li><a href="@create_url@">Create and map a new category tree</a></li>
<li><a href="@create_url@">#categories.lt_Create_and_map_a_new_#</a></li>
</ul>
......@@ -7,8 +7,8 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
object_id:integer,notnull
ctx_id:integer,optional
object_id:naturalnum,notnull
ctx_id:naturalnum,optional
{locale ""}
} -properties {
page_title:onevalue
......@@ -61,47 +61,47 @@ template::multirow sort unmapped_trees -dictionary tree_name
template::list::create \
-name mapped_trees \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
tree_name {
label "Name"
label "#acs-subsite.Name#"
link_url_col view_url
}
flags {
display_template {
(<if @mapped_trees.site_wide_p@ eq t>Site-Wide Tree, </if>
(<if @mapped_trees.site_wide_p@ eq t>#categories.#SiteWide_tree#, </if>
<if @mapped_trees.widget@>@mapped_trees.widget@, </if>
<if @mapped_trees.assign_single_p@ eq t>single, </if><else>multiple, </else>
<if @mapped_trees.require_category_p@ eq t>required) </if><else>optional) </else>
<if @mapped_trees.assign_single_p@ eq t>#categories.single#, </if><else>#categories.multiple#, </else>
<if @mapped_trees.require_category_p@ eq t>#categories.required#) </if><else>#categories.optional#) </else>
}
}
action {
label "Action"
label "#categories.Action#"
display_template {
<a href="@mapped_trees.unmap_url@">Unmap</a> &nbsp; &nbsp;
<a href="@mapped_trees.edit_url@">Edit parameters</a>
<a href="@mapped_trees.unmap_url@">#categories.Unmap#</a> &nbsp; &nbsp;
<a href="@mapped_trees.edit_url@">#categories.Edit_parameters#</a>
}
}
}
template::list::create \
-name unmapped_trees \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
tree_name {
label "Name"
label "#acs-subsite.Name#"
link_url_col view_url
}
site_wide_p {
display_template {
<if @unmapped_trees.site_wide_p@ eq t> (Site-Wide Tree) </if>
<if @unmapped_trees.site_wide_p@ eq t> (#categories.SiteWide_tree#) </if>
}
}
action {
label "Action"
label "#categories.Action#"
display_template {
<a href="@unmapped_trees.map_url@">Map tree</a> &nbsp; &nbsp;
<a href="@unmapped_trees.subtree_url@">Map a subtree</a>
<a href="@unmapped_trees.map_url@">#categories.Map_tree#</a> &nbsp; &nbsp;
<a href="@unmapped_trees.subtree_url@">#categories.Map_subtree#</a>
}
}
}
......
......@@ -5,7 +5,7 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
object_id:integer,notnull
object_id:naturalnum,notnull
{locale ""}
}
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<p>
<if @sw_tree_p@ eq 1>
This is a site wide category tree<p>
#categories.lt_This_is_a_site_wide_c#<p>
<if @admin_p@ eq 1>
<a href="site-wide-status-change?action=0&@url_vars@" class="button">Make it Local</a>
<a href="site-wide-status-change?action=0&@url_vars@" class="button">#categories.Make_it_Local#</a>
</if>
</if>
<else>
This tree is local<p>
#categories.This_tree_is_local#<p>
<if @admin_p@ eq 1>
<a href="site-wide-status-change?action=1&@url_vars@" class="button">Make it Site-Wide</a>
<a href="site-wide-status-change?action=1&@url_vars@" class="button">#categories.Make_it_Site-Wide#</a>
</if>
</else>
......@@ -4,8 +4,8 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
object_id:integer,optional
tree_id:naturalnum,notnull
object_id:naturalnum,optional
{locale ""}
} -properties {
page_title:onevalue
......@@ -20,10 +20,10 @@ permission::require_permission -object_id $tree_id -privilege category_tree_gran
array set tree [category_tree::get_data $tree_id $locale]
set tree_name $tree(tree_name)
set page_title "Permission Management for $tree_name"
set page_title [_ categories.Permissions_manage_title]
set context_bar [category::context_bar $tree_id $locale [value_if_exists object_id]]
lappend context_bar "Manage Permissions"
lappend context_bar [_ categories.Permissions_manage]
set url_vars [export_vars {tree_id object_id locale}]
set package_id [ad_conn package_id]
......
......@@ -4,10 +4,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
tree_id:naturalnum,notnull
action:integer
{locale ""}
object_id:integer,optional
object_id:naturalnum,optional
}
set user_id [auth::require_login]
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
synonym_id:integer,multiple
category_id:integer,notnull
tree_id:integer,notnull
synonym_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<b>Are you sure you want to delete these synonyms:</b>
<b>#categories.lt_Are_you_sure_you_want_2#</b>
</p>
<listtemplate name="synonyms"></listtemplate>
<p>
<a href="@delete_url@" class="button">Delete</a>
<a href="@delete_url@" class="button">#categories.Delete#</a>
&nbsp;&nbsp;&nbsp;
<a href="@cancel_url@" class="button">No, Cancel</a>
<a href="@cancel_url@" class="button">#categories.No_Cancel#</a>
</p>
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
synonym_id:integer,multiple
category_id:integer,notnull
tree_id:integer,notnull
synonym_id:naturalnum,multiple
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<property name="focus">synonym_form.name</property>
......
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
synonym_id:integer,optional
category_id:integer,notnull
tree_id:integer,notnull
synonym_id:naturalnum,optional
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
context_bar:onevalue
page_title:onevalue
......@@ -44,7 +44,7 @@ ad_form -name synonym_form -action synonym-form -export { category_id tree_id lo
{language:text(select) {label "Language"} {options $languages}}
} -new_request {
set name ""
if {![empty_string_p [ad_conn locale]]} {
if { [ad_conn locale] ne ""} {
set language [ad_conn locale]
} else {
set language [parameter::get -parameter DefaultLocale -default en_US]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="synonyms"></listtemplate>
......@@ -5,12 +5,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
category_id:integer,notnull
tree_id:integer,notnull
category_id:naturalnum,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
orderby:optional
ctx_id:integer,optional
object_id:naturalnum,optional
orderby:token,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
target_tree_id:integer
source_tree_id:integer
target_tree_id:naturalnum,notnull
source_tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="tree"></listtemplate>
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
source_tree_id:integer
target_tree_id:integer
source_tree_id:naturalnum,notnull
target_tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -28,27 +28,31 @@ if {$target_tree(site_wide_p) == "f"} {
}
set tree_name [category_tree::get_name $tree_id $locale]
set page_title "Category Tree \"$tree_name\""
set page_title [_ categories.Tree_view_title]
set context_bar [category::context_bar $tree_id $locale \
[value_if_exists object_id] \
[value_if_exists ctx_id]]
lappend context_bar [list [export_vars -no_empty -base tree-copy { {tree_id $target_tree_id} locale object_id ctx_id }] "Copy tree"] "View \"$tree_name\""
lappend context_bar [list \
[export_vars -no_empty -base tree-copy { {tree_id $target_tree_id} locale object_id ctx_id }] \
[_ categories.Action_copy_tree]] \
"View \"$tree_name\""
template::multirow create tree category_name deprecated_p level left_indent
foreach category [category_tree::get_tree -all $tree_id $locale] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
template::multirow append tree $category_name $deprecated_p $level [string repeat "&nbsp;" [expr ($level-1)*5]]
template::multirow append tree $category_name $deprecated_p $level \
[string repeat "&nbsp;" [expr {($level-1)*5}]]
}
template::list::create \
-name tree \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
category_name {
label "Name"
label "#acs-admin.Name#"
display_template {
@tree.left_indent;noquote@ @tree.category_name@
}
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="trees"></listtemplate>
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -22,12 +22,12 @@ permission::require_permission -object_id $tree_id -privilege category_tree_writ
set tree_name [category_tree::get_name $tree_id $locale]
set target_tree_id $tree_id
set page_title "Copy a tree into \"$tree_name\""
set page_title [_ categories.Tree_copy_title]
set context_bar [category::context_bar $tree_id $locale \
[value_if_exists object_id] \
[value_if_exists ctx_id]]
lappend context_bar "Copy tree"
lappend context_bar [_ categories.Tree_copy]
template::multirow create trees tree_id tree_name site_wide_p view_url copy_url
......@@ -45,21 +45,21 @@ template::multirow sort trees -dictionary tree_name
template::list::create \
-name trees \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
tree_name {
label "Name"
label "#acs-admin.Name#"
link_url_col view_url
}
site_wide_p {
display_template {
<if @trees.site_wide_p@ eq t> (Site-Wide Tree) </if>
<if @trees.site_wide_p@ eq t> (#categories.SiteWide_tree#) </if>
}
}
copy {
label "Action"
label "#categories.Action#"
display_template {
<a href="@trees.copy_url@">Copy tree</a>
<a href="@trees.copy_url@">#categories.Tree_copy#</a>
}
}
}
......
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......@@ -24,7 +24,7 @@ if {[llength $instance_list] > 0} {
category_tree::delete $tree_id
if {![info exists object_id]} {
ad_returnredirect ".?[export_vars -no_empty {locale ctx_id}]"
ad_returnredirect [export_vars -base . -no_empty {locale ctx_id}]
} else {
ad_returnredirect [export_vars -no_empty -base object-map {locale object_id ctx_id}]
}
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<table>
<tr><th>Tree Name</th><td>@tree_name@</td></tr>
<tr><th>Description</th><td>@tree_description@</td></tr>
<tr><th>#categories.Tree_Name#</th><td>@tree_name@</td></tr>
<tr><th>#categories.Description#</th><td>@tree_description@</td></tr>
</table>
</p>
<if @instances_using_p@ eq t>
This tree is still used by some modules. For a complete list, please go
<a href="@usage_url@">here</a>.
#categories.lt_This_tree_is_still_us#
<a href="@usage_url@">#categories.here#</a>.
</if>
<if @used_categories:rowcount@ gt 0>
<p><b>Categories still used</b>
<p><b>#categories.lt_Categories_still_used#</b>
<listtemplate name="used_categories"></listtemplate>
<p>
</if>
<if @instances_using_p@ ne t>
Are you sure you want to delete the tree "@tree_name@"?
#categories.lt_Are_you_sure_you_want_3#
<p>
<a href="@delete_url@" class="button">Delete</a>
<a href="@delete_url@" class="button">#categories.Delete#</a>
&nbsp;&nbsp;&nbsp;
<a href="@cancel_url@" class="button">No, Cancel</a>
<a href="@cancel_url@" class="button">#categories.No_Cancel#</a>
</p>
</if>
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -28,11 +28,11 @@ array set tree [category_tree::get_data $tree_id $locale]
set tree_name $tree(tree_name)
set tree_description $tree(description)
set page_title "Delete Category Tree \"$tree_name\""
set page_title [_ categories.Delete_category_title]
set context_bar [category::context_bar $tree_id $locale \
[value_if_exists object_id] \
[value_if_exists ctx_id]]
lappend context_bar "Delete"
lappend context_bar [_ categories.Delete]
set instance_list [category_tree::usage $tree_id]
......@@ -58,10 +58,10 @@ template::multirow sort used_categories -dictionary category_name
template::list::create \
-name used_categories \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
category_name {
label "Name"
label "#acs-admin.Name#"
link_url_col view_url
}
}
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<property name="focus">tree_form.tree_name</property>
......
......@@ -4,10 +4,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,optional
tree_id:naturalnum,optional
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
context_bar:onevalue
page_title:onevalue
......@@ -16,9 +16,9 @@ ad_page_contract {
auth::require_login
if { ![ad_form_new_p -key tree_id] } {
set page_title "Edit tree"
set page_title "#categories.Edit_tree#"
} else {
set page_title "Add tree"
set page_title "#categories.Add_tree#"
}
if { [info exists object_id] } {
......@@ -28,7 +28,7 @@ if { [info exists object_id] } {
[_ categories.cadmin]]]
} else {
set context_bar [list \
[list ".?[export_vars -no_empty {locale ctx_id}]" \
[list [export_vars -base . -no_empty {locale ctx_id}] \
[_ categories.cadmin]]]
}
lappend context_bar $page_title
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<property name="focus">tree_map_form.assign_single_p</property>
......
......@@ -9,12 +9,12 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
{category_id:integer,optional ""}
tree_id:naturalnum,notnull
{category_id:naturalnum,optional ""}
{locale ""}
object_id:integer,notnull
{edit_p 0}
ctx_id:integer,optional
object_id:naturalnum,notnull
{edit_p:boolean 0}
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......@@ -26,7 +26,7 @@ if {$tree(site_wide_p) == "f"} {
permission::require_permission -object_id $tree_id -privilege category_tree_read
}
set context_bar [list [category::get_object_context $object_id] [list "[export_vars -no_empty -base object-map {locale object_id ctx_id}]" [_ categories.cadmin]] "Mapping Parameters"]
set context_bar [list [category::get_object_context $object_id] [list "[export_vars -no_empty -base object-map {locale object_id ctx_id}]" [_ categories.cadmin]] [_ categories.Mapping_parameters]]
if {$edit_p} {
# parameters are edited, so get old data
......@@ -34,20 +34,20 @@ if {$edit_p} {
}
if {$category_id eq ""} {
set page_title "Parameters of mapping to tree \"$tree_name\""
set page_title [_ categories.Mapping_parameters_tree_title]
} else {
set category_name [category::get_name $category_id $locale]
set page_title "Parameters of mapping to subtree \"$tree_name :: $category_name\""
set page_title [_ categories.Mapping_parameters_subtree_title]
}
ad_form -name tree_map_form -action tree-map-2 -export { tree_id category_id locale object_id edit_p ctx_id} -form {
{widget:text(radio) {label "Widget"} {options {
{"Select" select}
{"Multiselect - let users assign multiple categories" multiselect}
{"Radio" radio}
{"Checkbox - let users assign multiple categories" checkbox}
{widget:text(radio) {label "#categories.Widget#"} {options {
{"#categories.Widget_select#" select}
{"#categories.Widget_multiselect#" multiselect}
{"#categories.Widget_radio#" radio}
{"#categories.Widget_checkbox#" checkbox}
}}}
{require_category_p:text(radio) {label "Require users to assign at least one category?"} {options {{"Yes" t} {"No" f}}}}
{require_category_p:text(radio) {label "#categories.Widget_required_category#"} {options {{"#acs-admin.Yes#" t} {"#acs-admin.No#" f}}}}
} -on_request {
if {$edit_p} {
db_1row get_mapping_parameters ""
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<listtemplate name="tree"></listtemplate>
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,notnull
ctx_id:integer,optional
object_id:naturalnum,notnull
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -25,17 +25,16 @@ if {$tree_data(site_wide_p) == "f"} {
permission::require_permission -object_id $tree_id -privilege category_tree_read
}
set page_title "Select subtree of \"$tree_name\" to map"
set page_title [_ categories.Tree_map_title]
set context_bar [list \
[category::get_object_context $object_id] \
[list [export_vars -no_empty -base object-map {locale object_id ctx_id}] [_ categories.cadmin]] \
"Map subtree"]
"#categories.Map_subtree#"]
template::multirow create tree category_id category_name level left_indent map_url
foreach category [category_tree::get_tree -all $tree_id $locale] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
template::multirow append tree $category_id $category_name $level \
[string repeat "&nbsp;" [expr {($level-1)*5}]] \
......@@ -44,18 +43,18 @@ foreach category [category_tree::get_tree -all $tree_id $locale] {
template::list::create \
-name tree \
-no_data "None" \
-no_data "#categories.None#" \
-elements {
category_name {
label "Name"
label "#acs-subsite.Name#"
display_template {
@tree.left_indent;noquote@ @tree.category_name@
}
}
map {
label "Action"
label "#categories.Action#"
display_template {
<a href="@tree.map_url@">Map this subtree</a>
<a href="@tree.map_url@">#categories.Map_this_subtree#</a>
}
}
}
......
......@@ -5,11 +5,11 @@ ad_page_contract {
@author Lars Pind (lars@collaboraid.biz)
@cvs-id $Id:
} {
tree_id:integer
tree_id:naturalnum,notnull
sort_key:array
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
}
permission::require_permission -object_id $tree_id -privilege category_tree_write
......@@ -66,7 +66,7 @@ db_transaction {
db_dml reset_category_index ""
foreach category $done_list {
util_unlist $category category_id left_ind right_ind
lassign $category category_id left_ind right_ind
db_dml update_category_index ""
}
}
......
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,notnull
ctx_id:integer,optional
object_id:naturalnum,notnull
ctx_id:naturalnum,optional
}
set user_id [auth::require_login]
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
Are you sure you want to unmap the tree "@tree_name@" from "@object_name@"?
#categories.lt_Are_you_sure_you_want_4#
<p>
<a href="@delete_url@" class="button">Unmap</a>
<a href="@delete_url@" class="button">#categories.Unmap#</a>
&nbsp;&nbsp;&nbsp;
<a href="@cancel_url@" class="button">Cancel, do not unmap</a>
<a href="@cancel_url@" class="button">#categories.Cancel_do_not_unmap#</a>
</p>
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,notnull
ctx_id:integer,optional
object_id:naturalnum,notnull
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<p>
<table>
<tr><th>Tree Name</th><td>@tree_name@</td></tr>
<tr><th>Description</th><td> @tree_description@</td></tr>
<tr><th>#categories.Tree_Name#</th><td>@tree_name@</td></tr>
<tr><th>#categories.Description#</th><td> @tree_description@</td></tr>
</table>
</p>
......@@ -16,15 +16,15 @@
</ul><if @modules.object_name@ ne @modules.instance_name@>@modules.instance_name@</if><ul>
<group column=package_id>
<li><a href="/o/@modules.object_id@">@modules.object_name@</a>
<a href="@unmap_url@" class="button">unmap</a></li>
<a href="@unmap_url@" class="button">#categories.unmap#</a></li>
</group>
</group>
</ul>
</multiple>
<if @instances_without_permission@ gt 0>
There are @instances_without_permission@ more uses of this tree, but you
don't have the permission to see them.
#categories.lt_There_are_instances_w#
</if>
<if @modules:rowcount@ eq 0 and @instances_without_permission@ eq 0>
This tree is not used.
#categories.lt_This_tree_is_not_used#
</if>
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -28,12 +28,12 @@ if {$tree(site_wide_p) == "f"} {
set tree_name $tree(tree_name)
set tree_description $tree(description)
set page_title "Modules using Category Tree \"$tree_name\""
set page_title [_ categories.Usage_title]
set context_bar [category::context_bar $tree_id $locale \
[value_if_exists object_id] \
[value_if_exists ctx_id]]
lappend context_bar "Usage"
lappend context_bar [_ categories.Usage]
template::multirow create modules package object_id object_name package_id instance_name read_p unmap_url
......@@ -42,7 +42,7 @@ set instance_list [category_tree::usage $tree_id]
set instances_without_permission 0
foreach instance $instance_list {
util_unlist $instance package object_id object_name package_id instance_name read_p
lassign $instance package object_id object_name package_id instance_name read_p
set unmap_url [export_vars -no_empty -base tree-unmap {tree_id object_id ctx_id}]
if {$read_p == "t"} {
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="locale">@locale;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="locale">@locale;literal@</property>
<include src="/packages/categories/lib/tree-form" &="tree_id" &="locale" &="ctx_id">
......
......@@ -5,10 +5,10 @@ ad_page_contract {
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
} {
tree_id:integer,notnull
tree_id:naturalnum,notnull
{locale ""}
object_id:integer,optional
ctx_id:integer,optional
object_id:naturalnum,optional
ctx_id:naturalnum,optional
} -properties {
page_title:onevalue
tree_name:onevalue
......@@ -30,11 +30,11 @@ if {$tree(site_wide_p) == "f"} {
set tree_name $tree(tree_name)
set tree_description $tree(description)
set page_title "Category Tree \"$tree_name\""
set page_title [_ categories.Tree_view_title]
if {[info exists object_id]} {
set context_bar [list [category::get_object_context $object_id] [list [export_vars -no_empty -base object-map {locale object_id ctx_id}] "[_ categories.cadmin]"] $tree_name]
} else {
set context_bar [list [list ".?[export_vars -no_empty {locale ctx_id}]" "[_ categories.cadmin]"] $tree_name]
set context_bar [list [list [export_vars -base . -no_empty {locale ctx_id}] "[_ categories.cadmin]"] $tree_name]
}
set can_write_p [permission::permission_p -object_id $tree_id -privilege category_tree_write]
......@@ -45,7 +45,7 @@ template::multirow create one_tree category_name sort_key category_id deprecated
set sort_key 0
foreach category [category_tree::get_tree -all $tree_id $locale] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
incr sort_key 10
template::multirow append one_tree $category_name $sort_key $category_id $deprecated_p $level [string repeat "&nbsp;" [expr {($level-1)*5}]]
......@@ -84,15 +84,15 @@ if { $can_write_p } {
<img src="/resources/acs-subsite/Edit16.gif" height="16" width="16" alt="Edit" style="border:0">
}
link_url_col edit_url
link_html {title "Edit this category"}
link_html {title "#categories.Edit_category_link_title#"}
}
}
lappend elements category_name {
label "Category"
label "#categories.Category#"
display_template {
@one_tree.left_indent;noquote@<a href="@one_tree.usage_url@" title="Show usage of this category">@one_tree.category_name@</a>
<if @one_tree.deprecated_p@ true>(Deprecated - <a href="@one_tree.phase_in_url@">Restore</a>)</if>
<if @one_tree.deprecated_p@ true>(#categories.Deprecated# - <a href="@one_tree.phase_in_url@">#categories.Restore#</a>)</if>
}
}
......@@ -103,20 +103,20 @@ if { $can_write_p } {
<img src="/resources/acs-subsite/Add16.gif" height="16" width="16" alt="Add" style="border:0">
}
link_url_col add_url
link_html { title "Add subcategory" }
link_html { title "#categories.Add_subcategory_link_title#" }
}
lappend elements sort_key {
label "Ordering"
label "#categories.Ordering#"
display_template {
<input name="sort_key.@one_tree.category_id@" value="@one_tree.sort_key@" size="8">
}
}
lappend elements actions {
label "Actions"
label "#categories.Actions#"
display_template {
<a href="@one_tree.parent_url@">Change parent</a> &nbsp; &nbsp;
<a href="@one_tree.links_view_url@">View links</a> &nbsp; &nbsp;
<a href="@one_tree.synonyms_view_url@">View synonyms</a>
<a href="@one_tree.parent_url@">#categories.Action_change_parent#</a> &nbsp; &nbsp;
<a href="@one_tree.links_view_url@">#categories.Action_view_links#</a> &nbsp; &nbsp;
<a href="@one_tree.synonyms_view_url@">#categories.Action_view_synonyms#</a>
}
}
......@@ -126,7 +126,7 @@ if { $can_write_p } {
<img src="/resources/acs-subsite/Delete16.gif" height="16" width="16" alt="Delete" style="border:0">
}
link_url_col delete_url
link_html { title "Delete category and all subcategories" }
link_html { title "#categories.Delete_category_link_title#" }
}
}
......@@ -134,19 +134,19 @@ set actions [list]
set bulk_actions [list]
if { $can_write_p } {
set bulk_actions {
"Delete" "category-delete" "Delete checked categories"
"Deprecate" "category-phase-out" "Deprecate checked categories"
"Restore" "category-phase-in" "Restore checked categories"
"Update ordering" "tree-order-update" "Update ordering from values in list"
"#categories.Delete#" "category-delete" "#categories.Delete_category_link_title#"
"#categories.Deprecate#" "category-phase-out" "#categories.Deprecate_category_link_title#"
"#categories.Restore#" "category-phase-in" "#categories.Restore_category_link_title#"
"#categories.Ordering_update#" "tree-order-update" "#categories.Ordering_update_link_title#"
}
set actions [list \
"Add root category" [export_vars -no_empty -base category-form { tree_id locale object_id ctx_id}] "Add category at the root level" \
"Copy tree" [export_vars -no_empty -base tree-copy { tree_id locale object_id ctx_id}] "Copy categories from other tree" \
"Delete tree" [export_vars -no_empty -base tree-delete { tree_id locale object_id ctx_id}] "Delete this category tree" \
"Applications" [export_vars -no_empty -base tree-usage { tree_id locale object_id ctx_id}] "Applications using this tree"]
"#categories.Action_add_root#" [export_vars -no_empty -base category-form { tree_id locale object_id ctx_id}] "#categories.Action_add_root_link_title#" \
"#categories.Action_copy_tree#" [export_vars -no_empty -base tree-copy { tree_id locale object_id ctx_id}] "#categories.Action_copy_tree_link_title#" \
"#categories.Action_delete_tree#" [export_vars -no_empty -base tree-delete { tree_id locale object_id ctx_id}] "#categories.Action_delete_tree_link_title#" \
"#categories.Action_applications#" [export_vars -no_empty -base tree-usage { tree_id locale object_id ctx_id}] "#categories.Action_applications_link_title#"]
if { $can_grant_p } {
lappend actions "Permissions" [export_vars -no_empty -base permission-manage { tree_id locale object_id ctx_id}] "Manage permissions for tree"
lappend actions "#acs-kernel.common_Permissions#" [export_vars -no_empty -base permission-manage { tree_id locale object_id ctx_id}] "#categories.Action_permissions_link_title#"
}
}
......
<master src="master">
<property name="page_title">@page_title;noquote@</property>
<property name="context_bar">@context_bar;noquote@</property>
<property name="page_title">@page_title;literal@</property>
<property name="context_bar">@context_bar;literal@</property>
<property name="change_locale">f</property>
<p>#categories.code_necessary#</p>
<pre style="border: 1px solid #CCC; background-color: #EEE; padding: 10px;">
set default_locale [lang::system::site_wide_locale]
<multiple name=trees>
<include src="/packages/categories/lib/tree-code" tree_id="@trees.tree_id@">
<include src="/packages/categories/lib/tree-code" tree_id="@trees.tree_id;literal@">
</multiple>
</pre>
......@@ -6,14 +6,14 @@ ad_page_contract {
} {
{locale ""}
tree_id:multiple
tree_id:naturalnum,multiple
}
set user_id [auth::require_login]
permission::require_permission -object_id [ad_conn package_id] -privilege admin
set page_title "[_ categories.code_export]"
set context_bar [list [list ".?[export_vars -no_empty {locale}]" "[_ categories.cadmin]"] $page_title]
set context_bar [list [list [export_vars -base . -no_empty {locale}] "[_ categories.cadmin]"] $page_title]
multirow create trees tree_id
foreach tid $tree_id {
......
<master>
<property name="title">@page_title;noquote@</property>
<property name="context">@context_bar;noquote@</property>
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context_bar;literal@</property>
<form action="categories-browse">
@form_vars;noquote@
Combine by
[ <input type=radio name=join value="and"<if @join@ eq "and"> checked</if>>AND
| <input type=radio name=join value="or"<if @join@ eq "or"> checked</if>>OR ]
#categories.lt_form_varsnoquote__Com# <input type="radio" name="join" value="and"<if @join@ eq "and"> #categories.checked#</if>#categories.AND__# <input type="radio" name="join" value="or"<if @join@ eq "or"> #categories.checked#</if>#categories.OR_#
<br>
<multiple name=trees>
@trees.tree_name@:
<select name=category_ids multiple size=5>
<select name=category_ids multiple size="5">
<group column=tree_id>
<option value="@trees.category_id@"<if @trees.selected_p@ eq 1> selected</if>>@trees.indent;noquote@@trees.category_name@
<option value="@trees.category_id@"<if @trees.selected_p@ eq 1> #categories.selected#</if>>@trees.indent;noquote@@trees.category_name@
</group>
</select>
</multiple>
<input type=submit name=button value="Show">
<input type="submit" name="button" value="Show">
</form>
To deselect or select multiple categories use the Control-Key on your keyboard.
#categories.lt_To_deselect_or_select#
<p>
<!-- pagination context bar -->
<table cellpadding=4 cellspacing=0 border=0 width="95%">
<tr><td></td><td align=center>@object_count@ objects on @page_count@ pages</td><td></td></tr>
<table cellpadding="4" cellspacing="0" border="0" width="95%">
<tr><td></td><td align="center">#categories.lt_object_count_objects_#</td><td></td></tr>
<tr>
<td align=left width="5%">
<td align="left" width="5%">
<if @info.previous_group@ not nil>
<a href="categories-browse?page=@info.previous_group@&@url_vars;noquote@&orderby=@orderby@">&lt;&lt;</a>&nbsp;
<a href="categories-browse?page=@info.previous_group@&amp;@url_vars@&amp;orderby=@orderby@">&lt;&lt;</a>&nbsp;
</if>
<if @info.previous_page@ gt 0>
<a href="categories-browse?page=@info.previous_page@&@url_vars;noquote@&orderby=@orderby@">&lt;</a>&nbsp;
<a href="categories-browse?page=@info.previous_page@&amp;@url_vars@&amp;orderby=@orderby@">&lt;</a>&nbsp;
</if>
</td>
<td align=center>
<td align="center">
<multiple name=pages>
<if @page@ ne @pages.page@>
<a href="categories-browse?page=@pages.page@&@url_vars;noquote@&orderby=@orderby@">@pages.page@</a>
<a href="categories-browse?page=@pages.page@&amp;@url_vars@&amp;orderby=@orderby@">@pages.page@</a>
</if>
<else>
@page@
</else>
</multiple>
</td>
<td align=right width="5%">
<td align="right" width="5%">
<if @info.next_page@ not nil>
&nbsp;<a href="categories-browse?page=@info.next_page@&@url_vars;noquote@&orderby=@orderby@">&gt;</a>
&nbsp;<a href="categories-browse?page=@info.next_page@&amp;@url_vars@&amp;orderby=@orderby@">&gt;</a>
</if>
<if @info.next_group@ not nil>
&nbsp;<a href="categories-browse?page=@info.next_group@&@url_vars;noquote@&orderby=@orderby@">&gt;&gt;</a>
&nbsp;<a href="categories-browse?page=@info.next_group@&amp;@url_varse@&amp;orderby=@orderby@">&gt;&gt;</a>
</if>
</td>
</tr>
</table>
@dimension_bar;noquote@
<p>
@items;noquote@
<listtemplate name="items_list"></listtemplate>
......@@ -2,7 +2,7 @@ ad_page_contract {
Multi-dimensional browsing of selected category trees.
Shows a list of all objects mapped to selected categories
using ad_table, ad_dimensional and paginator.
using list template, ad_dimensional and paginator.
@author Timo Hentschel (timo@timohentschel.de)
@cvs-id $Id:
......@@ -10,11 +10,11 @@ ad_page_contract {
tree_ids:integer,multiple
{category_ids:integer,multiple,optional ""}
{page:integer,optional 1}
{orderby:optional object_name}
{subtree_p:optional f}
{orderby:token,optional object_name}
{subtree_p:boolean,optional f}
{letter:optional all}
{join:optional or}
package_id:optional
package_id:naturalnum,optional
} -properties {
page_title:onevalue
context_bar:onevalue
......@@ -36,8 +36,8 @@ set user_id [auth::require_login]
set page_title "Browse categories"
set context_bar [list "Browse categories"]
set url_vars [export_vars -url { tree_ids:multiple category_ids:multiple subtree_p letter join package_id]
set form_vars [export_form_vars tree_ids:multiple orderby subtree_p letter package_id]
set url_vars [export_vars {tree_ids:multiple category_ids:multiple subtree_p letter join package_id}]
set form_vars [export_vars -form {tree_ids:multiple orderby subtree_p letter package_id}]
db_transaction {
# use temporary table to use only bind vars in queries
......@@ -55,7 +55,7 @@ template::util::list_to_lookup $category_ids category_selected
foreach tree_id $tree_ids {
set tree_name [category_tree::get_name $tree_id]
foreach category [category_tree::get_tree $tree_id] {
util_unlist $category category_id category_name deprecated_p level
lassign $category category_id category_name deprecated_p level
set indent ""
if {$level>1} {
set indent "[string repeat "&nbsp;" [expr {2*$level -4}]].."
......@@ -64,14 +64,35 @@ foreach tree_id $tree_ids {
}
}
set table_def {
{object_name "Object Name" {upper(n.object_name) $order} {<td><a href="/o/$object_id">$object_name</a></td>}}
{instance_name "Package" {} {<td align=right><a href="/o/$package_id">$instance_name</a></td>}}
{package_type "Package Type" {} r}
{creation_date "Creation Date" {} r}
}
template::list::create -name items_list -multirow items \
-html {align center} \
-elements {
object_name {
label "Object Name"
display_template {
<a href="/o/@items.object_id@">@items.object_name@</a>
}
orderby {n.object_name}
}
instance_name {
label "Package"
display_template {
<a href="/o/@items.package_id@">@items.instance_name@</a>
}
html {align right}
}
package_type {
label "Package Type"
html {align right}
}
creation_date {
label "Creation Date"
html {align right}
}
} \
-filters {subtree_p {} letter {} tree_ids {}}
set order_by_clause [ad_order_by_from_sort_spec $orderby $table_def]
set order_by_clause [template::list::orderby_clause -orderby -name items_list]
set dimensional_def {
{subtree_p "Categorization" f {
......@@ -110,7 +131,7 @@ if {[info exists package_id]} {
set category_ids_length [llength $category_ids]
if {$join eq "and"} {
# combining categories with and
if {$subtree_p eq "t"} {
if {$subtree_p == "t"} {
# generate sql for exact categorizations plus subcategories
set subtree_sql [db_map include_subtree_and]
} else {
......@@ -119,7 +140,7 @@ if {$join eq "and"} {
}
} else {
# combining categories with or
if {$subtree_p eq "t"} {
if {$subtree_p == "t"} {
# generate sql for exact categorizations plus subcategories
set subtree_sql [db_map include_subtree_or]
} else {
......@@ -145,7 +166,7 @@ db_transaction {
set last_row [paginator get_row_last $p_name $page]
# execute query to get the objects on current page
set items [ad_table -Torderby $orderby get_categorized_objects "" $table_def]
db_multirow items get_categorized_objects {} {}
}
db_dml delete_tmp_category_trees ""
......
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