Index: openacs-4/packages/tasks/tasks.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/tasks.info,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/tasks.info	27 Jul 2005 13:44:58 -0000	1.1
+++ openacs-4/packages/tasks/tasks.info	25 Sep 2005 23:49:22 -0000	1.2
@@ -14,8 +14,11 @@
 
         <provides url="tasks" version="0.1d"/>
         <requires url="project-manager" version="2.70a1"/>
+        <requires url="workflow" version="2.0.0b4"/>
 
         <callbacks>
+            <callback type="after-install"  proc="tasks::install::package_install"/>
+            <callback type="after-upgrade"  proc="tasks::install::after_upgrade"/>
         </callbacks>
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/tasks/catalog/tasks.en_US.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/catalog/tasks.en_US.ISO-8859-1.xml,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/tasks/catalog/tasks.en_US.ISO-8859-1.xml	27 Jul 2005 14:29:51 -0000	1.2
+++ openacs-4/packages/tasks/catalog/tasks.en_US.ISO-8859-1.xml	25 Sep 2005 23:49:23 -0000	1.3
@@ -7,11 +7,14 @@
   <msg key="Assign_Process">Assign Process</msg>
   <msg key="Cancel">Cancel</msg>
   <msg key="Cancel_do_not_delete">Cancel, do not delete</msg>
+  <msg key="Comment">Comment</msg>
+  <msg key="completed_sure">Are you sure you want to mark %pretty_entries% as done?</msg>
+  <msg key="Contact">Contact</msg>
   <msg key="Created_By">Created By</msg>
   <msg key="Custom_Task">Custom Task</msg>
   <msg key="Date">Date</msg>
   <msg key="Delete">Delete</msg>
-  <msg key="Delete_task_pretty">Delete $task_pretty</msg>
+  <msg key="Delete_task_pretty">Delete %task_pretty%</msg>
   <msg key="Done">Done</msg>
   <msg key="Due">Due</msg>
   <msg key="Follow_Up_Call">Follow Up Call</msg>
