Index: openacs-4/packages/workflow/workflow.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/workflow.info,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/workflow/workflow.info 28 Aug 2003 09:41:59 -0000 1.6
+++ openacs-4/packages/workflow/workflow.info 1 Sep 2003 13:43:50 -0000 1.7
@@ -8,7 +8,7 @@
t
workflow
-
+
oracle
postgresql
@@ -22,7 +22,7 @@
<p>
For more information, see: <a href="http://www.collaboraid.biz/developer/workflow-spec">the workflow specification</a>.
-
+
Index: openacs-4/packages/workflow/sql/oracle/workflow-tables-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/oracle/workflow-tables-create.sql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/workflow/sql/oracle/workflow-tables-create.sql 28 Aug 2003 09:41:59 -0000 1.3
+++ openacs-4/packages/workflow/sql/oracle/workflow-tables-create.sql 1 Sep 2003 13:43:51 -0000 1.4
@@ -380,6 +380,66 @@
);
---------------------------------
+-- Deputies
+---------------------------------
+
+-- When a user is away, for example on vacation, he
+-- can hand over his workflow roles to some other user - a deputy
+create table workflow_deputies (
+ user_id integer
+ constraint workflow_deputies_pk
+ primary key
+ constraint workflow_deputies_uid_fk
+ references users(user_id),
+ deputy_user_id integer
+ constraint workflow_deputies_duid_fk
+ references users(user_id),
+ start_date date
+ constraint workflow_deputies_sdate_nn
+ not null,
+ end_date date
+ constraint workflow_deputies_edate_nn
+ not null,
+ message varchar(4000)
+);
+
+-- role-to-user-map with deputies. Does not select users who
+-- have deputies, should we do that?
+create or replace view workflow_case_role_user_map as
+select distinct q.case_id,
+ q.role_id,
+ q.user_id,
+ q.on_behalf_of_user_id
+from (
+ select rpm.case_id,
+ rpm.role_id,
+ pmm.member_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and not exists (select 1
+ from workflow_deputies
+ where user_id = pmm.member_id
+ and sysdate between start_date and end_date)
+ union
+ select rpm.case_id,
+ rpm.role_id,
+ dep.deputy_user_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u,
+ workflow_deputies dep
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and dep.user_id = pmm.member_id
+ and sysdate between dep.start_date and dep.end_date
+) q;
+
+---------------------------------
-- Case level, Finite State Machine Model
---------------------------------
Index: openacs-4/packages/workflow/sql/oracle/workflow-tables-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/oracle/workflow-tables-drop.sql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/workflow/sql/oracle/workflow-tables-drop.sql 5 Mar 2003 17:17:18 -0000 1.2
+++ openacs-4/packages/workflow/sql/oracle/workflow-tables-drop.sql 1 Sep 2003 13:43:51 -0000 1.3
@@ -35,6 +35,8 @@
-- Drop all tables
drop table workflow_case_fsm;
drop table workflow_case_role_party_map;
+drop view workflow_case_role_user_map;
+drop table workflow_deputies;
drop table workflow_case_log_data;
drop table workflow_case_log;
drop table workflow_cases;
Index: openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.0d4-1.0d5.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.0d4-1.0d5.sql,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/workflow/sql/oracle/upgrade/upgrade-1.0d4-1.0d5.sql 1 Sep 2003 13:43:51 -0000 1.1
@@ -0,0 +1,68 @@
+--
+-- Upgrade script
+--
+-- Adds deputy feature
+--
+-- Peter Marklund (peter@collaboraid.biz)
+--
+-- $Id: upgrade-1.0d4-1.0d5.sql,v 1.1 2003/09/01 13:43:51 peterm Exp $
+
+---------------------------------
+-- Deputies
+---------------------------------
+
+-- When a user is away, for example on vacation, he
+-- can hand over his workflow roles to some other user - a deputy
+create table workflow_deputies (
+ user_id integer
+ constraint workflow_deputies_pk
+ primary key
+ constraint workflow_deputies_uid_fk
+ references users(user_id),
+ deputy_user_id integer
+ constraint workflow_deputies_duid_fk
+ references users(user_id),
+ start_date date
+ constraint workflow_deputies_sdate_nn
+ not null,
+ end_date date
+ constraint workflow_deputies_edate_nn
+ not null,
+ message varchar(4000)
+);
+
+-- role-to-user-map with deputies. Does not select users who
+-- have deputies, should we do that?
+create or replace view workflow_case_role_user_map as
+select distinct q.case_id,
+ q.role_id,
+ q.user_id,
+ q.on_behalf_of_user_id
+from (
+ select rpm.case_id,
+ rpm.role_id,
+ pmm.member_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and not exists (select 1
+ from workflow_deputies
+ where user_id = pmm.member_id
+ and sysdate between start_date and end_date)
+ union
+ select rpm.case_id,
+ rpm.role_id,
+ dep.deputy_user_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u,
+ workflow_deputies dep
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and dep.user_id = pmm.member_id
+ and sysdate between dep.start_date and dep.end_date
+) q;
Index: openacs-4/packages/workflow/sql/postgresql/workflow-tables-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/postgresql/workflow-tables-create.sql,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/workflow/sql/postgresql/workflow-tables-create.sql 28 Aug 2003 12:03:23 -0000 1.10
+++ openacs-4/packages/workflow/sql/postgresql/workflow-tables-create.sql 1 Sep 2003 13:43:51 -0000 1.11
@@ -405,6 +405,66 @@
);
---------------------------------
+-- Deputies
+---------------------------------
+
+-- When a user is away, for example on vacation, he
+-- can hand over his workflow roles to some other user - a deputy
+create table workflow_deputies (
+ user_id integer
+ constraint workflow_deputies_pk
+ primary key
+ constraint workflow_deputies_uid_fk
+ references users(user_id),
+ deputy_user_id integer
+ constraint workflow_deputies_duid_fk
+ references users(user_id),
+ start_date date
+ constraint workflow_deputies_sdate_nn
+ not null,
+ end_date date
+ constraint workflow_deputies_edate_nn
+ not null,
+ message varchar(4000)
+);
+
+-- role-to-user-map with deputies. Does not select users who
+-- have deputies, should we do that?
+create view workflow_case_role_user_map as
+select distinct q.case_id,
+ q.role_id,
+ q.user_id,
+ q.on_behalf_of_user_id
+from (
+ select rpm.case_id,
+ rpm.role_id,
+ pmm.member_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and not exists (select 1
+ from workflow_deputies
+ where user_id = pmm.member_id
+ and now() between start_date and end_date)
+ union
+ select rpm.case_id,
+ rpm.role_id,
+ dep.deputy_user_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u,
+ workflow_deputies dep
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and dep.user_id = pmm.member_id
+ and now() between dep.start_date and dep.end_date
+) q;
+
+---------------------------------
-- Case level, Finite State Machine Model
---------------------------------
Index: openacs-4/packages/workflow/sql/postgresql/workflow-tables-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/postgresql/workflow-tables-drop.sql,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/workflow/sql/postgresql/workflow-tables-drop.sql 5 Mar 2003 17:17:33 -0000 1.6
+++ openacs-4/packages/workflow/sql/postgresql/workflow-tables-drop.sql 1 Sep 2003 13:43:51 -0000 1.7
@@ -37,6 +37,8 @@
-- Drop all tables
drop table workflow_case_fsm;
+drop view workflow_case_role_user_map;
+drop table workflow_deputies;
drop table workflow_case_role_party_map;
drop table workflow_case_log_data;
drop table workflow_case_log;
Index: openacs-4/packages/workflow/sql/postgresql/upgrade/upgrade-1.0d4-1.0d5.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/sql/postgresql/upgrade/upgrade-1.0d4-1.0d5.sql,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/workflow/sql/postgresql/upgrade/upgrade-1.0d4-1.0d5.sql 1 Sep 2003 13:43:51 -0000 1.1
@@ -0,0 +1,68 @@
+--
+-- Upgrade script
+--
+-- Adds deputy feature
+--
+-- Peter Marklund (peter@collaboraid.biz)
+--
+-- $Id: upgrade-1.0d4-1.0d5.sql,v 1.1 2003/09/01 13:43:51 peterm Exp $
+
+---------------------------------
+-- Deputies
+---------------------------------
+
+-- When a user is away, for example on vacation, he
+-- can hand over his workflow roles to some other user - a deputy
+create table workflow_deputies (
+ user_id integer
+ constraint workflow_deputies_pk
+ primary key
+ constraint workflow_deputies_uid_fk
+ references users(user_id),
+ deputy_user_id integer
+ constraint workflow_deputies_duid_fk
+ references users(user_id),
+ start_date date
+ constraint workflow_deputies_sdate_nn
+ not null,
+ end_date date
+ constraint workflow_deputies_edate_nn
+ not null,
+ message varchar(4000)
+);
+
+-- role-to-user-map with deputies. Does not select users who
+-- have deputies, should we do that?
+create view workflow_case_role_user_map as
+select distinct q.case_id,
+ q.role_id,
+ q.user_id,
+ q.on_behalf_of_user_id
+from (
+ select rpm.case_id,
+ rpm.role_id,
+ pmm.member_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and not exists (select 1
+ from workflow_deputies
+ where user_id = pmm.member_id
+ and now() between start_date and end_date)
+ union
+ select rpm.case_id,
+ rpm.role_id,
+ dep.deputy_user_id as user_id,
+ pmm.member_id as on_behalf_of_user_id
+ from workflow_case_role_party_map rpm,
+ party_approved_member_map pmm,
+ users u,
+ workflow_deputies dep
+ where rpm.party_id = pmm.party_id
+ and pmm.member_id = u.user_id
+ and dep.user_id = pmm.member_id
+ and now() between dep.start_date and dep.end_date
+) q;
Index: openacs-4/packages/workflow/tcl/case-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/case-procs.tcl,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/workflow/tcl/case-procs.tcl 28 Aug 2003 14:24:55 -0000 1.9
+++ openacs-4/packages/workflow/tcl/case-procs.tcl 1 Sep 2003 13:43:51 -0000 1.10
@@ -113,8 +113,10 @@
} {
Get information about a case
- @param caes_id The case ID
- @param array The name of an array in which information will be returned.
+ @param case_id The case ID
+ @param array The name of an array in which information will be returned.
+ @param action_id If specified, will return the case information as if the given action had already been executed.
+ This is useful for presenting forms for actions that do not take place until the user hits OK.
@author Lars Pind (lars@collaboraid.biz)
} {
@@ -137,10 +139,13 @@
} {
Return a single element from the information about a case.
- @param case_id The ID of the case
- @param element The element you want
- @return The element you asked for
+ @param case_id The ID of the case
+ @param element The element you want
+ @param action_id If specified, will return the case information as if the given action had already been executed.
+ This is useful for presenting forms for actions that do not take place until the user hits OK.
+ @return The element you asked for
+
@author Lars Pind (lars@collaboraid.biz)
} {
get -case_id $case_id -action_id $action_id -array row
@@ -163,11 +168,13 @@
{-case_id:required}
-user_id
} {
- Get the roles which this user is assigned to
-of
+ Get the roles which this user is assigned to.
+ Takes deputies into account, so that if the user is a deputy for someone else,
+ he or she will have the roles of the user for whom he/she is a deputy.
+
@param case_id The ID of the case.
- @param user_id The user_id of the user for which you want to know the roles.
- @return A list of role_id's of the roles which the user is assigned to in this case.
+ @param user_id The user_id of the user for which you want to know the roles. Defaults to ad_conn user_id.
+ @return A list of role_id's of the roles which the user is assigned to in this case.
@author Lars Pind (lars@collaboraid.biz)
} {
@@ -271,12 +278,13 @@
}
}
- workflow::case::role::flush_cache $case_id
+ workflow::case::role::flush_cache -case_id $case_id
}
ad_proc -private workflow::case::get_activity_html {
{-case_id:required}
{-action_id ""}
+ {-max_n_actions ""}
} {
Get the activity log for a case as an HTML chunk.
If action_id is non-empty, it means that we're in
@@ -285,6 +293,7 @@
@param case_id The case for which you want the activity log.
@param action_id optional action which is currently being executed.
+ @param max_n_actions Limit history to the max_n_actions number of most recent actions
@return Activity log as HTML
@author Lars Pind (lars@collaboraid.biz)
@@ -299,7 +308,14 @@
# Compile and evaluate the template
set code [template::adp_compile -string $template]
- foreach entry_arraylist [get_activity_log_info -case_id $case_id] {
+ set activity_entry_list [get_activity_log_info_not_cached -case_id $case_id]
+ set start_index 0
+ if { ![empty_string_p $max_n_actions] && [llength $activity_entry_list] > $max_n_actions} {
+ # Only return the last max_n_actions actions
+ set start_index [expr [llength $activity_entry_list] - $max_n_actions]
+ }
+
+ foreach entry_arraylist [lrange $activity_entry_list $start_index end] {
foreach { var value } $entry_arraylist {
set $var $value
}
@@ -397,6 +413,7 @@
set rowcount [template::multirow -local size entries]
+
set counter 1
set last_entry_id {}
@@ -604,9 +621,42 @@
db_string select_log_data {} -default {}
}
+ad_proc -private workflow::case::cache_timeout {} {
+ Number of seconds before we timeout the case level workflow cache.
+ @author Peter Marklund
+} {
+ # 60 * 60 seconds is 1 hour
+ return 3600
+}
+ad_proc -private workflow::case::flush_cache {
+ {-case_id ""}
+} {
+ Flush all cached data for a given case or for all
+ cases if none is specified.
+ @param case_id The id of the workflow case to flush. If not provided the
+ cache will be flushed for all workflow cases.
+
+ @author Peter Marklund
+} {
+ foreach proc_name {
+ workflow::case::fsm::get_info_not_cached
+ workflow::case::get_user_roles_not_cached
+ workflow::case::get_enabled_actions_not_cached
+ } {
+ util_memoize_flush_regexp "^$proc_name [ad_decode $case_id "" {\.*} $case_id]"
+ }
+
+ util_memoize_flush_regexp [list workflow::case::get_activity_log_info_not_cached -case_id $case_id]
+
+ # Flush role info (assignees etc)
+ workflow::case::role::flush_cache -case_id $case_id
+}
+
+
+
#####
#
# workflow::case::role namespace
@@ -832,7 +882,7 @@
append display_value " ($cur_assignee(email))"
}
- uplevel [list element set_properties bug $element -display_value $display_value]
+ uplevel [list element set_properties $form_name $element -display_value $display_value]
}
}
}
@@ -868,11 +918,13 @@
return $result
}
-ad_proc -private workflow::case::role::flush_cache { case_id } {
- Flush all role related info for a certain case.
-
+ad_proc -private workflow::case::role::flush_cache {
+ {-case_id ""}
+ } {
+ Flush all role related info for a certain case or for all
+ cases if none is specified.
} {
- util_memoize_flush_regexp [list workflow::case::role::get_assignees_not_cached $case_id]
+ util_memoize_flush_regexp "^workflow::case::role::get_assignees_not_cached [ad_decode $case_id "" {\.*} $case_id]"
}
ad_proc -public workflow::case::role::assignee_insert {
@@ -907,7 +959,7 @@
}
}
- workflow::case::role::flush_cache $case_id
+ workflow::case::role::flush_cache -case_id $case_id
}
ad_proc -public workflow::case::role::assign {
@@ -962,20 +1014,21 @@
@author Lars Pind (lars@collaboraid.biz)
} {
- return [db_string select_current_state {}]
+ #return [db_string select_current_state {}]
+ return [workflow::case::fsm::get_element -case_id $case_id -element state_id]
}
ad_proc -public workflow::case::fsm::get {
{-case_id:required}
{-array:required}
{-action_id {}}
} {
- Get information about an FSM case
+ Get information about an FSM case set as values in your array.
- @param caes_id The case ID
- @param array The name of an array in which information will be returned.
- @param action_id If you supply an action here, you'll get
- the information as it'll look after executing the given action.
+ @param case_id The ID of the case
+ @param array The name of an array in which information will be returned.
+ @param action_id If specified, will return the case information as if the given action had already been executed.
+ This is useful for presenting forms for actions that do not take place until the user hits OK.
@author Lars Pind (lars@collaboraid.biz)
} {
@@ -993,13 +1046,24 @@
}
}
-ad_proc -private workflow::case::cache_timeout {} {
- Number of seconds before we timeout the case level workflow cache.
+ad_proc -public workflow::case::fsm::get_element {
+ {-case_id:required}
+ {-element:required}
+ {-action_id {}}
+} {
+ Return a single element from the information about a case.
- @author Peter Marklund
+ @param case_id The ID of the case
+ @param element The element you want
+ @param action_id If specified, will return the case information as if the given action had already been executed.
+ This is useful for presenting forms for actions that do not take place until the user hits OK.
+
+ @return The element you asked for
+
+ @author Lars Pind (lars@collaboraid.biz)
} {
- # 60 * 60 seconds is 1 hour
- return 3600
+ get -case_id $case_id -action_id $action_id -array row
+ return $row($element)
}
ad_proc -private workflow::case::fsm::get_info_not_cached { case_id } {
@@ -1013,25 +1077,8 @@
return [array get row]
}
-ad_proc -private workflow::case::flush_cache { case_id } {
- Flush all cached data for the given case.
- @author Peter Marklund
-} {
- # Flush scalar attributes (for fsm::get proc)
- util_memoize_flush [list workflow::case::fsm::get_info_not_cached $case_id]
- # Flush role info (assignees etc)
- workflow::case::role::flush_cache $case_id
-
- # Flush roles
- util_memoize_flush_regexp [list workflow::case::get_user_roles_not_cached $case_id]
-
- # Flush enabled actions
- util_memoize_flush [list workflow::case::get_enabled_actions_not_cached $case_id]
-}
-
-
#####
#
# workflow::case::action
@@ -1222,7 +1269,7 @@
}
- workflow::case::flush_cache $case_id
+ workflow::case::flush_cache -case_id $case_id
# Notifications
notify \
@@ -1372,9 +1419,11 @@
set the_subject "[ad_decode $object_notification_tag "" "" "\[$object_notification_tag\] "]$object_one_line: $latest_action(action_pretty_past_tense) [ad_decode $latest_action(log_title) "" "" "$latest_action(log_title) "]by $latest_action(user_first_names) $latest_action(user_last_name)"
# List of user_id's for people who are in the assigned_role to any enabled actions
+ # This takes deputies into account
set assignee_list [db_list enabled_action_assignees {}]
# List of users who play some role in this case
+ # This takes deputies into account
set case_player_list [db_list case_players {}]
# Get pretty_name and pretty_plural for the case's object type
Index: openacs-4/packages/workflow/tcl/case-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/case-procs.xql,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/workflow/tcl/case-procs.xql 28 Aug 2003 09:41:59 -0000 1.7
+++ openacs-4/packages/workflow/tcl/case-procs.xql 1 Sep 2003 13:43:51 -0000 1.8
@@ -44,12 +44,10 @@
- select distinct rpm.role_id
- from workflow_case_role_party_map rpm,
- party_approved_member_map pmm
- where rpm.case_id = :case_id
- and rpm.party_id = pmm.party_id
- and pmm.member_id = :user_id
+ select distinct role_id
+ from workflow_case_role_user_map
+ where case_id = :case_id
+ and user_id = :user_id
@@ -78,7 +76,7 @@
select count(*)
- from workflow_case_role_party_map
+ from workflow_case_role_user_map
where case_id = :case_id
and role_id = :role_id
@@ -216,12 +214,10 @@
- select distinct u.user_id
+ select distinct rum.user_id
from workflow_cases c,
workflow_actions a,
- workflow_case_role_party_map rpm,
- party_approved_member_map pmm,
- users u
+ workflow_case_role_user_map rum
where c.case_id = :case_id
and a.workflow_id = c.workflow_id
and (a.always_enabled_p = 't' or
@@ -232,22 +228,16 @@
and c_fsm.case_id = c.case_id
and waeis.state_id = c_fsm.current_state)
)
- and rpm.case_id = c.case_id
- and rpm.role_id = a.assigned_role
- and pmm.party_id = rpm.party_id
- and u.user_id = pmm.member_id
+ and rum.case_id = c.case_id
+ and rum.role_id = a.assigned_role
- select distinct u.user_id
- from workflow_case_role_party_map rpm,
- party_approved_member_map pmm,
- users u
- where rpm.case_id = :case_id
- and rpm.party_id = pmm.party_id
- and pmm.member_id = u.user_id
+ select distinct user_id
+ from workflow_case_role_user_map
+ where case_id = :case_id
Index: openacs-4/packages/workflow/tcl/workflow-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/workflow-procs.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/workflow/tcl/workflow-procs.tcl 28 Aug 2003 09:41:59 -0000 1.8
+++ openacs-4/packages/workflow/tcl/workflow-procs.tcl 1 Sep 2003 13:43:51 -0000 1.9
@@ -235,6 +235,12 @@
workflow::role::flush_cache -workflow_id $workflow_id
workflow::action::flush_cache -workflow_id $workflow_id
workflow::state::flush_cache -workflow_id $workflow_id
+
+ # Flush all workflow cases from the cache. We are flushing more than needed here
+ # but this approach seems easier and faster than looping over a potentially big number
+ # of cases mapped to the workflow in the database, only a few of which may actually be
+ # cached and need flushing
+ workflow::case::flush_cache
}
ad_proc -private workflow::cache_timeout {} {
Index: openacs-4/packages/workflow/tcl/test/workflow-test-init.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/test/Attic/workflow-test-init.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/workflow/tcl/test/workflow-test-init.tcl 4 Apr 2003 09:48:41 -0000 1.1
+++ openacs-4/packages/workflow/tcl/test/workflow-test-init.tcl 1 Sep 2003 13:43:51 -0000 1.2
@@ -93,3 +93,4 @@
workflow::test::run_with_teardown $test_chunk $teardown_chunk
}
+
Index: openacs-4/packages/workflow/tcl/test/workflow-test-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/test/workflow-test-procs.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/workflow/tcl/test/workflow-test-procs.tcl 28 Aug 2003 09:41:59 -0000 1.8
+++ openacs-4/packages/workflow/tcl/test/workflow-test-procs.tcl 1 Sep 2003 13:43:51 -0000 1.9
@@ -238,8 +238,6 @@
set len1 [llength $list1]
set len2 [llength $list2]
- ns_log Notice "LARS2: lists_equal_p, len1=$len1, len2=$len2\nList1=$list1\nList2=$list2"
-
if { $len1 != $len2 } {
return 0
}
@@ -274,8 +272,6 @@
# List, treat as normal list
foreach elm1 $list1 elm2 $list2 {
- ns_log Notice "LARS2: foreach, len1=[llength $elm1], len2=[llength $elm2]\nElm1=$elm1\nElm2=$elm2"
-
if { ![array_lists_equal_p $elm1 $elm2] } {
return 0
}
@@ -464,9 +460,6 @@
set generated_spec [workflow::fsm::generate_spec -workflow_id $workflow_id]
- ns_log Notice "LARS: Generated spec 1: $generated_spec"
- ns_log Notice "LARS: Hard-coded spec 1: [workflow_get_array_style_spec]"
-
aa_true "Checking that generated spec 1 is identical to the spec that we created from (except for ordering)" \
[array_lists_equal_p $generated_spec [workflow_get_array_style_spec]]
@@ -549,6 +542,82 @@
-expect_enabled_actions $expect_enabled_actions \
-expect_user_actions $expect_enabled_actions \
-expect_user_roles {}
+
+
+ #####
+ #
+ # Intermezzo: Check cache and flushing
+ #
+ #####
+
+ # -1. Basic sanity check
+ aa_equals "Stat is resolved" [workflow::case::get_element -case_id $case_id -element state_short_name] "resolved"
+
+ # 0. Desired output
+ global desired_output
+ set desired_output [workflow::case::fsm::get_info_not_cached $case_id]
+
+ ns_log Notice "LARS: desired_output = '$desired_output' ([llength $desired_output])"
+
+ # 1. Make sure the cache is populated
+ set dummy [workflow::case::get_element -case_id $case_id -element state_short_name]
+
+ with_catch errmsg {
+
+ # 2. Stub the cache proc
+ aa_stub workflow::case::fsm::get_info_not_cached {
+ # Note that we got called
+ global i_got_called_p desired_output
+ set i_got_called_p 1
+
+ return $desired_output
+ }
+ global i_got_called_p
+
+ # 3. Check that it doesn't call stubbed proc
+ set i_got_called_p 0
+ set dummy [workflow::case::get_element -case_id $case_id -element state_short_name]
+ aa_false "Check that the value is in the cache (1st time)" $i_got_called_p
+
+ # 4. Flush
+ workflow::case::flush_cache -case_id $case_id
+
+ # 5. Check that it DOES call stubbed proc
+ set i_got_called_p 0
+ set dummy [workflow::case::get_element -case_id $case_id -element state_short_name]
+ aa_true "Check that the value is NOT in the cache (1st time)" $i_got_called_p
+
+ # 6. Manually populate the cache
+ util_memoize_seed [list workflow::case::fsm::get_info_not_cached $case_id] $desired_output [workflow::case::cache_timeout]
+
+ # 7. Check that it doesn't call stubbed proc
+ set i_got_called_p 0
+ set dummy [workflow::case::get_element -case_id $case_id -element state_short_name]
+ aa_false "Check that the value is in the cache (2nd time)" $i_got_called_p
+
+ # 8. Flush
+ workflow::case::flush_cache
+
+ # 9. Check that it DOES call stubbed proc
+ set i_got_called_p 0
+ set dummy [workflow::case::get_element -case_id $case_id -element state_short_name]
+ aa_true "Check that the value is NOT in the cache (2nd time)" $i_got_called_p
+ } {
+ aa_unstub workflow::case::fsm::get_info_not_cached
+
+ global errorInfo
+ error $errmsg $errorInfo
+ }
+
+ # 10. Unstub
+ aa_unstub workflow::case::fsm::get_info_not_cached
+
+
+ #####
+ #
+ # Continue with case
+ #
+ #####
# Close the bug
workflow::case::action::execute \