@@ -21,21 +24,23 @@
   <msg key="lt_Add_Task_save________">Add Task} save}
         {{&lt;#_ Add Task and Add Another</msg>
   <msg key="lt_Are_you_sure_you_want">Are you sure you want to delete this process: %one_line%</msg>
-  <msg key="lt_Are_you_sure_you_want_1">Are you sure you want to delete $task2_pretty ?</msg>
+  <msg key="lt_Are_you_sure_you_want_1">Are you sure you want to delete %task2_pretty% ?</msg>
   <msg key="lt_Delete_from_Recruitin">Delete from Recruiting System</msg>
   <msg key="lt_Either_a_custom_task_">Either a custom task or standard task is required</msg>
-  <msg key="lt_Originally_created_by">Originally created by &lt;a href=\&quot;[contact::url -party_id $creation_id]\&quot;&gt;[contact::name -party_id $creation_id]&lt;/a&gt;</msg>
+  <msg key="lt_Originally_created_by">Originally created by &lt;a href=\&quot;%creator_url%\&quot;&gt;%creator_name%&lt;/a&gt;</msg>
   <msg key="lt_Provide_Promotional_I">Provide Promotional Information</msg>
   <msg key="lt_Send_Personal_NoteLet">Send Personal Note/Letter</msg>
   <msg key="lt_Standard_tasks_are_ca">Standard tasks are cannot be used in conjunction with custom tasks</msg>
-  <msg key="lt_The_task_a_hreftaskst">The task &lt;a href=\&quot;/tasks/${task_url}\&quot;&gt;$task&lt;/a&gt; was added</msg>
-  <msg key="lt_The_task_a_hreftaskst_1">The task &lt;a href=\&quot;/tasks/${task_url}\&quot;&gt;$title&lt;/a&gt; was updated</msg>
-  <msg key="lt_The_task_lindex_task_">The task \&quot;[lindex $task_titles 0]\&quot; was deleted</msg>
-  <msg key="lt_The_task_task_was_add">The task \&quot;$task\&quot; was added to $names</msg>
-  <msg key="lt_The_tasks_task_list_w">The tasks ${task_list} were deleted</msg>
-  <msg key="lt_these_num_entries_tas">these $num_entries tasks</msg>
+  <msg key="lt_The_task_a_hreftaskst">The task &lt;a href=&quot;/tasks/%task_url%&quot;&gt;%task%&lt;/a&gt; was added</msg>
+  <msg key="lt_The_task_a_hreftaskst_1">The task &lt;a href=&quot;/tasks/%task_url%&quot;&gt;%title%&lt;/a&gt; was updated</msg>
+  <msg key="lt_The_task_was">The task &quot;%task_title%&quot; was deleted</msg>
+  <msg key="lt_The_task_task_was_add">The task &quot;%task%&quot; was added to %names%</msg>
+  <msg key="lt_The_tasks_task_list_w">The tasks %task_list% were deleted</msg>
+  <msg key="lt_these_num_entries_tas">these %num_entries% tasks</msg>
   <msg key="lt_Update_and_Add_New_Ta">Update and Add New Task</msg>
   <msg key="lt_You_are_not_allowed_t">You are not allowed to bulk edit a task for multiple contacts</msg>
+  <msg key="Mark_Completed">Mark Completed</msg>
+  <msg key="Mark_Done">Mark %pretty_task% as Done</msg>
   <msg key="more">more</msg>
   <msg key="No_Cancel">No, Cancel</msg>
   <msg key="Not_Allowed">Not Allowed</msg>
@@ -51,8 +56,14 @@
   <msg key="Standard_Task">Standard Task</msg>
   <msg key="Status">Status</msg>
   <msg key="Task">Task</msg>
+  <msg key="task_completed">The task &quot;%task_title%&quot; was marked done</msg>
+  <msg key="task_delayed">The task &lt;a href=&quot;%task_url%&quot;&gt;%task%&lt;/a&gt; delayed 7 days</msg>
+  <msg key="task_moved_up">The task &lt;a href=&quot;%task_url%&quot;&gt;%task%&lt;/a&gt; moved up 7 days</msg>
   <msg key="Tasks">Tasks</msg>
+  <msg key="tasks_completed">The tasks %task_list% were marked done</msg>
+  <msg key="these_tasks">these %num_entries% tasks</msg>
   <msg key="this_task">this task</msg>
   <msg key="Update">Update</msg>
+  <msg key="View_next">View next</msg>
   <msg key="Yes">Yes</msg>
 </message_catalog>
Index: openacs-4/packages/tasks/lib/contact-tasks.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/lib/contact-tasks.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/tasks/lib/contact-tasks.adp	25 Sep 2005 23:49:23 -0000	1.1
@@ -0,0 +1,6 @@
+<p>
+<a href="@add_url@"     class="button">#tasks.Add_Task#</a>
+<a href="/tasks/processes?assignee_id=@user_id@&object_id=@contact_id@"     class="button">#tasks.Assign_Process#</a>
+</p>
+
+<listtemplate name="tasks"></listtemplate>
Index: openacs-4/packages/tasks/lib/contact-tasks.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/lib/contact-tasks.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/tasks/lib/contact-tasks.tcl	25 Sep 2005 23:49:23 -0000	1.1
@@ -0,0 +1,181 @@
+set user_id [ad_conn user_id]
+set party_id $user_id
+set tasks_url "/tasks/"
+
+if { ![contact::exists_p -party_id $contact_id] } {
+    set contact_id $user_id
+}
+if { ![exists_and_not_null orderby] } {
+    set orderby "priority,desc"
+}
+if { ![exists_and_not_null status_id] } {
+    set status_id "1"
+}
+set done_url [export_vars -url -base "${tasks_url}contact" {orderby {status_id 2} party_id}]
+set not_done_url [export_vars -url -base "${tasks_url}contact" {orderby {status_id 1} party_id}]
+set return_url "[ad_conn url]?[ad_conn query]"
+set add_url [export_vars -base "${tasks_url}task" {return_url orderby status_id {object_id $contact_id} party_id}]
+
+set package_id [apm_package_id_from_key tasks]
+
+template::list::create \
+    -name tasks \
+    -multirow tasks \
+    -key task_id \
+    -elements {
+        deleted_p {
+	    label {<img src="/resources/acs-subsite/checkboxchecked.gif" alt="[_ tasks.Not_Done]" border="0" height="13" width="13">}
+	    display_template {
+		<if @tasks.done_p@><img src="/resources/acs-subsite/checkboxchecked.gif" alt="[_ tasks.Done]" border="0" height="13" width="13"></img></if>
+                <else><a href="@tasks.complete_url@"><img src="/resources/acs-subsite/checkbox.gif" alt="[_ tasks.Not_Done]" border="0" height="13" width="13"></img></a></else>
+	    }
+	}
+        priority {
+	    label "[_ tasks.Priority]"
+	    display_template {
+		<if @tasks.done_p@><span class="done">@tasks.priority@</span></if><else>@tasks.priority@</else>
+	    }
+	}
+	title {
+	    label "[_ tasks.Task]"
+            display_template {
+		<a href="@tasks.task_url@" title="@tasks.title@"<if @tasks.done_p@> class="done"</if>>@tasks.title@</a>
+		<if @tasks.description@ not nil>
+		<if @tasks.done_p@><div class="done"></if>
+                <p style="padding: 0; margin: 0; font-size: 0.85em; padding-left: 2em;">
+		@tasks.description_html;noquote@
+		</p>
+		<if @tasks.done_p@></div></if>
+		</if>
+	    }
+	}
+        process_title {
+	    label "[_ tasks.Process]"
+	    display_template {
+		<if @tasks.done_p@><span class="done">@tasks.process_title@</span></if>
+                <else>
+		  <if @tasks.process_title@ not nil>@tasks.process_title@</if>
+		</else>
+	    }
+	}
+        contact {
+	    label "[_ tasks.Contact]"
+	    display_template {
+		<if @tasks.object_id@ not nil><a href="@tasks.contact_url@">@tasks.contact@</a></if>
+	    }
+	}
+        date {
+	    label "[_ tasks.Date]"
+	    display_template {
+		<if @tasks.done_p@><span class="done">@tasks.completed_date;noquote@</span></if>
+                <else>
+		  <if @tasks.due_date@>
+		<a href="@tasks.task_minus_url@" style="text-decoration: none; font-weight: bold;">&laquo;</a>&nbsp;<if @tasks.due_date_passed_p@><span style="color: red;"></if>@tasks.due_date;noquote@<if @tasks.due_date_passed_p@></span></if>&nbsp;<a href="@tasks.task_plus_url@" style="text-decoration: none; font-weight: bold;">&raquo;</a>
+                  </if>
+                </else>
+	    }
+	}
+	creation_user {
+	    label "[_ tasks.Created_By]"
+	    display_template {
+		<a href="@tasks.creation_user_url@"<if @tasks.done_p@> class="done"</if>>@tasks.creation_name@</a>
+	    }
+	}      
+    } \
+    -sub_class {
+        narrow
+    } \
+    -filters {
+	contact_id {}
+    } -orderby {
+        default_value "priority,desc"
+        date {
+            label "[_ tasks.Due]"
+            orderby_desc "CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END desc, t.priority, lower(t.title)"
+            orderby_asc "CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END asc, t.priority, lower(t.title)"
+            default_direction desc
+        }
+        priority {
+            label "[_ tasks.Priority]"
+            orderby_desc "t.status_id, t.priority desc, CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END desc, lower(t.title)"
+            orderby_asc "t.status_id, t.priority asc, CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END asc, lower(t.title)"
+            default_direction desc
+        }
+        title {
+            label "[_ tasks.Task]"
+            orderby_desc "lower(t.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(t.title) asc, t.priority desc, t.due_date asc"
+            default_direction asc
+        }
+        process_title {
+	    label "[_ tasks.Process]"
+            orderby_desc "lower(p.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(p.title) asc, t.priority desc, t.due_date asc"
+	    default_direction asc
+	}
+	contact {
+	    label "[_ tasks.Contact]"
+            orderby_desc "lower(contact__name(t.object_id)) desc, t.due_date asc, t.priority, lower(t.title)"
+            orderby_asc "lower(contact__name(t.object_id)) asc, t.due_date asc, t.priority, lower(t.title)"
+	    default_direction asc
+	}
+	creation_user {
+	    label "[_ tasks.Created_By]"
+            orderby_desc "lower(contact__name(ao.creation_user)) desc, t.due_date asc, t.priority, lower(t.title)"
+            orderby_asc "lower(contact__name(ao.creation_user)) asc, t.due_date asc, t.priority, lower(t.title)"
+	    default_direction asc
+	}
+    }
+
+
+db_multirow -extend {creation_user_url contact_url complete_url done_p task_plus_url task_minus_url description_html task_url} -unclobber tasks get_tasks "
+    select t.task_id, t.title, t.description, t.mime_type, t.priority,
+           t.party_id, p.title as process_title, p.process_id,
+           tasks__relative_date(t.due_date) as due_date,
+           tasks__relative_date(t.completed_date) as completed_date,
+           ao.creation_user, t.status_id, t.process_instance_id,
+           contact__name(ao.creation_user) as creation_name,
+           CASE WHEN t.due_date < now() THEN 't' ELSE 'f' END as due_date_passed_p,
+           s.title as status, t.object_id,
+           contact__name(t.object_id) as contact
+      from t_task_status s, acs_objects ao, t_tasks t
+      left outer join t_process_instances pi
+      on (pi.process_instance_id = t.process_instance_id)
+      left outer join t_processes p
+      on (p.process_id = pi.process_id)
+      where s.status_id = t.status_id
+      and ao.object_id = t.task_id
+      and ao.package_id = :package_id
+      and t.object_id = :contact_id
+      and t.start_date < now()
+     [template::list::orderby_clause -orderby -name tasks]
+" {
+    set creation_user_url [contact::url -party_id $creation_user]
+    if {![empty_string_p $object_id]} {
+	set contact_url [contact::url -party_id $object_id]
+    }
+    regsub -all "/tasks/" $creation_user_url "/contacts/" creation_user_url
+    set complete_url [export_vars -base "${tasks_url}mark-completed" -url {task_id orderby party_id return_url}]
+    if { $status_id == "2" } {
+	set done_p 1
+    } else {
+	set done_p 0
+    }
+    set task_url [export_vars -base "${tasks_url}task" -url {party_id orderby status_id task_id}]
+    set task_plus_url  [export_vars -base "${tasks_url}task-interval" -url {{action plus}  {days 7} party_id task_id status_id orderby return_url}]
+    set task_minus_url [export_vars -base "${tasks_url}task-interval" -url {{action minus} {days 7} party_id task_id status_id orderby return_url}]
+
+    regsub -all "\r|\n" $description {LiNeBrEaK} description
+
+    set description_html [ad_html_text_convert \
+			      -from $mime_type \
+			      -to "text/html" \
+			      -truncate_len "400" \
+			      -more "<a href=\"${task_url}\">[_ tasks.more]</a>" \
+			      -- $description]
+    regsub -all {LiNeBrEaKLiNeBrEaK} $description_html {LiNeBrEaK} description_html
+    regsub -all {LiNeBrEaK} $description_html {\&nbsp;\&nbsp;\&#182;\&nbsp;} description_html
+
+    regsub -all " " $due_date {\&nbsp;} due_date
+    regsub -all " " $completed_date {\&nbsp;} completed_date
+}
Index: openacs-4/packages/tasks/sql/postgresql/tasks-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/sql/postgresql/tasks-create.sql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/sql/postgresql/tasks-create.sql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/sql/postgresql/tasks-create.sql	25 Sep 2005 23:49:23 -0000	1.2
@@ -6,15 +6,204 @@
 --
 -----------------------------------------------------
 
-create table tasks_pm_process_task (
+create table t_processes (
+        process_id                      integer
+                                        constraint t_process_id_pk
+                                        primary key
+                                        constraint t_process_id_fk
+                                        references acs_objects,
+        title                           varchar(1000),
+        description                     text,
+        mime_type                       varchar(200) default 'text/plain',
+        workflow_id                     integer
+                                        constraint t_process_workflow_fk
+                                        references workflows
+);
+
+create table t_process_instances (
+        process_instance_id             integer
+                                        constraint t_process_instances_id_pk
+                                        primary key
+                                        constraint t_process_instances_id_fk
+                                        references acs_objects,
+        process_id                      integer
+                                        constraint t_process_instances_process_fk
+                                        references t_processes,
+        case_id                         integer,
+        party_id                        integer
+                                        constraint t_process_instances_party_fk
+                                        references parties,
+        object_id                       integer
+                                        constraint t_process_instances_tasks_object_fk
+                                        references acs_objects
+);
+
+
+create sequence t_task_status_seq start 3;
+
+create table t_task_status (
+        status_id               integer
+                                constraint t_task_status_pk
+                                primary key,
+        short_name              varchar(100),
+        title                   varchar(100),
+        -- closed or open
+        status_type             char(1) default 'c'
+                                constraint t_task_status_type_ck
+                                check (status_type in ('c', 'o'))
+);
+
+insert into t_task_status (status_id, short_name, title, status_type) values
+(1, 'open', '#acs-kernel.common_Open#', 'o');
+insert into t_task_status (status_id, short_name, title, status_type) values
+(2, 'closed', '#acs-kernel.common_Closed#', 'c');
+
+
+create table t_process_tasks (
+        task_id                 integer
+                                constraint t_process_tasks_task_pk
+                                primary key
+                                constraint t_process_tasks_task_fk
+                                references acs_objects,
+        process_id              integer
+                                constraint t_process_tasks_process_fk
+                                references t_processes,
+        -- action creating this task
+        open_action_id          integer
+                                constraint t_process_tasks_open_action_fk
+                                references workflow_actions,
+        -- action when closing task
+        closing_action_id       integer
+                                constraint t_process_tasks_close_action_fk
+                                references workflow_actions,
+        party_id                integer
+                                constraint t_process_tasks_party_fk
+                                references parties,
+        object_id               integer
+                                constraint t_process_tasks_object_fk
+                                references acs_objects,
+        title                   varchar(1000),
+        description             text,
+        mime_type               varchar(200) default 'text/plain',
+        comment                 text,
+        status_id               integer
+                                constraint t_process_tasks_status_fk
+                                references t_task_status,
+        priority                integer,
+        -- start date relative to current date
+        start                   numeric,
+        -- due date relative to current date
+        due                     numeric
+);
+
+
+create table t_tasks (
+        task_id                 integer
+                                constraint t_tasks_task_pk
+                                primary key
+                                constraint t_tasks_task_fk
+                                references acs_objects,
+        process_instance_id     integer
+                                constraint t_tasks_instance_fk
+                                references t_process_instances,
         process_task_id         integer
-                                constraint tasks_pm_process_task_id_fk references pm_process_task(process_task_id)
-                                constraint tasks_pm_process_task_id_pk primary key,
-        due_interval            interval,
+                                constraint t_tasks_process_task_fk
+                                references t_process_tasks,
+        party_id                integer
+                                constraint t_tasks_party_fk
+                                references parties,
+        object_id               integer
+                                constraint t_tasks_object_fk
+                                references acs_objects,
+        title                   varchar(1000),
+        description             text,
+        mime_type               varchar(200) default 'text/plain',
+        comment                 text,
+        status_id               integer
+                                constraint t_tasks_status_fk
+                                references t_task_status,
+        priority                integer,
+        start_date              timestamptz,
         due_date                timestamptz,
-        priority                integer default 0
+        completed_date          timestamptz
 );
 
+
+
+
+
+
+CREATE FUNCTION inline_0()
+RETURNS integer
+AS 'declare
+    begin
+       PERFORM
+	    acs_object_type__create_type(
+		''tasks_task'',	-- object_type
+		''Task'',	-- pretty_name
+		''Tasks'',	-- pretty_plural
+		''acs_object'',	-- supertype
+		''t_tasks'',	-- table_name
+		''task_id'',	-- id_column
+		''tasks_task'',	-- package_name
+		''f'',		-- abstract_p
+		null,		-- type_extension_table
+		null		-- name_method
+	    );
+		
+       PERFORM
+	    acs_object_type__create_type(
+		''tasks_process'',	-- object_type
+		''Task Process'',	-- pretty_name
+		''Task Processes'',	-- pretty_plural
+		''acs_object'',		-- supertype
+		''t_processes'',	-- table_name
+		''process_id'',		-- id_column
+		''tasks_process'',	-- package_name
+		''f'',			-- abstract_p
+		null,			-- type_extension_table
+		null			-- name_method
+	    );
+		
+       PERFORM
+	    acs_object_type__create_type(
+		''tasks_process_instance'',	-- object_type
+		''Task Process Instance'',	-- pretty_name
+		''Task Process Instances'',	-- pretty_plural
+		''acs_object'',			-- supertype
+		''t_process_instances'',	-- table_name
+		''process_instance_id'',	-- id_column
+		''tasks_process_instance'',	-- package_name
+		''f'',				-- abstract_p
+		null,				-- type_extension_table
+		null				-- name_method
+	    );
+		
+       PERFORM
+	    acs_object_type__create_type(
+		''tasks_process_task'',	-- object_type
+		''Process Task'',	-- pretty_name
+		''Process Tasks'',	-- pretty_plural
+		''acs_object'',		-- supertype
+		''t_process_tasks'',	-- table_name
+		''task_id'',		-- id_column
+		''tasks_process_task'',	-- package_name
+		''f'',			-- abstract_p
+		null,			-- type_extension_table
+		null			-- name_method
+	    );
+		
+	    return 0;
+
+    end;' 
+LANGUAGE 'plpgsql';
+
+SELECT inline_0();
+
+DROP function inline_0();
+
+
+
 create or replace function tasks__relative_date (
         timestamptz             -- date_comparative
 ) returns varchar
@@ -112,3 +301,189 @@
 
         return v_user;
 end;' language 'plpgsql';
+
+
+-----------------------------
+
+select define_function_args('tasks_task__new','task_id,process_instance_id,process_task_id,party_id,object_id,title,description,mime_type,comment,status_id,priority,start_date,due_date,package_id,creation_user,creation_ip,context_id');
+
+create or replace function tasks_task__new (integer,integer,integer,integer,integer,varchar,text,varchar,text,integer,integer,timestamptz,timestamptz,integer,integer,varchar,integer)
+returns integer as '
+declare
+    p_task_id                 alias for $1;
+    p_process_instance_id     alias for $2;
+    p_process_task_id         alias for $3;
+    p_party_id                alias for $4;
+    p_object_id               alias for $5;
+    p_title                   alias for $6;
+    p_description             alias for $7;
+    p_mime_type               alias for $8;
+    p_comment                 alias for $9;
+    p_status_id               alias for $10;
+    p_priority                alias for $11;
+    p_start_date              alias for $12;
+    p_due_date                alias for $13;
+    p_package_id              alias for $14;
+    p_creation_user           alias for $15;
+    p_creation_ip             alias for $16;
+    p_context_id              alias for $17;
+    v_task_id                 integer;
+    v_start_date              timestamptz;
+begin
+    v_task_id:= acs_object__new(
+        p_task_id,
+        ''tasks_task'',
+        now(),
+        p_creation_user,
+        p_creation_ip,
+        coalesce(p_context_id, p_package_id),
+        ''t'',
+        p_title,
+        p_package_id
+    );
+
+    if p_start_date is null then
+      v_start_date := now();
+    else
+      v_start_date := p_start_date;
+    end if;
+
+    insert into t_tasks
+    (task_id, process_instance_id, process_task_id, party_id, object_id,
+     title, description, mime_type, comment, status_id, priority,
+     start_date, due_date)
+    values
+    (v_task_id, p_process_instance_id, p_process_task_id, p_party_id,
+     p_object_id, p_title, p_description, p_mime_type, p_comment,
+     p_status_id, p_priority, v_start_date, p_due_date);
+
+    return v_task_id;
+end;
+' language 'plpgsql';
+
+
+select define_function_args('tasks_process_task__new','task_id,process_id,open_action_id,closing_action_id,party_id,object_id,title,description,mime_type,comment,status_id,priority,start,due,package_id,creation_user,creation_ip,context_id');
+
+create or replace function tasks_process_task__new (integer,integer,integer,integer,integer,integer,varchar,text,varchar,text,integer,integer,numeric,numeric,integer,integer,varchar,integer)
+returns integer as '
+declare
+    p_task_id                 alias for $1;
+    p_process_id              alias for $2;
+    p_open_action_id          alias for $3;
+    p_closing_action_id       alias for $4;
+    p_party_id                alias for $5;
+    p_object_id               alias for $6;
+    p_title                   alias for $7;
+    p_description             alias for $8;
+    p_mime_type               alias for $9;
+    p_comment                 alias for $10;
+    p_status_id               alias for $11;
+    p_priority                alias for $12;
+    p_start                   alias for $13;
+    p_due                     alias for $14;
+    p_package_id              alias for $15;
+    p_creation_user           alias for $16;
+    p_creation_ip             alias for $17;
+    p_context_id              alias for $18;
+    v_task_id                 integer;
+begin
+    v_task_id:= acs_object__new(
+        p_task_id,
+        ''tasks_process_task'',
+        now(),
+        p_creation_user,
+        p_creation_ip,
+        coalesce(p_context_id, p_package_id),
+        ''t'',
+        p_title,
+        p_package_id
+    );
+
+    insert into t_process_tasks
+    (task_id, process_id, open_action_id, closing_action_id, party_id,
+     object_id, title, description, mime_type, comment, status_id,
+     priority, start, due)
+    values
+    (v_task_id, p_process_id, p_open_action_id, p_closing_action_id,
+     p_party_id, p_object_id, p_title, p_description, p_mime_type,
+     p_comment, p_status_id, p_priority, p_start, p_due);
+
+    return v_task_id;
+end;
+' language 'plpgsql';
+
+
+select define_function_args('tasks_process__new','process_id,title,description,mime_type,workflow_id,package_id,creation_user,creation_ip,context_id');
+
+create or replace function tasks_process__new (integer,varchar,text,varchar,integer,integer,integer,varchar,integer)
+returns integer as '
+declare
+    p_process_id              alias for $1;
+    p_title                   alias for $2;
+    p_description             alias for $3;
+    p_mime_type               alias for $4;
+    p_workflow_id             alias for $5;
+    p_package_id              alias for $6;
+    p_creation_user           alias for $7;
+    p_creation_ip             alias for $8;
+    p_context_id              alias for $9;
+    v_process_id              integer;
+begin
+    v_process_id:= acs_object__new(
+        p_process_id,
+        ''tasks_process'',
+        now(),
+        p_creation_user,
+        p_creation_ip,
+        coalesce(p_context_id, p_package_id),
+        ''t'',
+        p_title,
+        p_package_id
+    );
+
+    insert into t_processes
+    (process_id, title, description, mime_type, workflow_id)
+    values
+    (v_process_id, p_title, p_description, p_mime_type, p_workflow_id);
+
+    return v_process_id;
+end;
+' language 'plpgsql';
+
+
+select define_function_args('tasks_process_instance__new','process_instance_id,process_id,case_id,party_id,object_id,package_id,creation_user,creation_ip,context_id');
+
+create or replace function tasks_process_instance__new (integer,integer,integer,integer,integer,integer,integer,varchar,integer)
+returns integer as '
+declare
+    p_process_instance_id     alias for $1;
+    p_process_id              alias for $2;
+    p_case_id                 alias for $3;
+    p_party_id                alias for $4;
+    p_object_id               alias for $5;
+    p_package_id              alias for $6;
+    p_creation_user           alias for $7;
+    p_creation_ip             alias for $8;
+    p_context_id              alias for $9;
+    v_process_instance_id     integer;
+begin
+    v_process_instance_id:= acs_object__new(
+        p_process_instance_id,
+        ''tasks_process_instance'',
+        now(),
+        p_creation_user,
+        p_creation_ip,
+        coalesce(p_context_id, p_package_id),
+        ''t'',
+        ''process instance of process '' || p_process_id || '' for object '' || p_object_id,
+        p_package_id
+    );
+
+    insert into t_process_instances
+    (process_instance_id, process_id, case_id, party_id, object_id)
+    values
+    (v_process_instance_id, p_process_id, p_case_id, p_party_id, p_object_id);
+
+    return v_process_instance_id;
+end;
+' language 'plpgsql';
Index: openacs-4/packages/tasks/sql/postgresql/tasks-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/sql/postgresql/tasks-drop.sql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/tasks/sql/postgresql/tasks-drop.sql	25 Sep 2005 23:49:23 -0000	1.1
@@ -0,0 +1,7 @@
+drop table t_process_tasks;
+drop table t_tasks;
+drop table t_task_status;
+drop table t_process_instances;
+drop table t_processes;
+
+drop sequence t_task_status_seq;
Index: openacs-4/packages/tasks/tcl/tasks-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/tcl/tasks-callback-procs.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/tcl/tasks-callback-procs.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/tcl/tasks-callback-procs.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -5,11 +5,16 @@
     Callback procs for Tasks
     
     @author Matthew Geddert (openacs@geddert.com)
+    @author Timo Hentschel (timo@timohentschel.de)
     @creation-date 2005-06-15
     @arch-tag: 200d82ba-f8e7-4f19-9740-39117474766f
     @cvs-id $Id$
 }
 
+namespace eval tasks::workflow {}
+namespace eval tasks::workflow::impl {}
+namespace eval tasks::workflow::impl::action_side_effect {}
+
 ad_proc -public -callback contact::history -impl tasks {
     {-party_id:required}
     {-multirow:required}
@@ -57,3 +62,58 @@
 } {
     ::template::multirow append $multirow "Add Task" "/tasks/task" "Add a task to the selected contacts"
 }
+
+
+ad_proc -public tasks::workflow::impl::action_side_effect::do {
+    case_id
+    object_id
+    action_id
+    entry_id
+} {
+    create new tasks linked to this action
+} {
+    db_1row process_id {
+	select process_instance_id, process_id, party_id
+	from t_process_instances
+	where case_id = :case_id
+    }
+
+    set tasks [db_list_of_lists process_tasks {
+	select task_id, title, description,
+               mime_type, comment, status_id, priority,
+	       to_char((now()+ (start::varchar || ' days')::interval), 'YYYY-MM-DD') as start_date,
+	       to_char((now()+ (due::varchar || ' days')::interval), 'YYYY-MM-DD') as due_date
+	from t_process_tasks
+	where open_action_id = :action_id
+    }]
+
+    foreach task $tasks {
+	util_unlist $task process_task_id title description mime_type comment status_id priority start_date due_date
+
+	set new_task_id [tasks::task::new \
+			    -process_instance_id $process_instance_id \
+			    -process_task_id $process_task_id \
+			    -party_id $party_id \
+			    -object_id $object_id \
+			    -title $title \
+			    -description $description \
+			    -mime_type $mime_type \
+			    -comment $comment \
+			    -status_id $status_id \
+			    -priority $priority \
+			    -start_date $start_date \
+			    -due_date $due_date]
+    }
+}
+
+ad_proc -public tasks::workflow::impl::action_side_effect::object_type {} {
+    Get the object type for which this implementation is valid.
+} {
+    return "acs_object"
+}
+
+ad_proc -public tasks::workflow::impl::action_side_effect::pretty_name {} {
+    Get the pretty name of this implementation.
+} {
+    return "tasks"
+}
Index: openacs-4/packages/tasks/tcl/tasks-install-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/tcl/tasks-install-procs.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/tasks/tcl/tasks-install-procs.tcl	25 Sep 2005 23:49:23 -0000	1.1
@@ -0,0 +1,44 @@
+ad_library {
+
+    @author Timo Hentschel (timo@timohentschel.de)
+    @creation-date 2005-09-21
+    @arch-tag: 81868d37-99f5-48b1-8336-88e22c0e9001
+    @cvs-id $Id: 
+}
+
+namespace eval tasks::install {}
+
+ad_proc -public tasks::install::package_install {
+} {
+    Procedure to install certain information right after startup
+
+    @author Timo Hentschel (timo@timohentschel.de)
+    @creation-date 2005-09-21
+
+} {
+    set spec {
+        name "Tasks_Action_SideEffect"
+        aliases {
+            GetObjectType tasks::workflow::impl::action_side_effect::object_type
+            GetPrettyName tasks::workflow::impl::action_side_effect::pretty_name
+            DoSideEffect  tasks::workflow::impl::action_side_effect::do
+        }  
+    }
+
+    lappend spec contract_name [workflow::service_contract::action_side_effect]
+    lappend spec owner tasks
+
+    acs_sc::impl::new_from_spec -spec $spec
+}
+
+
+ad_proc -public tasks::install::after_upgrade {
+    {-from_version_name:required}
+    {-to_version_name:required}
+} {
+    apm_upgrade_logic \
+        -from_version_name $from_version_name \
+        -to_version_name $to_version_name \
+        -spec {
+	}
+}
Index: openacs-4/packages/tasks/tcl/tasks-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/tcl/tasks-procs.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/tcl/tasks-procs.tcl	27 Jul 2005 13:44:58 -0000	1.1
+++ openacs-4/packages/tasks/tcl/tasks-procs.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -9,6 +9,10 @@
 }
 
 namespace eval tasks {}
+namespace eval tasks::task {}
+namespace eval tasks::process {}
+namespace eval tasks::process::task {}
+namespace eval tasks::process::instance {}
 
 
 ad_proc -public tasks::project_id {
@@ -53,3 +57,169 @@
 }
 
 
+ad_proc -public tasks::task::new {
+    {-task_id ""}
+    {-process_instance_id ""}
+    {-process_task_id ""}
+    {-party_id ""}
+    {-object_id ""}
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+    {-comment ""}
+    {-status_id 1}
+    {-priority 0}
+    {-start_date ""}
+    {-due_date ""}
+    {-package_id ""}
+} {
+    if { [empty_string_p $package_id] } {
+        set package_id [ad_conn package_id]
+    }
+    set extra_vars [ns_set create]
+    set context_id $package_id
+
+    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {task_id process_instance_id process_task_id party_id object_id title description mime_type comment status_id priority start_date due_date package_id context_id}
+
+    set task_id [package_instantiate_object -extra_vars $extra_vars tasks_task]
+
+    return $task_id
+}
+
+ad_proc -public tasks::task::edit {
+    -task_id:required
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+    {-comment ""}
+    {-status_id 1}
+    {-priority 0}
+    {-due_date ""}
+} {
+    set modifying_user [ad_conn user_id]
+    set modifying_ip [ad_conn peeraddr]
+
+    db_dml update_task {}
+    db_dml update_object {}
+}
+
+ad_proc -public tasks::task::complete {
+    -task_id:required
+} {
+    db_transaction {
+	db_dml set_status_done {}
+
+	if {[db_0or1row closing_action {}]} {
+	    workflow::case::action::execute -case_id $case_id -action_id $closing_action_id -no_perm_check -no_notification
+	}
+    }
+}
+
+
+ad_proc -public tasks::process::task::new {
+    {-task_id ""}
+    -process_id:required
+    -open_action_id:required
+    -closing_action_id:required
+    {-party_id ""}
+    {-object_id ""}
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+    {-comment ""}
+    {-status_id 1}
+    {-priority 0}
+    {-start 0}
+    {-due 0}
+    {-package_id ""}
+} {
+    if { [empty_string_p $package_id] } {
+        set package_id [ad_conn package_id]
+    }
+    set extra_vars [ns_set create]
+    set context_id $package_id
+
+    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {task_id process_id open_action_id closing_action_id party_id object_id title description mime_type comment status_id priority start due package_id context_id}
+
+    set task_id [package_instantiate_object -extra_vars $extra_vars tasks_process_task]
+
+    return $task_id
+}
+
+ad_proc -public tasks::process::task::edit {
+    -task_id:required
+    -open_action_id:required
+    {-party_id ""}
+    {-object_id ""}
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+    {-comment ""}
+    {-status_id 1}
+    {-priority 0}
+    {-start 0}
+    {-due 0}
+} {
+    set modifying_user [ad_conn user_id]
+    set modifying_ip [ad_conn peeraddr]
+
+    db_dml update_process_task {}
+    db_dml update_object {}
+}
+
+
+ad_proc -public tasks::process::new {
+    {-process_id ""}
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+    {-workflow_id ""}
+    {-package_id ""}
+} {
+    if { [empty_string_p $package_id] } {
+        set package_id [ad_conn package_id]
+    }
+    set extra_vars [ns_set create]
+    set context_id $package_id
+
+    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {process_id title description mime_type workflow_id package_id context_id}
+
+    set task_id [package_instantiate_object -extra_vars $extra_vars tasks_process]
+
+    return $task_id
+}
+
+ad_proc -public tasks::process::edit {
+    -process_id:required
+    -title:required
+    {-description ""}
+    {-mime_type "text/plain"}
+} {
+    set modifying_user [ad_conn user_id]
+    set modifying_ip [ad_conn peeraddr]
+
+    db_dml update_process {}
+    db_dml update_object {}
+}
+
+
+ad_proc -public tasks::process::instance::new {
+    {-process_instance_id ""}
+    -process_id:required
+    -case_id:required
+    {-party_id ""}
+    {-object_id ""}
+    {-package_id ""}
+} {
+    if { [empty_string_p $package_id] } {
+        set package_id [ad_conn package_id]
+    }
+    set extra_vars [ns_set create]
+    set context_id $package_id
+
+    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {process_instance_id process_id case_id party_id object_id package_id context_id}
+
+    set task_id [package_instantiate_object -extra_vars $extra_vars tasks_process_instance]
+
+    return $task_id
+}
Index: openacs-4/packages/tasks/tcl/tasks-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/tcl/tasks-procs.xql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/tasks/tcl/tasks-procs.xql	25 Sep 2005 23:49:23 -0000	1.1
@@ -0,0 +1,111 @@
+<?xml version="1.0"?>
+<queryset>
+
+   <fullquery name="tasks::task::complete.set_status_done">
+         <querytext>
+
+	    update t_tasks
+	    set status_id = 2,
+                completed_date = now()
+	    where task_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::task::complete.closing_action">
+         <querytext>
+
+	    select pt.closing_action_id, pi.case_id
+	    from t_process_tasks pt, t_tasks t, t_process_instances pi
+	    where pt.task_id = t.process_task_id
+	    and pi.process_instance_id = t.process_instance_id
+	    and t.task_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::task::edit.update_task">
+         <querytext>
+
+	update t_tasks
+	set title = :title,
+	    description = :description,
+            mime_type = :mime_type,
+            comment = :comment,
+            status_id = :status_id,
+            priority = :priority,
+            due_date = :due_date
+	where task_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::task::edit.update_object">
+         <querytext>
+
+	update acs_objects
+	set modifying_user = :modifying_user,
+	    modifying_ip = :modifying_ip,
+            last_modified = now()
+	where object_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::process::task::edit.update_process_task">
+         <querytext>
+
+	update t_process_tasks
+	set open_action_id = :open_action_id,
+	    party_id = :party_id,
+	    object_id = :object_id,
+	    title = :title,
+	    description = :description,
+            mime_type = :mime_type,
+            comment = :comment,
+            status_id = :status_id,
+            priority = :priority,
+	    start = :start,
+            due = :due
+	where task_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::process::task::edit.update_object">
+         <querytext>
+
+	update acs_objects
+	set modifying_user = :modifying_user,
+	    modifying_ip = :modifying_ip,
+            last_modified = now()
+	where object_id = :task_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::process::edit.update_process">
+         <querytext>
+
+	update t_processes
+	set title = :title,
+	    description = :description,
+	    mime_type = :mime_type
+	where process_id = :process_id
+
+         </querytext>
+   </fullquery>
+
+   <fullquery name="tasks::process::edit.update_object">
+         <querytext>
+
+	update acs_objects
+	set modifying_user = :modifying_user,
+	    modifying_ip = :modifying_ip,
+            last_modified = now()
+	where object_id = :process_id
+
+         </querytext>
+   </fullquery>
+
+</queryset>
Index: openacs-4/packages/tasks/www/contact.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/contact.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/contact.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/contact.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -23,7 +23,6 @@
     {searchterm ""}
     {mine_p "t"}
     {status_id "1"}
-    {role_id "2"}
     {process_instance:integer,optional}
 } -properties {
     task_term:onevalue
@@ -43,25 +42,17 @@
 if { ![exists_and_not_null status_id] } {
     set status_id "1"
 }
-set done_url [export_vars -url -base "./contact" {orderby {status_id 2} party_id}]
-set not_done_url [export_vars -url -base "./contact" {orderby {status_id 1} party_id}]
-set return_url [export_vars -base "/tasks/contact" -url {orderby status_id party_id}]
+set done_url [export_vars -url -base "contact" {orderby {status_id 2} party_id}]
+set not_done_url [export_vars -url -base "contact" {orderby {status_id 1} party_id}]
+set return_url [export_vars -base [ad_conn url] -url {orderby status_id party_id}]
 set add_url [export_vars -base task {return_url orderby status_id party_id}]
 set add_event_url [export_vars -base "/calendar/cal-item-new" -url {return_url party_id}]
 
-set admin_p [permission::permission_p -object_id [ad_conn package_id] -privilege admin]
-set task_term [ad_conn instance_name]
+set package_id [ad_conn package_id]
+set admin_p [permission::permission_p -object_id $package_id -privilege admin]
 set context {}
 
-#    -bulk_actions {
-#	"Mark Completed" "mark-completed" "Mark Completed"
-#	"Delete" "delete" "Delete"
-#    } \
-#    -bulk_action_export_vars {
-#        {return_url} {orderby} {party_id}
-#    } \
 
-
 template::list::create \
     -name tasks \
     -multirow tasks \
@@ -93,24 +84,28 @@
 		</if>
 	    }
 	}
-        process {
+        process_title {
 	    label "[_ tasks.Process]"
 	    display_template {
-		<if @tasks.done_p@><span class="done">@tasks.process@</span></if>
+		<if @tasks.done_p@><span class="done">@tasks.process_title@</span></if>
                 <else>
-		  <if @tasks.process@ not nil>
-		<a href="@tasks.process_minus_url@" style="text-decoration: none; font-weight: bold;">&laquo;</a>&nbsp;@tasks.process@&nbsp;<a href="@tasks.process_plus_url@" style="text-decoration: none; font-weight: bold;">&raquo;</a>
-                  </if>
+		  <if @tasks.process_title@ not nil>@tasks.process_title@</if>
 		</else>
 	    }
 	}
+        contact {
+	    label "[_ tasks.Contact]"
+	    display_template {
+		<if @tasks.object_id@ not nil><a href="@tasks.contact_url@">@tasks.contact@</a></if>
+	    }
+	}
         date {
 	    label "[_ tasks.Date]"
 	    display_template {
 		<if @tasks.done_p@><span class="done">@tasks.completed_date;noquote@</span></if>
                 <else>
-		  <if @tasks.end_date@>
-		<a href="@tasks.task_minus_url@" style="text-decoration: none; font-weight: bold;">&laquo;</a>&nbsp;<if @tasks.end_date_passed_p@><span style="color: red;"></if>@tasks.end_date;noquote@<if @tasks.end_date_passed_p@></span></if>&nbsp;<a href="@tasks.task_plus_url@" style="text-decoration: none; font-weight: bold;">&raquo;</a>
+		  <if @tasks.due_date@>
+		<a href="@tasks.task_minus_url@" style="text-decoration: none; font-weight: bold;">&laquo;</a>&nbsp;<if @tasks.due_date_passed_p@><span style="color: red;"></if>@tasks.due_date;noquote@<if @tasks.due_date_passed_p@></span></if>&nbsp;<a href="@tasks.task_plus_url@" style="text-decoration: none; font-weight: bold;">&raquo;</a>
                   </if>
                 </else>
 	    }
@@ -128,81 +123,80 @@
     -filters {
 	party_id {}
     } -orderby {
-        default_value $orderby
+        default_value "priority,desc"
         date {
             label "[_ tasks.Due]"
-            orderby_desc "CASE WHEN pt.status = 1 THEN ptr.end_date ELSE tasks__completion_date(ci.item_id) END desc, ptr.priority, upper(cr.title)"
-            orderby_asc "CASE WHEN pt.status = 1 THEN ptr.end_date ELSE tasks__completion_date(ci.item_id) END asc, ptr.priority, upper(cr.title)"
+            orderby_desc "CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END desc, t.priority, lower(t.title)"
+            orderby_asc "CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END asc, t.priority, lower(t.title)"
             default_direction desc
         }
         priority {
             label "[_ tasks.Priority]"
-            orderby_desc "pt.status, ptr.priority desc, CASE WHEN pt.status = 1 THEN ptr.end_date ELSE tasks__completion_date(ci.item_id) END desc, upper(cr.title)"
-            orderby_asc "pt.status, ptr.priority asc, CASE WHEN pt.status = 1 THEN ptr.end_date ELSE tasks__completion_date(ci.item_id) END asc, upper(cr.title)"
+            orderby_desc "t.status_id, t.priority desc, CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END desc, lower(t.title)"
+            orderby_asc "t.status_id, t.priority asc, CASE WHEN t.status_id = 1 THEN t.due_date ELSE t.completed_date END asc, lower(t.title)"
             default_direction desc
         }
         title {
             label "[_ tasks.Task]"
-            orderby_desc "upper(cr.title) desc, ptr.priority desc, ptr.end_date asc"
-            orderby_asc "upper(cr.title) asc, ptr.priority desc, ptr.end_date asc"
+            orderby_desc "lower(t.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(t.title) asc, t.priority desc, t.due_date asc"
             default_direction asc
         }
-        process {
+        process_title {
 	    label "[_ tasks.Process]"
-            orderby_desc "upper(ppi.name) desc, ptr.priority desc, ptr.end_date asc"
-            orderby_asc "upper(ppi.name) asc, ptr.priority desc, ptr.end_date asc"
+            orderby_desc "lower(p.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(p.title) asc, t.priority desc, t.due_date asc"
 	    default_direction asc
 	}
+	contact {
+	    label "[_ tasks.Contact]"
+            orderby_desc "lower(contact__name(t.object_id)) desc, t.due_date asc, t.priority, lower(t.title)"
+            orderby_asc "lower(contact__name(t.object_id)) asc, t.due_date asc, t.priority, lower(t.title)"
+	    default_direction asc
+	}
 	creation_user {
 	    label "[_ tasks.Created_By]"
-            orderby_desc "upper(contact__name(ao.creation_user)) desc, ptr.end_date asc, ptr.priority, upper(cr.title)"
-            orderby_asc "upper(contact__name(ao.creation_user)) asc, ptr.end_date asc, ptr.priority, upper(cr.title)"
+            orderby_desc "lower(contact__name(ao.creation_user)) desc, t.due_date asc, t.priority, lower(t.title)"
+            orderby_asc "lower(contact__name(ao.creation_user)) asc, t.due_date asc, t.priority, lower(t.title)"
 	    default_direction asc
 	}
     }
 
 
-
-set project_id [tasks::project_id]
-db_multirow -extend {creation_user_url complete_url done_p process_plus_url process_minus_url task_plus_url task_minus_url description_html task_url} -unclobber tasks get_tasks "
-    select pt.task_id,
-           tasks__relative_date(ptr.end_date) as  end_date,
-           tasks__relative_date(tasks__completion_date(ci.item_id)) as completed_date,
-           cr.title,
-           cr.description,
-           ptr.priority,
-           :party_id as party_id,
-           ppi.name as process,
-           ppi.process_id as process_id,
-           ao.creation_user,
+db_multirow -extend {creation_user_url contact_url complete_url done_p process_plus_url process_minus_url task_plus_url task_minus_url description_html task_url} -unclobber tasks get_tasks "
+    select t.task_id, t.title, t.description, t.mime_type, t.priority,
+           t.party_id, p.title as process_title, p.process_id,
+           tasks__relative_date(t.due_date) as due_date,
+           tasks__relative_date(t.completed_date) as completed_date,
+           ao.creation_user, t.status_id, t.process_instance_id,
            contact__name(ao.creation_user) as creation_name,
-           pt.status as status_id,
-           pt.process_instance,
-           CASE WHEN ptr.end_date < now() THEN 't' ELSE 'f' END as end_date_passed_p
-      from cr_items ci,
-           pm_tasks_revisions ptr,
-           pm_tasks pt left join pm_process_instance ppi on (pt.process_instance = ppi.instance_id ),
-           cr_revisions cr,
-           acs_objects ao
-     where ci.parent_id = :project_id
-       and ci.item_id = pt.task_id
-       and ci.latest_revision = ptr.task_revision_id
-       and ci.live_revision = ptr.task_revision_id
-       and ptr.task_revision_id = cr.revision_id
-       and cr.revision_id = ao.object_id
-       and pt.deleted_p = 'f'
-       and task_id in ( select task_id from pm_task_assignment where party_id = :party_id and role_id = '1' )
+           CASE WHEN t.due_date < now() THEN 't' ELSE 'f' END as due_date_passed_p,
+           s.title as status, t.object_id,
+           contact__name(t.object_id) as contact
+      from t_task_status s, acs_objects ao, t_tasks t
+      left outer join t_process_instances pi
+      on (pi.process_instance_id = t.process_instance_id)
+      left outer join t_processes p
+      on (p.process_id = pi.process_id)
+      where s.status_id = t.status_id
+      and ao.object_id = t.task_id
+      and ao.package_id = :package_id
+      and t.party_id = :party_id
+      and t.start_date < now()
      [template::list::orderby_clause -orderby -name tasks]
 " {
     set creation_user_url [contact::url -party_id $creation_user]
+    if {![empty_string_p $object_id]} {
+	set contact_url [contact::url -party_id $object_id]
+    }
     regsub -all "/tasks/" $creation_user_url "/contacts/" creation_user_url
     set complete_url [export_vars -base "mark-completed" -url {task_id orderby party_id return_url}]
     if { $status_id == "2" } {
 	set done_p 1
     } else {
 	set done_p 0
     }
-    set task_url [export_vars -base task -url {party_id orderby status task_id}]
+    set task_url [export_vars -base task -url {party_id orderby status_id task_id}]
     set task_plus_url  [export_vars -base task-interval -url {{action plus}  {days 7} party_id task_id status_id orderby return_url}]
     set task_minus_url [export_vars -base task-interval -url {{action minus} {days 7} party_id task_id status_id orderby return_url}]
     set process_plus_url  [export_vars -base process-interval -url {{action plus}  {days 7} party_id process_instance status_id orderby return_url}]
@@ -211,7 +205,7 @@
     regsub -all "\r|\n" $description {LiNeBrEaK} description
 
     set description_html [ad_html_text_convert \
-			      -from "text/plain" \
+			      -from $mime_type \
 			      -to "text/html" \
 			      -truncate_len "400" \
 			      -more "<a href=\"${task_url}\">[_ tasks.more]</a>" \
@@ -222,7 +216,7 @@
 # 167 is the actual paragraph standard internationally but 182 is more common in the US
     regsub -all {LiNeBrEaK} $description_html {\&nbsp;\&nbsp;\&#182;\&nbsp;} description_html
 
-    regsub -all " " $end_date {\&nbsp;} end_date
+    regsub -all " " $due_date {\&nbsp;} due_date
     regsub -all " " $completed_date {\&nbsp;} completed_date
 }
 
Index: openacs-4/packages/tasks/www/delete.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/delete.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/tasks/www/delete.tcl	27 Jul 2005 14:29:51 -0000	1.2
+++ openacs-4/packages/tasks/www/delete.tcl	25 Sep 2005 23:49:23 -0000	1.3
@@ -20,10 +20,11 @@
 	ad_returnredirect ./
 	return
     }
-    set task_pretty [ad_decode $num_entries 1 "[_ tasks.a_Task]" "[_ tasks.Tasks]"]
+    set task_pretty [ad_decode $num_entries 1 "[_ tasks.Task]" "[_ tasks.Tasks]"]
     set title "[_ tasks.Delete_task_pretty]"
     set context [list $title]
-    set task2_pretty [ad_decode $num_entries 1 "[_ tasks.this_task]" "[_ tasks.lt_these_num_entries_tas]"]
+    set task2_pretty [ad_decode $num_entries 1 "[_ tasks.this_task]" "[_ tasks.these_tasks]"]
+    set context [list $title]
     set question "[_ tasks.lt_Are_you_sure_you_want_1]"
     set yes_url "delete?[export_vars { task_id:multiple { confirm_p 1 } return_url}]"                                                    
     set no_url "${return_url}"
@@ -34,17 +35,15 @@
 set task_titles [list]
 foreach task_id $task_id {
     lappend task_titles [db_string get_task_title {
-	    select cr.title as task
-              from pm_tasks_revisions ptr,
-                   cr_revisions cr,
-                   cr_items ci
-             where ci.item_id = :task_id
-               and ci.latest_revision = ptr.task_revision_id
-               and ci.live_revision = ptr.task_revision_id
-               and ptr.task_revision_id = cr.revision_id
-            
+	select t.title
+	from t_tasks
+	where t.task_id = :task_id
     }]
-    db_dml mark_delete "update pm_tasks set deleted_p = 't' where task_id = :task_id"
+    db_dml mark_delete {
+	update t_tasks
+	set status_id = null
+	where task_id = :task_id
+    }
 }
 
 if { $num_entries > 1 } {
@@ -61,12 +60,9 @@
     }
     util_user_message -html -message "[_ tasks.lt_The_tasks_task_list_w]"
 } else {
+    set task_title [lindex $task_titles 0]
     util_user_message -html -message "[_ tasks.lt_The_task_lindex_task_]"
 }
 
 ad_returnredirect $return_url
 ad_script_abort
-
-
-
-
Index: openacs-4/packages/tasks/www/index-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/index-postgresql.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/index-postgresql.xql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/index-postgresql.xql	25 Sep 2005 23:49:23 -0000	1.2
@@ -2,55 +2,60 @@
 <queryset>
 <rdbms><type>postgresql</type><version>7.2</version></rdbms>
 
-<fullquery name="tasks">
+<fullquery name="tasks_select">
     <querytext>
-        SELECT
-        ts.task_id as task_item_id,
-        ts.task_number,
-        t.task_revision_id,
-        t.title,
-        t.description,
-        t.parent_id as project_item_id,
-        proj_rev.logger_project,
-        proj_rev.title as project_name,
-        to_char(t.earliest_start,'J') as earliest_start_j,
-        to_char(current_timestamp,'J') as today_j,
-        to_char(t.latest_start,'J') as latest_start_j,
-        to_char(t.latest_start,'YYYY-MM-DD HH24:MI') as latest_start,
-        to_char(t.latest_finish,'YYYY-MM-DD HH24:MI') as latest_finish,
-        t.percent_complete,
-        t.estimated_hours_work,
-        t.estimated_hours_work_min,
-        t.estimated_hours_work_max,
-        case when t.actual_hours_worked is null then 0
-                else t.actual_hours_worked end as actual_hours_worked,
-        to_char(t.earliest_start,'YYYY-MM-DD HH24:MI') as earliest_start,
-        to_char(t.earliest_finish,'YYYY-MM-DD HH24:MI') as earliest_finish,
-        to_char(t.latest_start,'YYYY-MM-DD HH24:MI') as latest_start,
-        to_char(t.latest_finish,'YYYY-MM-DD HH24:MI') as latest_finish,
-        p.first_names || ' ' || p.last_name as full_name,
-        r.one_line as role
-        FROM
-        pm_tasks_active ts, 
-        cr_items i,
-        pm_tasks_revisionsx t 
-          LEFT JOIN pm_task_assignment ta
-          ON t.item_id = ta.task_id
-            LEFT JOIN persons p 
-            ON ta.party_id = p.person_id
-            LEFT JOIN pm_roles r
-            ON ta.role_id = r.role_id,
-        cr_items proj,
-        pm_projectsx proj_rev
-        WHERE
-        ts.task_id  = t.item_id and
-        i.item_id   = t.item_id and
-        t.task_revision_id = i.live_revision and 
-        t.parent_id = proj.item_id and
-        proj.live_revision = proj_rev.revision_id
-        [template::list::filter_where_clauses -and -name tasks]
+        select t.task_id, t.title, t.party_id, t.priority, s.title as status,
+               tasks__relative_date(t.due_date) as due_date,
+               CASE WHEN t.due_date < now() THEN 't'::boolean ELSE 'f'::boolean END as overdue_p,
+               to_char(t.due_date,'YYYY-MM-DD HH24:MI') as due_date,
+               contact__name(t.party_id, :name_order) as contact_name,
+               p.title as process_title, p.process_id
+        from t_task_status s, acs_objects ot, t_tasks t
+        left outer join t_process_instances pi
+        on (pi.process_instance_id = t.process_instance_id)
+        left outer join t_processes p
+        on (p.process_id = pi.process_id)
+        where s.status_id = t.status_id
+        and ot.object_id = t.task_id
+        and ot.package_id = :package_id
+        and t.start_date > now()
+        and t.due_date < ( now() + '$tasks_interval days'::interval )
+        [template::list::page_where_clause -and -name tasks -key t.task_id]
         [template::list::orderby_clause -orderby -name tasks]
     </querytext>
 </fullquery>
 
+<fullquery name="tasks_pagination">
+    <querytext>
+        select t.task_id
+        from t_task_status s, acs_objects ot, t_tasks t
+        left outer join t_process_instances pi
+        on (pi.process_instance_id = t.process_instance_id)
+        left outer join t_processes p
+        on (p.process_id = pi.process_id)
+        where s.status_id = t.status_id
+        and ot.object_id = t.task_id
+        and ot.package_id = :package_id
+        and t.start_date > now()
+        and t.due_date < ( now() + '$tasks_interval days'::interval )
+        [template::list::orderby_clause -orderby -name tasks]
+    </querytext>
+</fullquery>
+
+<fullquery name="tasks_count">
+    <querytext>
+        select count(*)
+        from t_task_status s, acs_objects ot, t_tasks t
+        left outer join t_process_instances pi
+        on (pi.process_instance_id = t.process_instance_id)
+        left outer join t_processes p
+        on (p.process_id = pi.process_id)
+        where s.status_id = t.status_id
+        and ot.object_id = t.task_id
+        and ot.package_id = :package_id
+        and t.start_date > now()
+        and t.due_date < ( now() + '$tasks_interval days'::interval )
+    </querytext>
+</fullquery>
+
 </queryset>
Index: openacs-4/packages/tasks/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/index.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/index.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/index.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -5,7 +5,7 @@
     @creation-date 2004-07-28
     @cvs-id $Id$
 } {
-    {orderby "end_date,asc"}
+    {orderby "due_date,asc"}
     {format "normal"}
     {search_id:integer ""}
     {query ""}
@@ -16,12 +16,14 @@
 }
 
 
-set title "Tasks"
+set title "[_ tasks.Tasks]"
 set context {}
 set project_id [tasks::project_id]
 set user_id [ad_conn user_id]
+set package_id [ad_conn package_id]
+set url [ad_conn url]
 
-set return_url [export_vars -base "/tasks/" -url {orderby format search_id query page page_size tasks_interval {page_flush_p t}}]
+set return_url [export_vars -base $url -url {orderby format search_id query page page_size tasks_interval {page_flush_p t}}]
 
 
 if { $orderby == "contact_name,asc" } {
@@ -33,8 +35,6 @@
 }
 
 
-
-
 set first_p 1
 foreach page_s [list 25 50 100 500] {
     if { [string is false $first_p] } {
@@ -48,8 +48,7 @@
     set first_p 0
 }
 
-set admin_p [permission::permission_p -object_id [ad_conn package_id] -privilege admin]
-set task_term [ad_conn instance_name]
+set admin_p [permission::permission_p -object_id $package_id -privilege admin]
 set context {}
 
 template::list::create \
@@ -61,41 +60,41 @@
     -page_query_name tasks_pagination \
     -elements {
         priority {
-	    label "Priority"
+	    label "[_ tasks.Priority]"
 	}
         contact_name {
-	    label "Contact"
+	    label "[_ tasks.Contact]"
 	    link_url_eval $contact_url
 	} 
 	title {
-	    label "Task"
+	    label "[_ tasks.Task]"
             display_template {
-		<a href="/tasks/task?party_id=@tasks.party_id@&task_id=@tasks.task_id@&orderby=${orderby}" title="@tasks.title@">@tasks.title@</a>
+		<a href="${url}task?party_id=@tasks.party_id@&task_id=@tasks.task_id@&orderby=${orderby}" title="@tasks.title@">@tasks.title@</a>
 	    }
 	}
-        process {
-	    label "Process"
+        process_title {
+	    label "[_ tasks.Process]"
 	}
-        end_date {
-	    label "Due"
+        due_date {
+	    label "[_ tasks.Due]"
             display_template {
 		<if @tasks.overdue_p@>
-		<span class="overdue">@tasks.end_date@</span>
+		<span class="overdue">@tasks.due_date@</span>
 		</if>
 		<else>
-		@tasks.end_date@
+		@tasks.due_date@
 		</else>
 	    }
 	}
     } \
     -bulk_actions [list \
-		       "Mark Completed" "mark-completed" "Mark Completed" \
-		       "Delete" "delete" "Delete" \
+		       "[_ tasks.Mark_Completed]" "mark-completed" "[_ tasks.Mark_Completed]" \
+		       "[_ tasks.Delete]" "delete" "[_ tasks.Delete]" \
 		       "[_ contacts.Mail_Merge]" "mail-merge" "[_ contacts.lt_E-mail_or_Mail_the_se]" \
 		      ]\
     -bulk_action_export_vars {
         {return_url}
-    } \
+    } -pass_properties { } \
     -sub_class {
         narrow
     } \
@@ -108,34 +107,34 @@
     } \
     -orderby {
         default_value $orderby
-        end_date {
+        due_date {
             label "Due"
-            orderby_desc "ptr.end_date desc, ptr.priority, upper(cr.title)"
-            orderby_asc "ptr.end_date asc, ptr.priority, upper(cr.title)"
+            orderby_desc "t.due_date desc, t.priority, lower(t.title)"
+            orderby_asc "t.due_date asc, t.priority, lower(t.title)"
             default_direction asc
         }
         priority {
             label "Priority"
-            orderby_desc "ptr.priority desc, ptr.end_date asc, upper(cr.title)"
-            orderby_asc "ptr.priority asc, ptr.end_date asc, upper(cr.title)"
+            orderby_desc "t.priority desc, t.due_date asc, lower(t.title)"
+            orderby_asc "t.priority asc, t.due_date asc, lower(t.title)"
             default_direction desc
         }
         title {
             label "Task"
-            orderby_desc "upper(cr.title) desc, ptr.priority desc, ptr.end_date asc"
-            orderby_asc "upper(cr.title) asc, ptr.priority desc, ptr.end_date asc"
+            orderby_desc "lower(t.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(t.title) asc, t.priority desc, t.due_date asc"
             default_direction asc
         }
 	contact_name {
 	    label "Contact"
-	    orderby_asc "lower(contact__name(assigned_tasks.party_id,'1'::boolean)) asc"
-	    orderby_desc "lower(contact__name(assigned_tasks.party_id,'0'::boolean)) asc"
+	    orderby_asc "lower(contact__name(t.party_id,'1'::boolean)) asc"
+	    orderby_desc "lower(contact__name(t.party_id,'0'::boolean)) asc"
 	    default_direction asc
 	}
-        process {
+        process_title {
 	    label "Process"
-            orderby_desc "upper(ppi.name) desc, ptr.priority desc, ptr.end_date asc"
-            orderby_asc "upper(ppi.name) asc, ptr.priority desc, ptr.end_date asc"
+            orderby_desc "lower(p.title) desc, t.priority desc, t.due_date asc"
+            orderby_asc "lower(p.title) asc, t.priority desc, t.due_date asc"
 	    default_direction asc
 	}
     }
@@ -148,7 +147,6 @@
 set tasks_count [db_string tasks_count {} -default {0}]
 
 
-set package_id "11426862"
 if { [exists_and_not_null search_id] } {
     contact::search::log -search_id $search_id
 }
@@ -164,7 +162,7 @@
     {search_id:integer(select),optional {label ""} {options $search_options} {html {onChange "javascript:acs_FormRefresh('search')"}}}
     {query:text(text),optional {label ""} {html {size 20 maxlength 255}}}
     {save:text(submit) {label {[_ contacts.Search]}} {value "go"}}
-    {tasks_interval:integer(text),optional {label "&nbsp;&nbsp;<span style=\"font-size: smaller;\">View next</span>"} {after_html "<span style=\"font-size: smaller;\">days &nbsp;&nbsp;&nbsp;Results:</span>&nbsp;$tasks_count"} {html {size 2 maxlength 3 onChange "javascript:acs_FormRefresh('search')"}}}
+    {tasks_interval:integer(text),optional {label "&nbsp;&nbsp;<span style=\"font-size: smaller;\">[_ tasks.View_next]</span>"} {after_html "<span style=\"font-size: smaller;\">days &nbsp;&nbsp;&nbsp;Results:</span>&nbsp;$tasks_count"} {html {size 2 maxlength 3 onChange "javascript:acs_FormRefresh('search')"}}}
 }
 
 if { [parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] } {
Index: openacs-4/packages/tasks/www/index.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/index.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/index.xql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/index.xql	25 Sep 2005 23:49:23 -0000	1.2
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <queryset>
 
-<fullquery name="tasks_pagination">
+<fullquery name="tasks_pagination_old">
       <querytext>
     select pt.task_id
       from cr_items ci,
@@ -34,7 +34,7 @@
       </querytext>
 </fullquery>
 
-<fullquery name="tasks_count">
+<fullquery name="tasks_count_old">
       <querytext>
     select count(*)
       from cr_items ci,
@@ -66,7 +66,7 @@
       </querytext>
 </fullquery>
 
-<fullquery name="tasks_select">      
+<fullquery name="tasks_select_old">      
       <querytext>
     select pt.task_id,
            tasks__relative_date(ptr.end_date) as end_date,
Index: openacs-4/packages/tasks/www/mark-completed.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/mark-completed.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/mark-completed.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/mark-completed.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -11,7 +11,6 @@
     {orderby ""}
     {return_url:notnull}
 }
-#    {party_id:integer,notnull}
 
 set num_entries [llength $task_id]
 
@@ -21,31 +20,30 @@
 	ad_returnredirect ./
 	return
     }
-    set title "Mark [ad_decode $num_entries 1 "Task" "Tasks"] as Done"
+    set pretty_task [ad_decode $num_entries 1 "[_ tasks.Task]" "[_ tasks.Tasks]"]
+    set title "[_ tasks.Mark_Done]"
     set context [list $title]
-    set question "Are you sure you want to mark [ad_decode $num_entries 1 "this task" "these $num_entries tasks"] as done?"
-    set yes_url "mark-done?[export_vars { task_id:multiple { confirm_p 1 } status_id orderby party_id}]"                                                    
+    set pretty_entries [ad_decode $num_entries 1 "[_ tasks.this_task]" "[_ tasks.these_tasks]"]
+    set question "[_ tasks.completed_sure]"
+    set yes_url "mark-completed?[export_vars { task_id:multiple { confirm_p 1 } status_id orderby party_id}]"                                                    
     set no_url "./?[export_vars { status_id orderby party_id}]"
     return
 }
 
 set user_id [ad_conn user_id]
 
-set task_titles [list]
-foreach task_id $task_id {
-    set task_title [db_string get_task_title {
-	    select cr.title as task
-              from pm_tasks_revisions ptr,
-                   cr_revisions cr,
-                   cr_items ci
-             where ci.item_id = :task_id
-               and ci.latest_revision = ptr.task_revision_id
-               and ci.live_revision = ptr.task_revision_id
-               and ptr.task_revision_id = cr.revision_id
-            
-    }]
-    lappend task_titles "<a href=\"[export_vars -base "task" -url {task_id status_id orderby}]\">${task_title}</a>"
-    pm::task::update_percent -task_item_id $task_id -percent_complete "100"
+db_transaction {
+    set task_titles [list]
+    foreach task_id $task_id {
+	set task_title [db_string get_task_title {
+	    select t.title
+	    from t_tasks t
+	    where t.task_id = :task_id
+	}]
+	lappend task_titles "<a href=\"[export_vars -base "task" -url {task_id status_id orderby}]\">${task_title}</a>"
+
+	tasks::task::complete -task_id $task_id
+    }
 }
 
 
@@ -61,15 +59,11 @@
 	append task_list "\"${task_title}\""
 	incr num
     }
-    util_user_message -html -message "The tasks ${task_list} were marked done"
+    util_user_message -html -message "[_ tasks.tasks_completed]"
 } else {
-    util_user_message -html -message "The task \"[lindex $task_titles 0]\" was marked done"
+    set task_title [lindex $task_titles 0]
+    util_user_message -html -message "[_ tasks.task_completed]"
 }
-#util_user_message -message "[ad_decode $num_entries 1 "One task" "$num_entries tasks"] marked done."
 
 ad_returnredirect $return_url
 ad_script_abort
-
-
-
-
Index: openacs-4/packages/tasks/www/process-add-edit-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process-add-edit-postgresql.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-add-edit-postgresql.xql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/process-add-edit-postgresql.xql	25 Sep 2005 23:49:23 -0000	1.2
@@ -1,47 +1,10 @@
 <?xml version="1.0"?>
 <queryset>
-  <fullquery name="get_today">
-    <querytext>
-        select current_timestamp from dual;
-    </querytext>
-  </fullquery>
 
-  <fullquery name="new_process">
-    <querytext>
-        insert into pm_process
-        (process_id,
-         one_line,
-         description,
-         party_id,
-         creation_date)
-        values
-        (:process_id,
-         :one_line,
-         :description,
-         :party_id,
-         :creation_date)
-    </querytext>
-  </fullquery>
-
-  <fullquery name="edit_process">
-    <querytext>
-        update pm_process
-        set one_line = :one_line,
-        description  = :description,
-        party_id     = :party_id
-    </querytext>
-  </fullquery>
-
   <fullquery name="process_query">
     <querytext>
-        select
-        process_id,
-        one_line,
-        description,
-        party_id,
-        creation_date
-        from
-        pm_process
+        select title, description, workflow_id
+        from t_processes
         where process_id = :process_id
     </querytext>
   </fullquery>
Index: openacs-4/packages/tasks/www/process-add-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process-add-edit.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-add-edit.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/process-add-edit.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -8,33 +8,19 @@
 
     @return context_bar Context bar.
     @return title Page title.
-
 } {
-
     process_id:integer,optional
-    {one_line ""}
-    {description ""}
-    {number_of_tasks:integer ""}
-
+    assignee_id:integer,optional
 } -properties {
-
     context_bar:onevalue
     title:onevalue
-
 }
 
-
-# --------------------------------------------------------------- #
-# the unique identifier for this package
 set package_id [ad_conn package_id]
 set user_id    [ad_maybe_redirect_for_registration]
 
-# terminology and parameters
-set project_term    [parameter::get -parameter "ProjectName" -default "Project"]
-set project_term_lower  [parameter::get -parameter "projectname" -default "project"]
-
 if { ![ad_form_new_p -key process_id] } {
-    set process [db_string process_get { select one_line from pm_process where process_id = :process_id}]
+    set process [db_string process_get { select title from t_processes where process_id = :process_id}]
     set title "Edit: $process"
     set context [list [list "processes" Processes] [list [export_vars -base "process" -url {process_id}] $process] "Edit"]
     # permissions
@@ -49,39 +35,60 @@
 
 ad_form -name add_edit -form {
     process_id:key
+    assignee_id:text(hidden),optional
+    workflow_id:text(hidden),optional
 
-    {one_line:text
+    {title:text
         {label "Process"}
-	{value $one_line}
-        {html {size 40}}
+        {html {size 80}}
     }
 
     {description:text(textarea),optional
 	{label "Description"}
-	{value $description}
 	{html { rows 5 cols 40 wrap soft}}}
 
-} -select_query_name process_query -on_submit {
+} -select_query_name process_query -new_data {
 
-    set party_id      [ad_conn user_id]
-    set creation_date [db_string get_today { }]
+    db_transaction {
+	set workflow_id [workflow::new \
+			     -short_name "tasks_process_$process_id" \
+			     -pretty_name "tasks process $process_id" \
+			     -package_key tasks]
 
-} -new_data {
-    set process_id [db_nextval pm_process_seq]
+	set state_id [workflow::state::fsm::new \
+			  -workflow_id $workflow_id \
+			  -short_name new \
+			  -pretty_name New]
 
-    db_dml new_process { *SQL* }
+	workflow::action::fsm::new \
+	    -workflow_id $workflow_id \
+	    -short_name new \
+	    -pretty_name New \
+	    -new_state_id $state_id \
+	    -callbacks "tasks.Tasks_Action_SideEffect" \
+	    -initial_action_p t
 
-    ad_returnredirect -message "Process added. Now add a process task." [export_vars -base process-task -url { process_id}]
+	set process_id [tasks::process::new \
+			    -process_id $process_id \
+			    -title $title \
+			    -description $description \
+			    -mime_type "text/plain" \
+			    -workflow_id $workflow_id]
+    }
+
+    ad_returnredirect -message "Process added. Now add a process task." [export_vars -base process-task -url {process_id assignee_id}]
     ad_script_abort
 
 } -edit_data {
 
-    db_dml edit_process { *SQL* }
+    tasks::process::edit \
+	-process_id $process_id \
+	-title $title \
+	-description $description \
+	-mime_type "text/plain"
 
 } -after_submit {
 
-    ad_returnredirect -message "Process changes saved." [export_vars -base process -url {process_id}]
+    ad_returnredirect -message "Process changes saved." [export_vars -base process -url {process_id assignee_id}]
     ad_script_abort
 }
-
-
Index: openacs-4/packages/tasks/www/process-assign.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/Attic/process-assign.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-assign.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/process-assign.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -14,6 +14,7 @@
 } {
     {process_id:integer,notnull}
     {assignee_id:integer,notnull}
+    {object_id:integer,optional ""}
 } -properties {
 
     context_bar:onevalue
@@ -28,42 +29,25 @@
 }
 
 
-set process [db_string get_rpocess { select one_line from pm_process where process_id = :process_id }]
-set project_id [tasks::project_id]
-set instance_id [pm::process::instantiate -process_id $process_id -project_item_id $project_id -name $process]
+db_1row get_process {
+    select title as process, workflow_id
+    from t_processes
+    where process_id = :process_id
+}
 
 db_transaction {
 
-db_foreach task_in_process {
-    select *,
-           CASE WHEN due_date is null and due_interval is null THEN ''::varchar ELSE
-                   CASE WHEN due_date is not null THEN to_char(due_date,'YYYY-MM-DD') ELSE
-                     to_char((now()+due_interval),'YYYY-MM-DD')
-                   END
-           END as end_date
-      from pm_process_task, tasks_pm_process_task
-     where process_id = :process_id
-       and pm_process_task.process_task_id = tasks_pm_process_task.process_task_id 
-} {
+    set case_id [db_nextval acs_object_id_seq]
 
-            set task_id [pm::task::new -project_id ${project_id} \
-                         -process_instance_id $instance_id \
-			 -title ${one_line} \
-			 -description ${description} \
-                         -mime_type ${mime_type} \
-			 -end_date ${end_date} \
-			 -percent_complete "0" \
-			 -creation_user [ad_conn user_id] \
-			 -creation_ip [ad_conn peeraddr] \
-			 -package_id [ad_conn package_id] \
-			 -priority ${priority}]
-	pm::task::assign -task_item_id $task_id -party_id $assignee_id
+    tasks::process::instance::new \
+	-process_id $process_id \
+	-case_id $case_id \
+	-object_id $object_id
 
-	    set task_url [export_vars -base task -url {task_id status_id orderby {party_id $assignee_id}}]
-	util_user_message -html -message "The task <a href=\"/tasks/${task_url}\">$one_line</a> was added with a due date of $end_date"
-
+    workflow::case::new -no_notification \
+	-case_id $case_id \
+	-workflow_id $workflow_id \
+	-object_id $object_id
 }
-}
 
-
 ad_returnredirect [export_vars -base "contact" -url {{party_id $assignee_id}}]
Index: openacs-4/packages/tasks/www/process-delete.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process-delete.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-delete.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/process-delete.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -10,6 +10,7 @@
     @cvs-id $Id$
 } {
     process_id:integer
+    assignee_id:integer,optional
     {confirm_p:boolean 0}
     {return_url "processes"}
 } -properties {
@@ -18,27 +19,30 @@
 }
 
 set package_id [ad_conn package_id]
+permission::require_permission -object_id $package_id -privilege delete
 
-
 if {[string is false $confirm_p]} {
 
-    db_1row get_name "select one_line, description from pm_process where process_id = :process_id"
+    db_1row get_name {
+	select title, description
+	from t_processes
+	where process_id = :process_id
+    }
 
-    set title "Delete process: $one_line"
-    set context [list "Delete: $one_line"]
+    set title "Delete process: $title"
+    set context [list "Delete: $title"]
 
-    set yes_url "process-delete?[export_vars {process_id {confirm_p 1} return_url}]"
+    set yes_url [export_vars -base process-delete {process_id assignee_id {confirm_p 1} return_url}]
     set no_url $return_url
 
     return
 }
 
 
-permission::require_permission -object_id $package_id -privilege delete
-db_transaction {
-    db_dml delete_extra_stuff {
-	delete from tasks_pm_process_task where process_task_id in ( select process_task_id from pm_process_task where process_id = :process_id )
-    }
-    pm::process::delete -process_id $process_id
+db_dml delete_process {
+    update t_processes
+    set workflow_id = null
+    where process_id = :process_id
 }
+
 ad_returnredirect -message "Process deleted" $return_url
Index: openacs-4/packages/tasks/www/process-task-delete.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process-task-delete.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-task-delete.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/process-task-delete.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -8,6 +8,7 @@
     {process_task_id:integer,multiple}
     {confirm_p:boolean 0}
     {status_id:integer ""}
+    {assignee_id:integer,optional}
     {process_id:integer,notnull}
     {orderby ""}
 }
@@ -25,8 +26,8 @@
     set title "Delete [ad_decode $num_entries 1 "a Process Task" "Process Tasks"]"
     set context [list $title]
     set question "Are you sure you want to delete [ad_decode $num_entries 1 "this process task" "these $num_entries process tasks"]?"
-    set yes_url [export_vars -base process-task-delete -url { process_task_id:multiple { confirm_p 1 } status_id orderby process_id }]                                                    
-    set no_url [export_vars -base process -url { process_id status_id orderby }]
+    set yes_url [export_vars -base process-task-delete -url { process_task_id:multiple { confirm_p 1 } assignee_id status_id orderby process_id }]                                                    
+    set no_url [export_vars -base process -url { process_id assignee_id status_id orderby }]
     return
 }
 
@@ -37,22 +38,16 @@
 db_transaction {
     foreach process_task_id $process_task_id {
 	lappend task_titles [db_string get_task_title {
-	    select one_line
-              from pm_process_task
-             where process_task_id = :process_task_id
+	    select title
+              from t_process_tasks
+             where task_id = :process_task_id
                and process_id = :process_id
 	}]
 	db_dml mark_delete {
-	    delete
-              from tasks_pm_process_task
-             where process_task_id = :process_task_id
+	    update t_process_tasks
+            set status_id = null
+	    where task_id = :process_task_id
 	}
-	db_dml mark_delete {
-	    delete
-              from pm_process_task
-             where process_task_id = :process_task_id
-               and process_id = :process_id
-	}
     }
 }
 if { $num_entries > 1 } {
@@ -72,9 +67,5 @@
     util_user_message -html -message "The process task \"[lindex $task_titles 0]\" was deleted"
 }
 
-ad_returnredirect [export_vars -base process -url { process_id status_id orderby }]
+ad_returnredirect [export_vars -base process -url { process_id assignee_id status_id orderby }]
 ad_script_abort
-
-
-
-
Index: openacs-4/packages/tasks/www/process-task.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process-task.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process-task.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/process-task.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -12,29 +12,26 @@
 } {
     process_id:integer,notnull
     process_task_id:integer,optional
+    assignee_id:integer,optional
     status_id:integer,optional
     orderby:optional
 } -properties {
 } -validate {
     valid_process_id -requires process_id {
-	if { ![db_0or1row process_exists_p { select 1 from pm_process where process_id = :process_id}] } {
+	if { ![db_0or1row process_exists_p { select 1 from t_processes where process_id = :process_id}] } {
 	    ad_complain "The process_id specified is not valid"
 	}
     }
-    valid_party_id -requires process_id {
-	set process_owner [db_string process_manager { select party_id from pm_process where process_id = :process_id}]
-	if { $process_owner != [ad_conn user_id] || ![permission::permission_p -object_id [ad_conn package_id] -privilege admin] } {
-		ad_complain "The process specified belongs to [db_string process_manager { select person__name(party_id) from pm_process where process_id = :process_id}]. Please ask that person or a website administrator to edit tasks on this process or assign it to you so you can manage it."
-	}
-    }
 }
 
 
-
 set package_id [ad_conn package_id]
 set user_id    [ad_maybe_redirect_for_registration]
-set project_id [tasks::project_id]
-set process    [db_string process_get { select one_line from pm_process where process_id = :process_id}]
+db_1row process_get {
+    select title as process, workflow_id
+    from t_processes
+    where process_id = :process_id
+}
 
 if { [ad_form_new_p -key process_task_id] } {
     set title "Add Process Task"
@@ -45,176 +42,171 @@
 } else {
     set title "Edit: "
     append title [db_string get_task_name {
-	    select pm.one_line
-              from pm_process_task pm
-             where pm.process_task_id = :process_task_id
-               and pm.process_id = :process_id
+	    select title
+              from t_process_tasks
+             where task_id = :process_task_id
     }]
     append edit_buttons {
 	{Update save}
         {{Update and Add New Task} save_add_another}
         {{Delete} delete}
     }
 }
-set context [list [list "processes" Processes] [list [export_vars -base "process" -url {process_id}] $process] $title]
+set context [list [list "processes" Processes] [list [export_vars -base "process" -url {process_id assignee_id}] $process] $title]
 
+set status_options [db_list_of_lists status_options {
+    select title, status_id
+    from t_task_status
+    order by status_id
+}]
+set status_options [lang::util::localize $status_options]
 
+set open_options [db_list_of_lists open_action_options {
+    select title, closing_action_id
+    from t_process_tasks
+    where process_id = :process_id
+    and status_id is not null
+    order by lower(title)
+}]
+set open_options [concat [list [list "-- new --" ""]] $open_options]
 
 if { [ns_queryget "formbutton:delete"] != "" } {
-    ad_returnredirect [export_vars -base "process-task-delete" -url {process_id process_task_id status_id orderby}]
+    ad_returnredirect [export_vars -base "process-task-delete" -url {process_id process_task_id assignee_id status_id orderby}]
     ad_script_abort
 }
 
 ad_form -name add_edit \
-    -cancel_url [export_vars -base "process" -url {process_id}] \
+    -cancel_url [export_vars -base "process" -url {process_id assignee_id}] \
     -cancel_label "Cancel" \
     -edit_buttons $edit_buttons \
     -form {
         process_task_id:key
         process_id:integer(hidden)
+        workflow_id:integer(hidden)
 
+        assignee_id:integer(hidden),optional
         status_id:integer(hidden),optional
         orderby:text(hidden),optional
 
-
         {task:text(text)
             {label "Process Task"}
-            {html { size 28 maxlength 50}}
+            {html { size 80 maxlength 200}}
 	}
         
-    {due_date:text(text),optional
-        {label "Default Hard Deadline"}
-	{html {id date1 size 10 maxlength 10}}
-        {help_text {if blank there is no default deadline}}
-	{after_html {
-<button type=\"reset\" id=\"f_date_b1\">YYYY-MM-DD</button>
-<script type=\"text/javascript\">
-    Calendar.setup({
-        inputField     :    \"date1\",       // id of the input field, put readonly 1 in html to limit input 
-        ifFormat       :    \"%Y-%m-%d\",   // Format the input field
-        daFormat       :    \"%m %d %Y\",   // Format for the display area
-        showsTime      :    false,          // will display a time selector
-        button         :    \"f_date_b1\",   // trigger for the calendar (button ID)
-        singleClick    :    true,           // double-click mode
-        step           :    1,              // show all years in drop-down boxes (instead of every other year as default)
-        weekNumbers    :    false,          // do not show the week numbers
-        showOthers     :    false           // show days belonging to other months
-    });
-</script>
-	}}}
-    
-
-        {due_days:integer(text),optional
-            {label "Default Variable Deadline"}
-            {html {size 3 maxlength 3}}
-            {help_text {Variable deadlines that fall on Saturday or Sunday will automatically be pushed to the next Monday}}
-            {after_html {days after assignment}}
+        {status:text(select)
+            {label "[_ tasks.Status]"}
+            {options $status_options}
         }
 
         {priority:integer(select),optional
             {label "Priority"}
             {options {{{3 - Very Important} 3} {{2 - Important} 2} {{1 - Normal} 1} {{0 - Not Important} 0}}}
         }
 
+        {open_action_id:integer(select),optional
+            {label "After"}
+            {options $open_options}
+        }
+
         {description:text(textarea),optional,nospell
             {label "Notes"}
             {html { rows 5 cols 50 wrap soft}}}
 
+        {comment:text(textarea),optional,nospell
+            {label "[_ tasks.Comment]"}
+            {html { rows 5 cols 50 wrap soft}}}
+
+        {start:integer(text),optional
+            {label "Variable Start"}
+            {html {size 3 maxlength 3}}
+            {help_text {Variable start that fall on Saturday or Sunday will automatically be pushed to the next Monday}}
+            {after_html {days after assignment}}
+        }
+
+        {due:integer(text),optional
+            {label "Variable Deadline"}
+            {html {size 3 maxlength 3}}
+            {help_text {Variable deadlines that fall on Saturday or Sunday will automatically be pushed to the next Monday}}
+            {after_html {days after assignment}}
+        }
+
     } \
     -new_request {
 
-	set status_id "1"
+	set status "1"
         set priority "1"
+	set start 0
+	set due 0
 
     } -edit_request {
 
 	db_1row get_task_info {
-	    select pm.one_line as task,
-                   pm.description,
-                   tp.due_interval,
-                   tp.due_date,
-                   tp.priority
-              from pm_process_task pm,
-                   tasks_pm_process_task tp
-             where pm.process_task_id = :process_task_id
-               and pm.process_id = :process_id
-               and pm.process_task_id = tp.process_task_id
+	    select title as task, description, status_id as status, priority,
+	           start, due, comment, open_action_id
+              from t_process_tasks
+             where task_id = :process_task_id
+               and process_id = :process_id
      	}
-	set due_days [lindex $due_interval 0]
 
-    } -validate {
-	{due_date 
-	    {[calendar::date_valid_p -date $due_date]}
-	    {This is not a valid date. Either the date doesn't exist or it is not formatted correctly. Correct formatting is: YYYY-MM-DD or YYYYMMDD}
-	}
-	{due_date
-	    { [expr \
-	          [expr [string equal $due_date ""] == 1 && [string equal [string trim $due_days] ""] == 1] || \
-		  [expr [string equal $due_date ""] == 1 && [string equal [string trim $due_days] ""] == 0] || \
-		  [expr [string equal $due_date ""] == 0 && [string equal [string trim $due_days] ""] == 1]
-	      ]}
-	    {You may either use a Hard Deadline, a Variable Deadline or neither but not both}
-	}
-	{due_days
-	    { [expr \
-	          [expr [string equal $due_date ""] == 1 && [string equal [string trim $due_days] ""] == 1] || \
-		  [expr [string equal $due_date ""] == 1 && [string equal [string trim $due_days] ""] == 0] || \
-		  [expr [string equal $due_date ""] == 0 && [string equal [string trim $due_days] ""] == 1]
-	      ]}
-	    {You may either use a Hard Deadline, a Variable Deadline or neither but not both}
-	}
     } -on_submit {
-        set user_id [ad_conn user_id]
-        set peeraddr [ad_conn peeraddr]
-	if { [exists_and_not_null due_days] } {
-	    set due_interval "${due_days} days"
-	} else {
-	    set due_interval ""
-	}
-	set process_task_url [export_vars -base "/tasks/process-task" -url {process_id process_task_id}]
+	set process_task_url [export_vars -base "/tasks/process-task" -url {process_id process_task_id assignee_id}]
     } -new_data {
 	db_transaction {
-	    db_dml insert_pm_process_task {
-		insert into pm_process_task
-                ( process_task_id, process_id, one_line, description, mime_type )
-		values
-		( :process_task_id, :process_id, :task, :description, 'text/plain' )
+
+	    set state_id [workflow::state::fsm::get_id -workflow_id $workflow_id -short_name new]
+	    
+	    set closing_action_id [workflow::action::fsm::new \
+				       -workflow_id $workflow_id \
+				       -short_name "tasks_action_$process_task_id" \
+				       -pretty_name "task action $process_task_id" \
+				       -enabled_state_ids $state_id \
+				       -new_state_id $state_id \
+				       -callbacks "tasks.Tasks_Action_SideEffect"]
+
+	    if {[empty_string_p $open_action_id]} {
+		set open_action_id [workflow::action::get_id -workflow_id $workflow_id -short_name new]
 	    }
-	    db_dml insert_tasks_pm_process_task {
-		insert into tasks_pm_process_task
-                ( process_task_id, due_interval, due_date, priority )
-		values
-                ( :process_task_id, :due_interval, :due_date, :priority )
-	    }
+
+	    set process_task_id [tasks::process::task::new \
+				     -task_id $process_task_id \
+				     -process_id $process_id \
+				     -open_action_id $open_action_id \
+				     -closing_action_id $closing_action_id \
+				     -title $task \
+				     -description $description \
+				     -mime_type "text/plain" \
+				     -comment $comment \
+				     -status_id $status \
+				     -priority $priority \
+				     -start $start \
+				     -due $due]
+
 	    util_user_message -html -message "The process task <a href=\"${process_task_url}\">$task</a> was added"
 	}
 
 
     } -edit_data {
-	db_transaction {
-	    db_dml update_pm_process_task {
-		update pm_process_task
-                   set one_line = :task,
-		       description = :description
-                 where process_task_id = :process_task_id
-                   and process_id = :process_id
-	    }
-	    db_dml update_tasks_pm_process_task {
-		update tasks_pm_process_task
-                   set due_interval = :due_interval,
-		       due_date = :due_date,
-                       priority = :priority
-                 where process_task_id = :process_task_id
-	    }
-	    util_user_message -html -message "The process task <a href=\"${process_task_url}\">$task</a> was updated"
-	}
 
+    tasks::process::task::edit \
+	-task_id $process_task_id \
+	-open_action_id $open_action_id \
+	-title $task \
+	-description $description \
+	-mime_type "text/plain" \
+	-comment $comment \
+	-status_id $status \
+	-priority $priority \
+	-start $start \
+	-due $due
+
+    util_user_message -html -message "The process task <a href=\"${process_task_url}\">$task</a> was updated"
+
     } -after_submit {
 
 	if { [ns_queryget "formbutton:save_add_another"] != "" } {
-	    set return_url [export_vars -url -base "process-task" {process_id}]
+	    set return_url [export_vars -url -base "process-task" {process_id assignee_id}]
 	} else {
-	    set return_url [export_vars -url -base "process" {process_id}]
+	    set return_url [export_vars -url -base "process" {process_id assignee_id}]
 	}
 	ad_returnredirect $return_url
 	ad_script_abort
Index: openacs-4/packages/tasks/www/process.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/process.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -12,11 +12,10 @@
     @return use_link the link to use this process
 
 } {
-
     process_id:integer,notnull
+    {assignee_id:integer,optional ""}
     orderby:optional
     {project_item_id ""}
-    
 } -properties {
     process_id:onevalue
     context_bar:onevalue
@@ -42,8 +41,11 @@
 
 # set up context bar, needs parent_id
 
-db_1row get_process_info { select * from pm_process where process_id = :process_id }
-set title $one_line
+db_1row get_process_info {
+    select title
+    from t_processes
+    where process_id = :process_id
+}
 set context [list [list processes "Processes"] $title]
 
 set use_link "<a href=\"[export_vars -base task-select-project {process_id project_item_id}]\"><img border=\"0\" src=\"/shared/images/go.gif\"></a>"
@@ -54,18 +56,20 @@
          priority {
 	     label "Priority"
 	 } \
-         one_line {
+         title {
              label "Subject"
-             display_template {<a href="process-task?process_id=[set process_id]&process_task_id=@tasks.process_task_id@">@tasks.task@</a>
+             display_template {<a href="process-task?process_id=$process_id&assignee_id=$assignee_id&process_task_id=@tasks.process_task_id@">@tasks.task@</a>
              }
          } \
-         deadline {
+	 start {
+	     label "Start"
+	 } \
+         due {
 	     label "Due"
-	     display_template {
-		 <if @tasks.due_interval@ not nil>@tasks.due_interval@ after assignment</if>
-		 <if @tasks.due_date@ not nil>@tasks.pretty_due_date@</if>
-	     }
 	 } \
+         after_task {
+	     label "After"
+	 } \
 	]    
 
 
@@ -76,17 +80,17 @@
     -key process_task_id \
     -elements $elements \
     -actions [list \
-		  "Add Process Task" [export_vars -base process-task -url {process_id}] "Add Process Task" \
-		  "Edit Process" [export_vars -base process-add-edit -url {process_id}] "Edit Process Title/Description" \
-		  "Delete Process" [export_vars -base process-delete -url {process_id}] "Delete this Process" \
-		  "Cancel" "processes" "Return to all processes" \
+		  "Add Process Task" [export_vars -base process-task -url {process_id assignee_id}] "Add Process Task" \
+		  "Edit Process" [export_vars -base process-add-edit -url {process_id assignee_id}] "Edit Process Title/Description" \
+		  "Delete Process" [export_vars -base process-delete -url {process_id assignee_id}] "Delete this Process" \
+		  "Cancel" [export_vars -base processes -url {assignee_id}] "Return to all processes" \
 		 ] \
     -orderby {
         default_value ordering,desc
         ordering {
             label "Order"
-            orderby_asc "tp.priority asc, tp.due_date, tp.due_interval, upper(pm.one_line)"
-            orderby_desc "tp.priority desc, tp.due_date, tp.due_interval, upper(pm.one_line)"
+            orderby_asc "tp.priority asc, tp.due, lower(tp.title)"
+            orderby_desc "tp.priority desc, tp.due, lower(tp.title)"
             default_direction desc
         }
     } \
@@ -95,20 +99,16 @@
     } \
     -bulk_action_export_vars {
         process_id
-        project_item_id
+	assignee_id
     } \
     -sub_class {
         narrow
     } \
     -filters {
         process_id {}
-    } \
-    -html {
-        width 100%
     }
 
 
 db_multirow -extend { item_url } tasks task_query {
 } {
 }
-
Index: openacs-4/packages/tasks/www/process.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/process.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/process.xql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/process.xql	25 Sep 2005 23:49:23 -0000	1.2
@@ -3,17 +3,14 @@
 
   <fullquery name="task_query">
     <querytext>
-	    select pm.process_task_id,
-                   pm.one_line as task,
-                   pm.description,
-                   tp.due_interval,
-                   tp.due_date,
-	           CASE WHEN to_char(tp.due_date,'YYYY') = to_char(now(),'YYYY') THEN to_char(tp.due_date,'Mon DD (Dy)') ELSE to_char(tp.due_date,'Mon DD, YYYY (Dy') END as pretty_due_date,
-                   tp.priority
-              from pm_process_task pm,
-                   tasks_pm_process_task tp
-             where pm.process_id = :process_id
-               and pm.process_task_id = tp.process_task_id
+	    select tp.task_id as process_task_id, tp.title as task,
+                   tp.description, tp.priority, tp.due, tp.start,
+                   tp2.title as after_task, tp2.task_id as after_task_id
+              from t_process_tasks tp
+	      left outer join t_process_tasks tp2
+                on (tp2.closing_action_id = tp.open_action_id)
+             where tp.process_id = :process_id
+               and tp.status_id is not null
         [template::list::orderby_clause -orderby -name tasks]
     </querytext>
   </fullquery>
Index: openacs-4/packages/tasks/www/processes-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/processes-postgresql.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/processes-postgresql.xql	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/processes-postgresql.xql	25 Sep 2005 23:49:23 -0000	1.2
@@ -4,19 +4,16 @@
 
 <fullquery name="process_query">
     <querytext>
-        SELECT
-        p.process_id,
-        p.one_line,
-        p.description,
-        p.party_id,
-        to_char(p.creation_date,'YYYY-MM-DD') as creation_date_ansi,
-        (select count(*) from pm_process_instance i where i.process_id =
-        p.process_id) as instances,
-        person__name(party_id) as owner_name
-        FROM 
-        pm_process_active p
-        ORDER BY
-        p.one_line        
+        select p.process_id, p.title, o.creation_user,
+               person__name(o.creation_user) as creator_name, p.description,
+               to_char(o.creation_date, 'YYYY-MM-DD') as creation_date_ansi,
+               (select count(*)
+                from t_process_instances pi
+                where pi.process_id = p.process_id) as instances
+        from t_processes p, acs_objects o
+        where p.process_id = o.object_id
+        and p.workflow_id is not null
+        order by lower(p.title)
     </querytext>
 </fullquery>
 
Index: openacs-4/packages/tasks/www/processes.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/processes.adp,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/processes.adp	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/processes.adp	25 Sep 2005 23:49:23 -0000	1.2
@@ -5,9 +5,7 @@
 <else>
 <master src="/packages/contacts/custom/mbbs-contacts-master" />
 </else>
-<if @assignee_id@ not nil>
-<p><a href="@cancel_url@" class="button">#tasks.Cancel#</a></p>
-</if>
+
 <listtemplate name="processes"></listtemplate>
 
 
Index: openacs-4/packages/tasks/www/processes.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/processes.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/processes.tcl	27 Jul 2005 13:45:00 -0000	1.1
+++ openacs-4/packages/tasks/www/processes.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -21,23 +21,13 @@
     write_p:onevalue
     create_p:onevalue
     admin_p:onevalue
-    task_term:onevalue
-    task_term_lower:onevalue
-    project_term:onevalue
-    project_term_lower:onevalue
 }
 
 if { [exists_and_not_null assignee_id] } {
     set cancel_url [export_vars -base "/tasks/contact" -url {{party_id $assignee_id}}]
 }
 # --------------------------------------------------------------- #
 
-# terminology
-set task_term       [parameter::get -parameter "TaskName" -default "Task"]
-set task_term_lower [parameter::get -parameter "taskname" -default "task"]
-set project_term    [parameter::get -parameter "ProjectName" -default "Project"]
-set project_term_lower [parameter::get -parameter "projectname" -default "project"]
-
 # set up context bar
 set context_bar [list "Processes"]
 
@@ -52,31 +42,25 @@
 set create_p [permission::permission_p -object_id $package_id -privilege create]
 set admin_p [permission::permission_p -object_id $package_id -privilege admin]
 
-# root CR folder
-# set root_folder [db_string get_root "select pm_project__get_root_folder (:package_id, 'f')"]
+set title "Manage Processes"
+set context [list $title]
+set actions [list "Add Process" [export_vars -base process-add-edit {assignee_id}] "Add a Process"]
+if {[exists_and_not_null assignee_id]} {
+    lappend actions "Cancel" "$cancel_url" "Cancel"
+}
 
-# Processes, using list-builder ---------------------------------
-if { [exists_and_not_null assignee_id] } {
-    set mode "assign"
-    set title "Assing Process"
-    set content [list $title]
-#    set actions [list "Manage Processes" "processes" "Manage Processes"]
-    set actions ""
+
+if {$admin_p} {
+    set mode admin
 } else {
-    set mode "manage"
-    set title "Manage Processes"
-    set context [list $title]
-    set actions [list "Add Process" "process-add-edit" "Add a Process"]
+    set mode normal
 }
 
-set elements ""
-
-    
-
 template::list::create \
     -name processes \
     -multirow processes \
     -key item_id \
+    -pass_properties { admin_p } \
     -selected_format $mode \
     -elements {
 	assign {
@@ -85,12 +69,12 @@
                 <a href="@processes.assign_url@" class="button">Assign</a>
 	    }
 	}
-	one_line {
-	    label "Subject"
+	title {
+	    label "Title"
 	    display_template {
-		<if @processes.mode@ eq manage><a href="@processes.process_url@"></if>
-		@processes.one_line@
-		<if @processes.mode@ eq manage></a></if>
+		<if @admin_p@ eq 1><a href="@processes.process_url@"></if>
+		@processes.title@
+		<if @admin_p@ eq 1></a></if>
 	    }
 	}
 	description {
@@ -102,9 +86,9 @@
 		@processes.instances@
 	    }
 	}
-	owner_name {
+	creator_name {
 	    label "Manager"
-	    link_url_eval $owner_url
+	    link_url_eval $creator_url
 	}
 	edit {
 	    display_template {
@@ -121,54 +105,47 @@
         orderby_process {}
     } \
     -orderby {
-        one_line {orderby one_line}
-        default_value one_line,desc
+        title {orderby title}
+        default_value title,desc
     } \
     -orderby_name orderby_project \
     -sub_class {
         narrow
-    } \
-    -html {
-        width 100%
     } -formats {
-	assign {
+	normal {
 	    label "Assign Layout"
 	    layout table 
 	    row {
                 assign {}
-		one_line {}
+		title {}
 		description {}
-		owner_name {}
+		creator_name {}
 	    }
 	}
-	manage {
-	    label "Assign Layout"
+	admin {
+	    label "Admin Layout"
 	    layout table 
 	    row {
-		edit {}
-		one_line {}
+		assign {}
+		title {}
 		description {}
-		owner_name {}
+		creator_name {}
 		instances {}
+		edit {}
 		delete {}
 	    }
 	}
     }
 
-set mode_carryover $mode
-db_multirow -extend { delete_url creation_date owner_url process_url assign_url mode } processes process_query {
+db_multirow -extend { delete_url creation_date creator_url process_url assign_url} processes process_query {
 } {
-    set mode $mode_carryover
-    set delete_url [export_vars -base "process-delete" {process_id}]
+    set delete_url [export_vars -base "process-delete" {process_id assignee_id}]
     set creation_date [lc_time_fmt $creation_date_ansi "%x"]
-    set owner_url [acs_community_member_url -user_id $party_id]
-    set process_url [export_vars -base process -url {process_id}]
+    set creator_url [acs_community_member_url -user_id $creation_user]
+    set process_url [export_vars -base process -url {process_id assignee_id}]
     if { [exists_and_not_null assignee_id] } {
 	set assign_url [export_vars -base process-assign -url {assignee_id process_id}]
     } else {
 	set assign_url $process_url
     }
 }
-
-
-# ------------------------- END OF FILE ------------------------- #
Index: openacs-4/packages/tasks/www/task-interval.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/Attic/task-interval.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/tasks/www/task-interval.tcl	27 Jul 2005 13:44:59 -0000	1.1
+++ openacs-4/packages/tasks/www/task-interval.tcl	25 Sep 2005 23:49:23 -0000	1.2
@@ -35,74 +35,33 @@
 }
 
 set package_id [ad_conn package_id]
-set user_id    [ad_maybe_redirect_for_registration]
-set peeraddr   [ad_conn peeraddr]
-set project_id [tasks::project_id]
-
 set title "Add/Edit"
 set context [list $title]
 
 db_1row get_task_info "
-    select ci.item_id as task_id,
-           cr.title as task,
-           to_char((ptr.end_date $operand '$days days'::interval),'YYYY-MM-DD') as end_date,
-           ptr.percent_complete,
-           ptr.priority,
-           cr.description
-      from pm_tasks_revisions ptr,
-           cr_revisions cr,
-           cr_items ci
-     where ci.item_id = :task_id
-       and ci.latest_revision = ptr.task_revision_id
-       and ci.live_revision = ptr.task_revision_id
-       and ptr.task_revision_id = cr.revision_id
+    select t.title as task, t.description, t.mime_type, t.priority,
+           to_char((t.due_date $operand '$days days'::interval),'YYYY-MM-DD') as due_date,
+           t.status_id as status, t.comment
+      from t_tasks t
+     where t.task_id = :task_id
     "
-if { $percent_complete >= "100" } {
-    set completed_p "1"
-}
-if {$percent_complete >= 100} {
-    set task_status_id [pm::task::default_status_closed]
-} elseif {$percent_complete < 100} {
-    set task_status_id [pm::task::default_status_open]
-}
-set task_item_id $task_id
-set project_item_id $project_id
-set title $task
-set mime_type "text/plain"
-set estimated_hours_work ""
-set estimated_hours_work_min ""
-set estimated_hours_work_max ""
-set actual_hours_worked ""
-set update_user $user_id
-set update_ip $peeraddr
 
-db_exec_plsql new_task_revision "
-    select pm_task__new_task_revision (
-				       :task_item_id,
-				       :project_item_id,
-				       :title,
-				       :description,
-				       :mime_type,
-				       [pm::util::datenvl -value $end_date -value_if_null "null" -value_if_not_null ":end_date"],
-				       :percent_complete,
-				       :estimated_hours_work,
-				       :estimated_hours_work_min,
-				       :estimated_hours_work_max,
-				       :actual_hours_worked,
-				       :task_status_id,
-				       current_timestamp,
-				       :update_user,
-				       :update_ip, 
-				       :package_id,
-				       :priority)
-"
+set task_id [tasks::task::edit \
+		 -task_id ${task_id} \
+		 -title ${task} \
+		 -description ${description} \
+		 -mime_type $mime_type \
+		 -comment ${comment} \
+		 -due_date ${due_date} \
+		 -status_id ${status} \
+		 -priority ${priority}]
 
-set task_url [export_vars -base task -url {task_id status_id orderby}]
+set task_url [export_vars -base "/tasks/task" -url {task_id status_id orderby}]
 
 if { $action == "minus" } {
-    util_user_message -html -message "The task <a href=\"/tasks/${task_url}\">$title</a> moved up 7 days"
+    util_user_message -html -message "[_ tasks.task_moved_up]"
 } else {
-    util_user_message -html -message "The task <a href=\"/tasks/${task_url}\">$title</a> delayed 7 days"
+    util_user_message -html -message "[_ tasks.task_delayed]"
 }
 
 
Index: openacs-4/packages/tasks/www/task.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/tasks/www/Attic/task.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/tasks/www/task.tcl	27 Jul 2005 14:29:51 -0000	1.2
+++ openacs-4/packages/tasks/www/task.tcl	25 Sep 2005 23:49:23 -0000	1.3
@@ -42,12 +42,11 @@
 set names [join $names ", "]
 
 if { ![exists_and_not_null return_url] } {
-    set return_url [export_vars -base "contact" -url {party_id orderby status_id}]
+    set return_url [export_vars -base "contact" -url {party_id status_id orderby}]
 }
 
 set package_id [ad_conn package_id]
 set user_id    [ad_maybe_redirect_for_registration]
-set project_id [tasks::project_id]
 
 set title "[_ tasks.AddEdit]"
 set context [list $title]
@@ -66,20 +65,37 @@
 }
 
 if { [ns_queryget "formbutton:delete"] != "" } {
-    ad_returnredirect [export_vars -base "delete" -url {task_id status_id orderby return_url}]
+    ad_returnredirect [export_vars -base "delete" -url {task_id orderby status_id return_url}]
     ad_script_abort
 }
 
+set contact_options [db_list_of_lists contact_options {
+    select CASE WHEN o.name is null THEN p.first_names || ' ' || p.last_name ELSE o.name END as name, y.party_id
+    from parties y
+    left join persons p on (y.party_id = p.person_id)
+    left join organizations o on (y.party_id = o.organization_id)
+    where (p.person_id is not null or o.organization_id is not null)
+    and y.party_id > 0
+    order by 1
+}]
+set contact_options [concat [list [list "" ""]] $contact_options]
 
+set status_options [db_list_of_lists status_options {
+    select title, status_id
+    from t_task_status
+    order by status_id
+}]
+set status_options [lang::util::localize $status_options]
+
 ad_form -name add_edit \
     -cancel_url $return_url \
     -cancel_label "[_ tasks.Cancel]" \
     -edit_buttons $edit_buttons \
     -form {
         task_id:key
         return_url:text(hidden),optional
-        status_id:integer(hidden),optional
         orderby:text(hidden),optional
+        status_id:integer(hidden),optional
         party_id:integer(hidden)
         other_party_ids:text(hidden),optional
         {names:text(hidden),optional {label {Add Task To}}}
@@ -103,35 +119,25 @@
 
         {task:text(text),optional
             {label "[_ tasks.Custom_Task]"}
-            {html { maxlength 1000 size 35 }}
+            {html { maxlength 1000 size 80 }}
             {help_text {You can either use a standard task or a custom task, but not both}}
 	}
 
-	{end_date:text(text)
+        {object_id:text(select),optional
+            {label "[_ tasks.Contact]"}
+            {options $contact_options}
+        }
+
+	{due_date:text
 	    {label "[_ tasks.Due]"}
 	    {html {id date1 size 10 maxlength 10}}
 	    {help_text {if blank there is no due date}}
-	    {after_html {
-		<button type=\"reset\" id=\"f_date_b1\">YYYY-MM-DD</button>
-<script type=\"text/javascript\">
-    Calendar.setup({
-        inputField     :    \"date1\",       // id of the input field, put readonly 1 in html to limit input 
-        ifFormat       :    \"%Y-%m-%d\",   // Format the input field
-        daFormat       :    \"%m %d %Y\",   // Format for the display area
-        showsTime      :    false,          // will display a time selector
-        button         :    \"f_date_b1\",   // trigger for the calendar (button ID)
-        singleClick    :    true,           // double-click mode
-        step           :    1,              // show all years in drop-down boxes (instead of every other year as default)
-        weekNumbers    :    false,          // do not show the week numbers
-        showOthers     :    false           // show days belonging to other months
-    });
-</script>
-	    }}
+	    {after_html {<input type='reset' value=' ... ' onclick=\"return showCalendar('date1', 'y-m-d');\"> \[<b>y-m-d </b>\]}}
 	}
 
-        {completed_p:text(checkbox),optional
+        {status:text(select)
             {label "[_ tasks.Status]"}
-            {options {{Completed 1}}}
+            {options $status_options}
         }
 
         {priority:integer(select),optional
@@ -143,35 +149,27 @@
             {label "[_ tasks.Notes]"}
             {html { rows 6 cols 60 wrap soft}}}
 
+        {comment:text(textarea),optional,nospell
+            {label "[_ tasks.Comment]"}
+            {html { rows 6 cols 60 wrap soft}}}
+
     } -new_request {
 
         set title "[_ tasks.Add_Task]"
 	set context [list $title]
-	set status_id "1"
+	set status "1"
         set priority "1"
 
     } -edit_request {
 
 	db_1row get_task_info {
-	    select ci.item_id as task_id,
-                   cr.title as task,
-                   to_char(ptr.end_date,'YYYY-MM-DD') as end_date,
-                   ptr.percent_complete,
-                   ptr.priority,
-                   cr.description
-              from pm_tasks_revisions ptr,
-                   cr_revisions cr,
-                   cr_items ci
-             where ci.item_id = :task_id
-               and ci.latest_revision = ptr.task_revision_id
-               and ci.live_revision = ptr.task_revision_id
-               and ptr.task_revision_id = cr.revision_id
-            
+	    select t.title as task, t.description, t.comment,
+                   to_char(t.due_date,'YYYY-MM-DD') as due_date,
+                   t.priority, t.status_id as status, t.object_id
+              from t_tasks t
+             where t.task_id = :task_id
 	}
-	if { $percent_complete >= "100" } {
-	    set completed_p "1"
-	}
-        set title ${task}
+	set title $task
 	set context [list $title]
 	set task_prescribed_p 0
 	foreach task_prescribed_option [template::element::get_property add_edit task_prescribed options] {
@@ -184,7 +182,6 @@
 	    set task ""
 	} else {
 	    set task_prescribed ""
-	    set task $task
 	}
     } -validate {
 #	{end_date {[calendar::date_valid_p -date $end_date]} {This is not a valid date. Either the date doesn't exist or it is not formatted correctly. Correct formatting is: YYYY-MM-DD or YYYYMMDD}}
@@ -204,30 +201,21 @@
 	    break
 	}
 
-        set user_id [ad_conn user_id]
-        set peeraddr [ad_conn peeraddr]
-        if { $completed_p == "1" } {
-	    set percent_complete "100"
-	} else {
-	    set percent_complete "0"
-	}
     } -new_data {
 
 	foreach party $all_parties {
 
-	    set task_id [pm::task::new -project_id ${project_id} \
+	    set task_id [tasks::task::new \
 			     -title ${task} \
 			     -description ${description} \
 			     -mime_type "text/plain" \
-			     -end_date ${end_date} \
-			     -percent_complete ${percent_complete} \
-			     -creation_user ${user_id} \
-			     -creation_ip ${peeraddr} \
+			     -comment ${comment} \
+			     -party_id ${party} \
+			     -object_id $object_id \
+			     -due_date ${due_date} \
+			     -status_id ${status} \
 			     -package_id ${package_id} \
 			     -priority ${priority}]
-
-	    pm::task::assign -task_item_id $task_id -party_id $party
-
 	}
 
 	if { [llength $all_parties] == 1 } {
@@ -239,43 +227,17 @@
 
     } -edit_data {
 
-	if {$percent_complete >= 100} {
-	    set task_status_id [pm::task::default_status_closed]
-	} elseif {$percent_complete < 100} {
-	    set task_status_id [pm::task::default_status_open]
-	}
-	set task_item_id $task_id
-	set project_item_id $project_id
-	set title $task
-	set mime_type "text/plain"
-	set estimated_hours_work ""
-	set estimated_hours_work_min ""
-	set estimated_hours_work_max ""
-	set actual_hours_worked ""
-	set update_user $user_id
-	set update_ip $peeraddr
+	set task_id [tasks::task::edit \
+			 -task_id ${task_id} \
+			 -title ${task} \
+			 -description ${description} \
+			 -mime_type "text/plain" \
+			 -comment ${comment} \
+			 -object_id $object_id \
+			 -due_date ${due_date} \
+			 -status_id ${status} \
+			 -priority ${priority}]
 
-	db_exec_plsql new_task_revision "
-	    select pm_task__new_task_revision (
-					       :task_item_id,
-					       :project_item_id,
-					       :title,
-					       :description,
-					       :mime_type,
-					       [pm::util::datenvl -value $end_date -value_if_null "null" -value_if_not_null ":end_date"],
-					       :percent_complete,
-					       :estimated_hours_work,
-					       :estimated_hours_work_min,
-					       :estimated_hours_work_max,
-					       :actual_hours_worked,
-					       :task_status_id,
-					       current_timestamp,
-					       :update_user,
-					       :update_ip, 
-					       :package_id,
-					       :priority)
-	"
-
     	set task_url [export_vars -base task -url {task_id status_id orderby party_id}]
 	util_user_message -html -message "[_ tasks.lt_The_task_a_hreftaskst_1]"
 
@@ -294,6 +256,8 @@
 
 if { ![ad_form_new_p -key task_id] } {
     set creation_id [db_string get_it { select creation_user from acs_objects where object_id = :task_id }]
+    set creator_url [contact::url -party_id $creation_id]
+    set creator_name [contact::name -party_id $creation_id]
     template::element::create add_edit creator \
 	-datatype "text" \
 	-widget "inform" \