Index: openacs-4/packages/project-manager/project-manager.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/project-manager.info,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/project-manager.info 5 May 2005 06:38:11 -0000 1.3 +++ openacs-4/packages/project-manager/project-manager.info 26 May 2005 09:34:27 -0000 1.4 @@ -7,27 +7,30 @@ f f - + Jade Rubick Project management tool for OpenACS 2005-01-13 Integrated Bakery Resources Track tasks, estimates and actual progress for a project. See the <a href="http://openacs.org/projects/dotwrk/project_management/">project page</a> for more information. - + - + + - - + + + + - - - - Index: openacs-4/packages/project-manager/catalog/project-manager.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/catalog/project-manager.en_US.ISO-8859-1.xml,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/catalog/project-manager.en_US.ISO-8859-1.xml 30 Apr 2005 06:59:32 -0000 1.2 +++ openacs-4/packages/project-manager/catalog/project-manager.en_US.ISO-8859-1.xml 26 May 2005 09:34:27 -0000 1.3 @@ -1,45 +1,138 @@ - + + --- TBD --- + -- Closed + --All Categories-- + --Select Person-- + --Select Role-- + completed + this subproject Action Actions + Active tasks Add + Add subproject + Add a Process + Add a process + Add assignment + Add comment + Add myself as + Add process + Add project Add subproject + Add task + Add %task_term_lower% + Add tasks + Added: + Added: %new% + Admin + %assign% removed + %assign% saved + Assignee + Assignee: Assignees + "Assignees" + Assignment + Assignments + Assignments saved + Attach a file? Average + back to admin page + Cancel Cancel, do not delete Categories + Close + Close project + Closed Code + Code: Comment: + Comment Comments Complete: + Created + CSV + Currently integrated: + Currently selected: Customer + Customer Name + Customers Date + Date: Dates + Dates: + days Deadline: + Deadline Default roles Delete + Delete: %one_line% + Delete task + Delete tasks + Delete this task? + Dep dependencies Dependency: + Dependency\ Dependency types Description Description: + Description\ + Description changed Done. + Done + Earliest Finish Earliest finish + Earliest Start Earliest start Edit + assignees + Edit a Process Edit assignees Edit categories + Edit Process + Edit %project_term% + Edit %task_term% + Edit tasks + Edit this role + EF + Enhanced Text Error + ES + Estimated Hours + Estimated Hours (Max) + Estimated Hours (Min) + Fixed-width Text + Format: + Go + Go back Goal + Goal: + Hour to date hours + Hours completed hrs + HTML + ID Key + Latest Finish Latest finish + Latest Start Latest start + Latest start: + Lead + LF + Link package instances + Link task: + Linking Log entry: + Log time + Logged variables Logger Logger integration + Long Term Tasks + LS . Project manager requires you to install and mount at least one instance of logger, because it uses logger to log time and other variables against projects @@ -54,30 +147,76 @@ with logger. This section sets up which logger instances you want to be fully integrated with project-manager, so that new project-manager projects appear in the logger instance. - After they have done this, you can go back to the previous page, - refresh it, and then add and edit logged hours. + Add a comment to: %title% + Add a process %task_term_lower% + Add a process %task_term_lower% (assignment) + Add a %project_term_lower% + Add %task_term_lower% dependencies + Administrator needs to set up logger integration + After they have done this, you can go + back to the previous page, refresh it, and then add and edit logged hours. Are you ready to sync with these URLs? Are you sure you want to delete this process: %one_line% + Are you sure you want to delete log entry with %value% %variable.unit% %variable.name% on %time_stamp%?' Are you sure you'd like to delete these %task_term_lower%s? + Assigned to project: %project_name% (be patient, this takes a long time, you can read the log files to see what's happening if you like.) Begin synchronization + Changes to project saved Click on one of the following items to set it up: + Comment: %title% saved Complete: %task_info.percent_complete%% + consult with people affected, and let them know deadlines are affected Date: %entries.time_stamp_pretty% + Days remaining: %task_info.days_remaining% + Deadline: %tasks.end_date_html;noquote% + Deadline: + Delete process: %one_line% + Delete process %task_term_lower% + Dependency changed <i>from</i> %old% (%old_dependency%) <i>to</i> %new% (%new_dependency%) depends on another %task_term_lower% - Enter 100% to close the %task_term_lower%, or less - to open it. + done with project update page (finally!) + Edit a process %task_term_lower% + Edit a %project_term_lower% + Edit a %task_term_lower% + Edit process instance + Edit project assignees + Edited %task_term% #%task_item_id%: %subject% + Enter 100% to close the %task_term_lower%, or less to open it. + Enter 100% to close the %task_term_lower%, or less to open it. + Enter a number for ordering the priority. 0 is the default and also the lowest priority. + For new tasks, a project must be passed in + Hard deadline changed <i>from</i> %date_old% <i>to</i> <b>%date_new%</b> Hours remaining: %task_info.hours_remaining% + If the row is in red, you are involved in this task. If it is in grey, then it has already been completed. + If yes, then this project has no deadline @import "%package_url%style-logger.css"; @import "%package_url%style.css"; - Logger is a package that lets you log time, expenses, and - other - Logger is a package that lets you log time, expenses, and - other + Last <input type="text" name="logger_days" value="%logger_days%" size="5" /> Days + This page allows you to link other package instances to this project manager + Log time for multiple tasks + Logger is a package that lets you log time, expenses, and + other . Project manager requires you to + install and mount at least one instance of logger, because it + uses logger to log time and other variables against projects + and tasks. However, you can have varying levels of integration + with logger. This section sets up which logger instances you + want to be fully integrated with project-manager, so that new + project-manager projects appear in the logger instance. + + Logger is a package that lets you log time, expenses, and other + Logger is a package that lets you log time, expenses, and other + Logger projects synchronized + look over these to plan ahead + %mod_username% assigned you to a new %task_term_lower% + %mod_username% edited this %task_term_lower% &nbsp;%num.rownum%&nbsp;&nbsp; + New %task_term% #%task_item_id%: %subject% (not current, select live version from the + (not current, select live version from the page) + Now set up dependencies Once you have chosen logger instances to be integrated with project-manager, you may have a lot of older project-manager projects that are not synchronized with @@ -86,7 +225,18 @@ with that instance. This does not add in logger projects to project-manager (although someone can certainly add that functionality if they wish). + Primary logger instance\ + Primary logger instance saved + Priority: %task_info.priority% + Process added. Now add process tasks. + Process changes saved. Now edit process tasks + Process task dependencies saved + Process %task_tasks% saved. + Project changed <i>from</i> %old% + Project changes saved + Project comment: %title% Project: %entries.project_name% + Project: '%project_name%' added %project.actual_hours_completed% of %project.estimated_hours_total% Projects can be categorized according to multiple 'trees' of categories. What this means is you can have multiple ways @@ -95,14 +245,28 @@ there is a bug in the categories package that prevents the context bar at the top of the screen from returning you to the project-manager pages. + %required_param% is a required parameter. + Saved change of process instance name + Saved project assignments based on task assignments + Saved tasks. You may need to refresh the screen to see the changes. + Select a %project_term% to assign this %task_term% to + Select a %project_term% to assign this process to + Send a process reminder Send email to assignees? set according to task assignments + %project_term% code + %project_term% goal + %project_term% name set up integration with logger + Set up logger integration skip adding dependencies Slack: %task_info.slack_time% Slack time: %task_info.slack_time% + Synchronize logger projects %task_info.estimated_hours_work_min% - %task_info.estimated_hours_work_max% hrs estimated %task_info.percent_complete%% complete + Task %task_item_id% Deleted + %task_term% and current status %task_term%s depending on this %task_term% %task_term%(s) depending on this %task_term% %task_term%s this depends on. @@ -123,6 +287,8 @@ of the UI. Shows what is in the database (currently, nothing!) There is currently a bug in this page where it will not allow you to remove values. You will have to do that through the parameters section. + This is a daily reminder of tasks that are assigned to you +You currently have <i>%cur_task_count%</i> tasks assigned to you This page allows you to update the deadlines of all the projects in your installation. It will take a while. This page will eventually allow you to log hours against multiple @@ -133,82 +299,189 @@ construction can begin&quot;. Entering dependencies is important because it allows the system to automatically compute schedules. However, you can Unknown group by column %group_by% + Updated who you will see on the task calendar + Updating projects and tasks + Use all tasks in this process: %use_link;noquote% Use this process: %use_link;noquote% User: %entries.user_chunk;noquote% Valid status codes, for example, 'Open' and 'Closed' + View %project_term_lower% roles + View %project_term_lower% workgroups + View this project version Week: %entries.time_stamp_week% When implemented, this page will allow you to view and edit the descriptions given to various dependency types (such as finish before start, etc..) Currently, the only dependency used is finish before start, so it's not exposed in the UI + Will continue automatically + Work estimate changed <i>from</i> %old% <i>to</i> %new% days + Work estimate changed <i>from</i> %old_estimated_hours_work% <i>to</i> %new_estimated_hours_work% hrs + Work estimate (max) changed <i>from</i> %old% <i>to</i> %new% days + Work estimate (max) changed <i>from</i> %old_estimated_hours_work_max% <i>to</i> %new_estimated_hours_work_max% hrs + Work estimate (min) changed <i>from</i> %old% <i>to</i> %new days% + Work estimate (min) changed <i>from</i> %old_estimated_hours_work_min% <i>to</i> %new_estimated_hours_work_min% hrs You can optionally log time worked here. - You may enter a %task_term_lower% that needs to - be completed before this %task_term_lower% + You have been assigned to a project: <a href=\"%project_url%\">%project_name%</a> (as %role%) + You may enter a %task_term_lower% that needs to be completed before this %task_term_lower% + You may now add to these process +%task_term_lower%s. Dependencies describe the order in which items must +be completed. For example, "the boards must be delivered before +construction can begin". Entering dependencies is important because it +allows the system to automatically compute schedules. However, you can +. + You may optionally enter a hard deadline You must choose a logger instance to be the primary logger linked in with project-manager. This is closely linked in with project-manager, so you can view reports of a project, etc. - You must enter a number here (make your best - guess) + You must enter a number here (make your best guess) + You must submit changes on this page or you will lose any data on this page + you need to start working on these soon to avoid affecting deadlines Max: Min: + n/a Name + Name: &nbsp;&nbsp;%project_term% + New Process + New %project_term% + New %task_term% + No + no hard deadline + No project passed in No UI + not set up + Nothing Now + Number of new tasks + Observer? + OK\ + One + One line description One process + One %project_term% Ongoing + Open Order + Overdue Tasks + Overview of process: page) Parameters + Party ID + Percent Complete\ + Plain Text + Please wait... + Pressing Tasks + Priority: + Priority + Process + Process deleted + Process Instances + Process instances + Process name + Process overview + Process status Process tasks: process tasks Processes Project: + project + Add <input type="hidden" name="process_id" value="%process_id%"><input type="text" name="number" size="3" value="1" /> new task(s) to this process + (not current, select live version from the <a href="task-revisions?task_id=%task_info.item_id%">task change</a> page) + Project Project categories + Project Changes Project information + Project is ongoing? + Project missing + Project name Project Search: + Project Search term %project_term;noquote%s %project_term%s Projection Projects + Quantity: Related %task_term%s + myself Remove myself + Removed + Removed: %old% + Role + Role ID Roles Search: Search: + Search Section Select process: + Select Project + Send email? Set up Skip this task? Slack: + Slack Slack: n/a + Slack time + Sort order Start + Starting... + Starts + Status: + Status Status types + Status update sent Subject: + Subject + Subject\ Subprojects Subtotal Subtotal Average Sync + Table Task + Task Calendar + Task calendar task change Task hours completed + Task overview + %task_term% Changes %task_term%s TASKS Tasks + Tasks linked Time: + Times used + Title + Title\ Total Total work required: + Type Update all + Updating status... + Unmounted + Use + Use a process + Use process User Users to view variables View + View all tasks + View customers View options View project changes + View Revisions View task changes + View this revision + View this task + Who Work + Work estimate Work required: + Workgroup ID Workgroups + Yes You may now add + Your role: Index: openacs-4/packages/project-manager/lib/assignee-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/assignee-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/assignee-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,28 @@ + +#project-manager.Assignees# + + + + + +   + + + + + +   + + Index: openacs-4/packages/project-manager/lib/assignee-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/assignee-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/assignee-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,77 @@ +# packages/project-manager/lib/people.tcl +# +# List of assignees +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: c3229143-2307-482b-9f72-e12bd256ac08 +# @cvs-id $Id: assignee-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +foreach required_param {project_id project_item_id} { + if {![info exists $required_param]} { + return -code error "[_ project-manager.lt_required_param_is_a_r]" + } +} +foreach optional_param {} { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +set user_id [auth::require_login] + +# There is no point showing an empty listbox, which happens if the user assigns all roles to himself. Doing it this way avoids another trip to the database. +set select_list_html [pm::role::project_select_list -select_name "role_id" -project_item_id $project_item_id -party_id $user_id] +if {[string compare $select_list_html ""]} { + + set assignee_add_self_widget "[_ project-manager.Add_myself_as]
[export_vars -form {project_item_id user_id return_url}]$select_list_html
" + set roles_listbox_p 1 +} else { + set roles_listbox_p 0 +} + +# Only need a 'remove myself' link if you are already assigned +set assigned_p [pm::project::assigned_p -project_item_id $project_item_id -party_id $user_id] +if {$assigned_p} { + set assignee_remove_self_url [export_vars -base project-assign-remove {project_item_id user_id return_url}] +} + +set assignee_edit_url [export_vars -base project-assign-edit {project_item_id return_url}] + + +db_multirow people project_people_query { } + +template::list::create \ + -name people \ + -multirow people \ + -key item_id \ + -elements { + user_name { + label "[_ project-manager.Who]" + display_template { + + @people.user_name@ + + } + } + role_name { + label "[_ project-manager.Role]" + } + } \ + -sub_class { + narrow + } \ + -filters { + party_id {} + orderby_subproject {} + orderby_tasks {} + } \ + -orderby { + role_id {orderby role_id} + default_value role_id,desc + } \ + -orderby_name orderby_subproject \ + -html { + width 100% + } + Index: openacs-4/packages/project-manager/lib/assignee-portlet.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/assignee-portlet.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/assignee-portlet.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,34 @@ + + + + + + + + + + + + SELECT + a.project_id, + r.one_line as role_name, + p.first_names || ' ' || p.last_name as user_name, + r.is_lead_p + FROM + pm_project_assignment a, + pm_roles r, + persons p + WHERE + a.role_id = r.role_id and + a.party_id = p.person_id and + project_id = :project_item_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :project_item_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + ORDER BY + r.role_id, p.first_names, p.last_name + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/categories-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/categories-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/categories-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,19 @@ + + + #project-manager.Categories# + + + + + +
+
    + +
  • @categories:item@ + +
+
+ +   + +
\ No newline at end of file Index: openacs-4/packages/project-manager/lib/categories-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/categories-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/categories-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,17 @@ +# packages/project-manager/lib/comments-portlet.tcl +# +# Comments Portlet +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: 4bf09cbf-1cdd-4346-9346-a4347faf76ba +# @cvs-id $Id: categories-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +# categories + +set categories [list] +set cat_list [category::get_mapped_categories $project_item_id] +foreach cat $cat_list { + lappend categories [category::get_name $cat] +} +set cat_length [llength $categories] \ No newline at end of file Index: openacs-4/packages/project-manager/lib/comments-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/comments-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/comments-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,11 @@ + +#project-manager.Comments# + + + @comments;noquote@ +
    +
  • @comments_link;noquote@ +
+ +   + Index: openacs-4/packages/project-manager/lib/comments-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/comments-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/comments-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,16 @@ +# packages/project-manager/lib/comments-portlet.tcl +# +# Comments Portlet +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: 4bf09cbf-1cdd-4346-9346-a4347faf76ba +# @cvs-id $Id: comments-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +# ---------------- +# general comments +# ---------------- +set comments [general_comments_get_comments -print_content_p 1 -print_attachments_p 1 $project_item_id "[ad_conn url]?project_item_id=$project_item_id"] + +set comments_link "[_ project-manager.Add_comment]" + Index: openacs-4/packages/project-manager/lib/customizations-portlet-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/customizations-portlet-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/customizations-portlet-oracle.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,31 @@ + + + + + + + + + + + + oracle + 8.1.6 + + + + + SELECT p.customer_id, + c.name as customer_name + FROM pm_projectsx p , + organizations c + WHERE p.customer_id = c.organization_id (+) and + p.project_id = :original_project_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :original_project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/customizations-portlet-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/customizations-portlet-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/customizations-portlet-postgresql.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,33 @@ + + + + + + + + + + + + postgresql + 7.2 + + + + + SELECT + p.customer_id, + c.name as customer_name + FROM + pm_projectsx p + LEFT JOIN organizations c ON p.customer_id = c.organization_id + WHERE + p.project_id = :original_project_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :original_project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/customizations-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/customizations-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/customizations-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,16 @@ + +#project-manager.Project_information# + + + + + + + +
#project-manager.Customer# + @custom.customer_name@ +
+ +   + + Index: openacs-4/packages/project-manager/lib/customizations-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/customizations-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/customizations-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,21 @@ +# packages/project-manager/lib/project-portlet.tcl +# +# Portlet for short project information +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: c502a3ed-d1c0-4217-832a-6ccd86256024 +# @cvs-id $Id: customizations-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + + + +# -------------------------CUSTOMIZATIONS-------------------------- +# If there are customizations, put them in a multirow called custom +# ----------------------------------------------------------------- + +db_1row custom_query { } -column_array custom + +set customer_link "[site_node::get_package_url -package_key organizations]one?organization_id=$custom(customer_id)" + +# end of customizations + Index: openacs-4/packages/project-manager/lib/customizations-portlet.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/customizations-portlet.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/customizations-portlet.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,29 @@ + + + + + + + + + + + + SELECT + to_char(p.planned_start_date,'YYYY-MM-DD HH24:MI') as planned_start_date, + to_char(p.planned_end_date,'YYYY-MM-DD HH24:MI') as planned_end_date, + p.ongoing_p, + to_char(p.estimated_finish_date,'YYYY-MM-DD HH24:MI') as estimated_finish_date, + to_char(p.earliest_finish_date,'YYYY-MM-DD HH24:MI') as earliest_finish_date, + to_char(p.latest_finish_date,'YYYY-MM-DD HH24:MI') as latest_finish_date, + p.actual_hours_completed, + p.estimated_hours_total + FROM + pm_projectsx p + WHERE + p.item_id = :project_item_id and + p.project_id = :project_id + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/date-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/date-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/date-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,38 @@ + +#project-manager.Dates# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#project-manager.Start#@project.planned_start_date@
#project-manager.Earliest_finish#@project.earliest_finish_date@#project-manager.Ongoing#
#project-manager.Latest_finish# + @project.latest_finish_date@ + #project-manager.Ongoing#
#project-manager.Task_hours_completed##project-manager.lt_projectactual_hours_c#
+ + + + Index: openacs-4/packages/project-manager/lib/date-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/date-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/date-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,23 @@ +# packages/project-manager/lib/project-portlet.tcl +# +# Portlet for short project information +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: c502a3ed-d1c0-4217-832a-6ccd86256024 +# @cvs-id $Id: date-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +set user_id [auth::require_login] + +# terminology and other parameters +set project_term [_ project-manager.Project] +set use_goal_p [parameter::get -parameter "UseGoalP" -default "1"] +set use_project_code_p [parameter::get -parameter "UseUserProjectCodesP" -default "1"] + +db_1row project_query { } -column_array project + +set project(planned_start_date) [lc_time_fmt $project(planned_start_date) "%x"] +set project(planned_end_date) [lc_time_fmt $project(planned_end_date) "%x"] +set project(estimated_finish_date) [lc_time_fmt $project(estimated_finish_date) "%x"] +set project(earliest_finish_date) [lc_time_fmt $project(earliest_finish_date) "%x"] +set project(latest_finish_date) [lc_time_fmt $project(latest_finish_date) "%x"] Index: openacs-4/packages/project-manager/lib/date-portlet.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/date-portlet.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/date-portlet.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,33 @@ + + + + + + + + + + + + SELECT + to_char(p.planned_start_date,'YYYY-MM-DD HH24:MI') as planned_start_date, + to_char(p.planned_end_date,'YYYY-MM-DD HH24:MI') as planned_end_date, + p.ongoing_p, + to_char(p.estimated_finish_date,'YYYY-MM-DD HH24:MI') as estimated_finish_date, + to_char(p.earliest_finish_date,'YYYY-MM-DD HH24:MI') as earliest_finish_date, + to_char(p.latest_finish_date,'YYYY-MM-DD HH24:MI') as latest_finish_date, + p.actual_hours_completed, + p.estimated_hours_total + FROM + pm_projectsx p + WHERE + p.item_id = :project_item_id and + p.project_id = :project_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/logger-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/logger-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/logger-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,31 @@ + +#project-manager.Logger# + + +
+ @variable_widget;noquote@ + @variable_exports;noquote@ + @day_widget;noquote@ + +
+ +   + + + + + +   + Index: openacs-4/packages/project-manager/lib/logger-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/logger-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/logger-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,44 @@ +# packages/project-manager/lib/logger-portlet.tcl +# +# Portlet with logger information +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-02 +# @arch-tag: 568fcb7a-e58c-4c1a-901d-a51c9d2ffe44 +# @cvs-id $Id: logger-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +foreach required_param {logger_project logger_days project_item_id pm_url return_url} { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} +foreach optional_param {master} { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +# we can also get the link to the logger instance. +set logger_url [pm::util::logger_url] +set logger_project_url "$logger_url?project_id=$logger_project" + +if {![exists_and_not_null logger_variable_id]} { + set logger_variable_id [logger::project::get_primary_variable \ + -project_id $logger_project] +} + +set variable_widget [logger::ui::variable_select_widget \ + -project_id $logger_project \ + -current_variable_id $logger_variable_id \ + -select_name logger_variable_id] + +set variable_exports [export_vars -form -entire_form -exclude {logger_variable_id logger_days }] + +set log_url "${logger_url}log?project_id=$logger_project&pm_project_id=$project_item_id&return_url=$return_url&variable_id=$logger_variable_id" + + +set today_ansi [clock format [clock scan today] -format "%Y-%m-%d"] +set then_ansi [clock format [clock scan "-$logger_days days"] -format "%Y-%m-%d"] + + +set day_widget "[_ project-manager.lt_Last_input_typetext_n]" Index: openacs-4/packages/project-manager/lib/portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,12 @@ + + + + + + + +
+ + @portlet_title;noquote@ + +
Index: openacs-4/packages/project-manager/lib/portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,19 @@ +# packages/project-manager/lib/portlet.tcl +# +# Portlet wrapper +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: c3461fd0-cb54-49bf-947a-8f710b3bd016 +# @cvs-id $Id: portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +foreach required_param {portlet_title} { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} +foreach optional_param {} { + if {![info exists $optional_param]} { + set $optional_param {} + } +} Index: openacs-4/packages/project-manager/lib/project-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/project-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/project-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,71 @@ + + + + + + + + + + Index: openacs-4/packages/project-manager/lib/subprojects.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/subprojects.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/subprojects.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,53 @@ +# packages/project-manager/lib/subprojects.tcl +# List all subprojects +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: 5b46d737-f74a-4069-9ae8-b833c6017a29 +# @cvs-id $Id: subprojects.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +foreach required_param {project_id project_item_id} { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} +foreach optional_param {} { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +# Subprojects, using list-builder --------------------------------- + +template::list::create \ + -name subproject \ + -multirow subproject \ + -key item_id \ + -elements { + project_name { + label "<#_Subject#>" + link_url_col item_url + link_html {title "[_ project-manager._View]" } + } + actual_hours_completed { + label "[_ project-manager._Hours]" + } + } \ + -sub_class { + narrow + } \ + -orderby { + project_name {orderby project_name} + default_value project_name,desc + } \ + -orderby_name orderby_subproject \ + -html { + width 100% + } + +db_multirow -extend {item_url} subproject project_subproject_query {} { + + set item_url [export_vars \ + -base "one" -override {{project_item_id $item_id}} {project_item_id}] +} + + Index: openacs-4/packages/project-manager/lib/subprojects.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/subprojects.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/subprojects.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,35 @@ + + + + + + + + + + + + SELECT + p.item_id, + p.project_id, + p.parent_id as folder_id, + p.object_type as content_type, + p.title as project_name, + p.project_code, + to_char(p.planned_start_date, 'Mon DD') as planned_start_date, + to_char(p.planned_end_date, 'Mon DD') as planned_end_date, + p.ongoing_p, + p.actual_hours_completed, + p.estimated_hours_total + FROM pm_projectsx p, cr_items i + WHERE p.project_id = i.live_revision and + p.parent_id = :project_item_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :project_item_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + ORDER BY p.title + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/lib/tasks-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/tasks-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/tasks-portlet.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,47 @@ + +@task_term@ + + + + + + + + + + + + + + + Index: openacs-4/packages/project-manager/lib/tasks-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/tasks-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/tasks-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,62 @@ +# packages/project-manager/lib/tasks.tcl +# +# Portlet with a list of tasks and the option to create new ones +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: a5851ee1-763c-468f-85a5-2204b8f9e411 +# @cvs-id $Id: tasks-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +foreach required_param {project_id project_item_id instance_id} { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} +foreach optional_param {} { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +# Set default format to table view +if {![info exists format]} { + set format "normal" +} + +set user_id [auth::require_login] +set task_term [_ project-manager.Task] +set hide_done_tasks_p [parameter::get -parameter "HideDoneTaskP" -default "1"] + + +set process_instance_options [pm::process::instance_options \ + -project_item_id $project_item_id \ + -process_instance_id $instance_id] + +if {[empty_string_p $process_instance_options]} { + set instance_html "" +} else { + + set instance_html " + + [export_vars -form -entire_form -exclude {instance_id}] + + +" +} + +# Process Information +set process_reminder_url [export_vars -base process-reminder {instance_id project_item_id return_url}] + + +# we do this so that the list builder templates don't add a where +# claus when instance_id is set. +if {[empty_string_p $instance_id]} { + unset instance_id +} + +set processes_html [pm::process::select_html] + + Index: openacs-4/packages/project-manager/lib/tasks-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/tasks-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/tasks-postgresql.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,148 @@ + + +postgresql7.2 + + + + SELECT + t.item_id as task_item_id, + t.parent_id as project_item_id, + t.title, + to_char(t.end_date,'YYYY-MM-DD HH24:MI') as end_date, + to_char(t.earliest_start,'YYYY-MM-DD HH24:MI') as earliest_start, + t.earliest_start - current_date as days_to_earliest_start, + to_char(t.earliest_start,'J') as earliest_start_j, + to_char(t.earliest_finish,'YYYY-MM-DD HH24:MI') as earliest_finish, + t.earliest_finish - current_date as days_to_earliest_finish, + to_char(t.latest_start,'YYYY-MM-DD HH24:MI') as latest_start, + t.latest_start - current_date as days_to_latest_start, + to_char(t.latest_start,'J') as latest_start_j, + to_char(current_date,'J') as today_j, + to_char(t.latest_finish,'YYYY-MM-DD HH24:MI') as latest_finish, + t.latest_finish - current_date as days_to_latest_finish, + to_char(t.end_date,'YYYY-MM-DD HH24:MI') as end_date, + t.end_date - current_date as days_to_end_date, + u.person_id, + u.first_names, + u.last_name, + t.percent_complete, + d.parent_task_id, + d.dependency_type, + t.estimated_hours_work, + t.estimated_hours_work_min, + t.estimated_hours_work_max, + t.actual_hours_worked, + s.status_type, + s.description as status_description, + r.is_lead_p, + t.priority, + p.customer_id, + p.logger_project, + p.title as project_name + FROM + (select tr.item_id, + ta.party_id, + ta.role_id, + tr.title, + tr.end_date, + tr.earliest_start, + tr.earliest_finish, + tr.latest_start, + tr.latest_finish, + tr.percent_complete, + tr.estimated_hours_work, + tr.estimated_hours_work_min, + tr.estimated_hours_work_max, + tr.actual_hours_worked, + tr.parent_id, + tr.revision_id, + tr.priority + from pm_tasks_revisionsx tr + LEFT JOIN + pm_task_assignment ta ON tr.item_id = ta.task_id) t + LEFT JOIN + persons u + ON + t.party_id = u.person_id + LEFT JOIN + pm_roles r + ON t.role_id = r.role_id, + cr_items i + LEFT JOIN + pm_task_dependency d + ON + i.item_id = d.task_id, + pm_tasks_active ti, + pm_task_status s, + pm_projectsx p + WHERE + t.parent_id = p.item_id and + t.revision_id = i.live_revision and + t.item_id = ti.task_id and + ti.status = s.status_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = ti.task_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + $done_clause + [template::list::filter_where_clauses -and -name tasks] + [template::list::orderby_clause -name tasks -orderby] + + + + + + select distinct task_item_id from (SELECT + t.item_id as task_item_id + FROM + (select tr.item_id, + ta.party_id, + ta.role_id, + tr.title, + tr.end_date, + tr.earliest_start, + tr.earliest_finish, + tr.latest_start, + tr.latest_finish, + tr.percent_complete, + tr.estimated_hours_work, + tr.estimated_hours_work_min, + tr.estimated_hours_work_max, + tr.actual_hours_worked, + tr.parent_id, + tr.revision_id, + tr.priority + from pm_tasks_revisionsx tr + LEFT JOIN + pm_task_assignment ta ON tr.item_id = ta.task_id) t + LEFT JOIN + persons u + ON + t.party_id = u.person_id + LEFT JOIN + pm_roles r + ON t.role_id = r.role_id, + cr_items i + LEFT JOIN + pm_task_dependency d + ON + i.item_id = d.task_id, + pm_tasks_active ti, + pm_task_status s, + pm_projectsx p + WHERE + t.parent_id = p.item_id and + t.revision_id = i.live_revision and + t.item_id = ti.task_id and + ti.status = s.status_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = ti.task_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + $done_clause + [template::list::filter_where_clauses -and -name tasks] + [template::list::orderby_clause -name tasks -orderby]) t + + + + Index: openacs-4/packages/project-manager/lib/tasks.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/tasks.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/tasks.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,32 @@ + + + + + +
+ #project-manager.Search#
+ + @hidden_vars;noquote@ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + Edit + + + + + Set permissions + + +   @project_term@ + + +
+ + + + + + + + + + + + + + + + + + + + + +
#project-manager.Name_1#@project.project_name@
#project-manager.Code_1#@project.project_code@
#project-manager.Goal_1#@project.goal@
#project-manager.Description_1#@project.description;noquote@
+
 
+ +  
+ Index: openacs-4/packages/project-manager/lib/project-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/project-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/project-portlet.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,44 @@ +# packages/project-manager/lib/project-portlet.tcl +# +# Portlet for short project information +# +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-01 +# @arch-tag: c502a3ed-d1c0-4217-832a-6ccd86256024 +# @cvs-id $Id: project-portlet.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +set user_id [auth::require_login] +# Set the link to the permissions page +set permissions_url "[site_node::closest_ancestor_package -package_key subsite]/permissions/one?[export_vars {{object_id $project_item_id}}]" + +# terminology and other parameters +set project_term [_ project-manager.Project] +set use_goal_p [parameter::get -parameter "UseGoalP" -default "1"] +set use_project_code_p [parameter::get -parameter "UseUserProjectCodesP" -default "1"] + +db_1row project_query { } -column_array project + +set richtext_list [list $project(description) $project(mime_type)] + +set project(description) [template::util::richtext::get_property html_value $richtext_list] + +set project_root [pm::util::get_root_folder] + +set project(planned_start_date) [lc_time_fmt $project(planned_start_date) "%x"] +set project(planned_end_date) [lc_time_fmt $project(planned_end_date) "%x"] +set project(estimated_finish_date) [lc_time_fmt $project(estimated_finish_date) "%x"] +set project(earliest_finish_date) [lc_time_fmt $project(earliest_finish_date) "%x"] +set project(latest_finish_date) [lc_time_fmt $project(latest_finish_date) "%x"] +set edit_url "[ad_conn package_url]add-edit?[export_url_vars project_item_id]" + +set forum_id [application_data_link::get_linked -from_object_id $project(item_id) -to_object_type "forums_forum"] +if {$forum_id != {}} { + db_1row forum_package_id {} + set project(forum_url) "[lindex [site_node::get_url_from_object_id -object_id $forum_package_id] 0][export_vars -base forum-view {forum_id}]" +} + +set folder_id [application_data_link::get_linked -from_object_id $project(item_id) -to_object_type "content_folder"] +if {$folder_id != {}} { + db_1row folder_package_id {} + set project(folder_url) "[lindex [site_node::get_url_from_object_id -object_id $folder_package_id] 0][export_vars -base index {folder_id}]" +} Index: openacs-4/packages/project-manager/lib/project-portlet.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/project-portlet.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/project-portlet.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,66 @@ + + + + + + + + + + + + SELECT + p.item_id, + p.project_id, + p.title as project_name, + p.project_code, + p.goal, + p.description, + p.mime_type, + to_char(p.planned_start_date,'YYYY-MM-DD HH24:MI') as planned_start_date, + to_char(p.planned_end_date,'YYYY-MM-DD HH24:MI') as planned_end_date, + p.logger_project, + p.ongoing_p, + i.live_revision, + to_char(p.estimated_finish_date,'YYYY-MM-DD HH24:MI') as estimated_finish_date, + to_char(p.earliest_finish_date,'YYYY-MM-DD HH24:MI') as earliest_finish_date, + to_char(p.latest_finish_date,'YYYY-MM-DD HH24:MI') as latest_finish_date, + p.actual_hours_completed, + p.estimated_hours_total, + p.parent_id, + s.status_type, + acs_permission__permission_p (:project_id,:user_id,'write') as write_p, + acs_permission__permission_p (:project_id,:user_id,'create') as create_p + FROM + pm_projectsx p, + cr_items i, + pm_project_status s + WHERE + p.item_id = :project_item_id and + p.project_id = :project_id and + p.item_id = i.item_id and + p.status_id = s.status_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + + + + + + select package_id as forum_package_id + from acs_objects + where object_id = :forum_id + + + + + + select package_id as folder_package_id + from acs_objects + where object_id = :folder_id + + + + Index: openacs-4/packages/project-manager/lib/projects-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/projects-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/projects-postgresql.xql 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,65 @@ + + + postgresql7.3 + + + + SELECT + p.item_id as project_item_id, + p.project_id, + p.parent_id as folder_id, + p.object_type as content_type, + p.title as project_name, + p.project_code, + to_char(p.planned_start_date, 'MM/DD/YY') as planned_start_date, + to_char(p.planned_end_date, 'MM/DD/YY') as planned_end_date, + p.ongoing_p, + c.category_id, + c.category_name, + p.earliest_finish_date - current_date as days_to_earliest_finish, + p.latest_finish_date - current_date as days_to_latest_finish, + p.actual_hours_completed, + p.estimated_hours_total, + to_char(p.estimated_finish_date, 'MM/DD/YY') as estimated_finish_date, + to_char(p.earliest_finish_date, 'MM/DD/YY') as earliest_finish_date, + to_char(p.latest_finish_date, 'MM/DD/YY') as latest_finish_date, + case when o.name is null then '--no customer--' else o.name + end as customer_name, + o.organization_id as customer_id + FROM pm_projectsx p + LEFT JOIN pm_project_assignment pa + ON p.item_id = pa.project_id + LEFT JOIN organizations o ON p.customer_id = + o.organization_id + LEFT JOIN ( + select + om.category_id, + om.object_id, + t.name as category_name + from + category_object_map om, + category_translations t, + categories ctg + where + om.category_id = t.category_id and + ctg.category_id = t.category_id and + ctg.deprecated_p = 'f') + c ON p.item_id = c.object_id, + cr_items i, + cr_folders f, + pm_project_status s + WHERE + p.project_id = i.live_revision and + s.status_id = p.status_id + and i.parent_id = f.folder_id + and f.package_id = :package_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = p.project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + [template::list::filter_where_clauses -and -name projects] + [template::list::orderby_clause -orderby -name projects] + + + + Index: openacs-4/packages/project-manager/lib/projects.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/projects.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/projects.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,32 @@ + + + + + + + + + + +
+ +
+ #project-manager.Search#
+ + @hidden_vars;noquote@ + +
+ + @category_select;noquote@ + + + +
+ + + +
+ + + + Index: openacs-4/packages/project-manager/lib/projects.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/projects.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/projects.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,256 @@ +# packages/project-manager/lib/project-list.tcl +# List of all projects +# @author Malte Sussdorff (sussdorff@sussdorff.de) +# @creation-date 2005-05-23 +# @arch-tag: 2f586eec-4768-42ef-a09a-4950ac00ddaf +# @cvs-id $Id: projects.tcl,v 1.1 2005/05/26 09:34:27 maltes Exp $ + +set required_param_list [list package_id] +set optional_param_list [list orderby status_id searchterm bulk_p action_p] +set optional_unset_list [list assignee_id] + +foreach required_param $required_param_list { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} + +foreach optional_param $optional_param_list { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +foreach optional_unset $optional_unset_list { + if {[info exists $optional_unset]} { + if {[empty_string_p [set $optional_unset]]} { + unset $optional_unset + } + } +} + +if {![info exists format]} { + set format "normal" +} + + +# --------------------------------------------------------------- # + +set exporting_vars { status_id category_id assignee_id orderby format } +set hidden_vars [export_vars -form $exporting_vars] + +# set up context bar +set context [list] + +# the unique identifier for this package +set user_id [ad_maybe_redirect_for_registration] + +# permissions +permission::require_permission -party_id $user_id -object_id $package_id -privilege read + +set write_p [permission::permission_p -object_id $package_id -privilege write] +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 [pm::util::get_root_folder -package_id $package_id] + +# Projects, using list-builder --------------------------------- + +# Set status +if {![exists_and_not_null status_id]} { + set status_where_clause "" + set status_id "" +} else { + set status_where_clause {p.status_id = :status_id} +} + +# We want to set up a filter for each category tree. + +set export_vars [export_vars -form {status_id orderby}] + +if {[exists_and_not_null category_id]} { + set temp_category_id $category_id + set pass_cat $category_id +} else { + set temp_category_id "" + unset category_id +} + +set category_select [pm::util::category_selects \ + -export_vars $export_vars \ + -category_id $temp_category_id \ + -package_id $package_id \ + ] + +set assignees_filter [pm::project::assignee_filter_select -status_id $status_id] + +if {![empty_string_p $searchterm]} { + + if {[regexp {([0-9]+)} $searchterm match query_digits]} { + set search_term_where " (upper(p.title) like upper('%$searchterm%') + or p.item_id = :query_digits) " + } else { + set search_term_where " upper(p.title) like upper('%$searchterm%')" + } +} else { + set search_term_where "" +} + + +set default_orderby [pm::project::index_default_orderby] + +if {[exists_and_not_null orderby]} { + pm::project::index_default_orderby \ + -set $orderby +} + +# Get url of the contacts package if it has been mounted for the links on the index page. +set contacts_url [util_memoize [list site_node::get_package_url -package_key contacts]] +if {[empty_string_p $contacts_url]} { + set contact_column "@projects.customer_name@" +} else { + set contact_column "@projects.customer_name@" +} + + +# Get the rows to display + +set row_list "project_name {}\n" +foreach element $elements { + append row_list "$element {}\n" +} + +if {$bulk_p == 1} { + set bulk_actions [list "[_ project-manager.Close]" "bulk-close" "[_ project-manager.Close_project]"] +} else { + set bulk_actions [list] +} + +if {$actions_p == 1} { + set actions [list "[_ project-manager.Add_project]" "add-edit" "[_ project-manager.Add_project]" "[_ project-manager.Customers]" "[site_node::get_package_url -package_key contacts]" "[_ project-manager.View_customers]"] +} else { + set actions [list] +} + +template::list::create \ + -name projects \ + -multirow projects \ + -selected_format $format \ + -key project_item_id \ + -elements { + project_name { + label "[_ project-manager.Project_name]" + link_url_col item_url + link_html { title "[_ project-manager.lt_View_this_project_ver]" } + } + customer_name { + label "[_ project-manager.Customer]" + display_template " +$contact_column@projects.customer_name@ +" + } + earliest_finish_date { + label "[_ project-manager.Earliest_finish]" + display_template "@projects.earliest_finish_date@@projects.earliest_finish_date@" + } + latest_finish_date { + label "[_ project-manager.Latest_Finish]" + display_template "@projects.latest_finish_date@@projects.latest_finish_date@" + } + actual_hours_completed { + label "[_ project-manager.Hours_completed]" + display_template "@projects.actual_hours_completed@/@projects.estimated_hours_total@" + } + category_id { + display_template "" + } + } \ + -actions $actions \ + -bulk_actions $bulk_actions \ + -sub_class { + narrow + } \ + -filters { + searchterm { + label "[_ project-manager.Search_1]" + where_clause {$search_term_where} + } + status_id { + label "[_ project-manager.Status_1]" + values {[pm::status::project_status_select]} + where_clause {$status_where_clause} + } + assignee_id { + label "[_ project-manager.Assignee]" + values {$assignees_filter} + where_clause {pa.party_id = :assignee_id} + } + category_id { + label Categories + where_clause {c.category_id = [join [value_if_exists category_id] ","]} + } + } \ + -orderby { + default_value $default_orderby + project_name { + label "[_ project-manager.Project_name]" + orderby_desc "upper(p.title) desc" + orderby_asc "upper(p.title) asc" + default_direction asc + } + customer_name { + label "[_ project-manager.Customer_Name]" + orderby_desc "upper(o.name) desc, earliest_finish_date desc" + orderby_asc "upper(o.name) asc, earliest_finish_date asc" + default_direction asc + } + category_id { + label "[_ project-manager.Categories]" + orderby_desc "c.category_name desc" + orderby_asc "c.category_name asc" + default_direction asc + } + earliest_finish_date { + label "[_ project-manager.Earliest_finish]" + orderby_desc "p.earliest_finish_date desc" + orderby_asc "p.earliest_finish_date asc" + default_direction asc + } + latest_finish_date { + label "[_ project-manager.Latest_finish]" + orderby_desc "p.latest_finish_date desc" + orderby_asc "p.latest_finish_date asc" + default_direction asc + } + actual_hours_completed { + label "[_ project-manager.Hours_completed]" + orderby_desc "p.actual_hours_completed desc" + orderby_asc "p.actual_hours_completed asc" + default_direction asc + } + } \ + -formats { + normal { + label "[_ project-manager.Table]" + layout table + row $row_list + } + csv { + label "[_ project-manager.CSV]" + output csv + page_size 0 + row $row_list + } + } \ + -orderby_name orderby \ + -html { + width 100% + } + +db_multirow -extend { item_url } projects project_folders { +} { + set item_url [export_vars -base "one" {project_item_id}] +} + +# ------------------------- END OF FILE ------------------------- # Index: openacs-4/packages/project-manager/lib/subprojects.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/subprojects.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/subprojects.adp 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,20 @@ + +#project-manager.Subprojects# +
+ + +  
+ +  
@instance_html;noquote@ 
+ +  
+ +  
+ + + + +
+
+ #project-manager.Search#
+ + @hidden_vars;noquote@ +
+ + +
+ + +
+ Index: openacs-4/packages/project-manager/lib/tasks.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/lib/tasks.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/lib/tasks.tcl 26 May 2005 09:34:27 -0000 1.1 @@ -0,0 +1,436 @@ +# Possible +# party_id +# role_id + +set required_param_list [list] +set optional_param_list [list orderby searchterm status_id page bulk_p actions_p] +set optional_unset_list [list party_id role_id project_item_id] + +foreach required_param $required_param_list { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} + +foreach optional_param $optional_param_list { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +foreach optional_unset $optional_unset_list { + if {[info exists $optional_unset]} { + if {[empty_string_p [set $optional_unset]]} { + unset $optional_unset + } + } +} + +if ![info exists page_size] { + set page_size 25 +} + +if ![info exists display_mode] { + set display_mode "all" +} + +if ![info exists format] { + set format "normal" +} + +if ![info exists package_id] { + set package_id [ad_conn package_id] +} + +# --------------------------------------------------------------- + +# Hide finished tasks. This should be added as a filter, but I did not +# have time to look it up in the howto. + +set hide_done_tasks_p [parameter::get \ + -parameter "HideDoneTaskP" -default "1"] + +if {$hide_done_tasks_p} { + set done_clause "and t.percent_complete < 100" +} else { + set done_clause "" +} + +# Deal with the fact that we might work with days instead of hours + +if {[parameter::get \ + -parameter "UseDayInsteadOfHour" -default "t"] == "t"} { + set days_string "days" +} else { + set days_string "hours" +} + +set exporting_vars {status_id party_id orderby} +set hidden_vars [export_vars \ + -form $exporting_vars] + +# how to get back here + +set return_url [ad_return_url \ + -qualified] +set logger_url [pm::util::logger_url] + +set contacts_url [util_memoize [list site_node::get_package_url -package_key contacts]] + + +# set up context bar + +set context [list "[_ project-manager.Tasks]"] + +# Get the currently available Status + +set status_list [db_list_of_lists get_status_values "select description, status_id from pm_task_status order by status_type desc, description"] + +# the unique identifier for this package + +set package_id [ad_conn package_id] +set user_id [ad_maybe_redirect_for_registration] + +# status defaults to open + +if {![exists_and_not_null status_id]} { + set status_where_clause "" +} else { + set status_where_clause {ts.status = :status_id} +} + +# permissions + +permission::require_permission -party_id $user_id -object_id $package_id -privilege read + +# Tasks, using list-builder --------------------------------- + +if {![empty_string_p $searchterm]} { + + # if we're searching, we disregard who we were searching for. + + if {[info exists party_id]} { + unset party_id + } + + if {[regexp {([0-9]+)} $searchterm match query_digits]} { + set search_term_where " (upper(t.title) like upper('%$searchterm%') + or t.item_id = :query_digits) " + } else { + set search_term_where " upper(t.title) like upper('%$searchterm%')" + } +} else { + set search_term_where "" +} + +set default_orderby [pm::task::default_orderby] + +if {[exists_and_not_null orderby]} { + pm::task::default_orderby \ + -set $orderby +} + +# Get the rows to display + +if {![exists_and_not_null elements]} { + set elements [list task_item_id title slack_time role latest_start latest_finish status_type remaining worked project_item_id percent_complete log_url edit_url] +} + +set filters [list \ + searchterm [list \ + label "[_ project-manager.Search_1]" \ + where_clause {$search_term_where} + ] \ + status_id [list \ + label "[_ project-manager.Status_1]" \ + values {$status_list} \ + where_clause "$status_where_clause" + ] \ + project_item_id [list \ + label "[_ project-manager.Project_1]" \ + values {[pm::project::get_list_of_open]} \ + where_clause "t.parent_id = :project_item_id" + ] + ] + +foreach element $elements { + + # Special treatement for days / hours + + if {$element == "remaining"} { + set element "${days_string}_remaining" + } + if {$element == "worked"} { + set element "actual_${days_string}_worked" + } + + # If we display the items of a single user, show the role. Otherwise + # show all players. + + if {$element == "role"} { + if {[exists_and_not_null party_id] && $user_id == $party_id} { + set element "role" + lappend filters [list role_id [list \ + label "[_ project-manager.Roles]" \ + values {[pm::role::select_list_filter]} \ + where_clause "ta.role_id = :role_id" + ] + ] + } else { + set element "party_id" + lappend filters [list party_id [list \ + label "[_ project-manager.People]" \ + values "[pm::task::assignee_filter_select -status_id $status_id]" \ + where_clause "ta.party_id = :party_id" + ] + ] + } + } + append row_list "$element {}\n" +} + +if {$bulk_p == 1} { + set bulk_actions [list "[_ project-manager.Log_hours]" "log-bulk" "[_ project-manager.lt_Log_hours_for_several]" "[_ project-manager.Edit_tasks]" "task-add-edit" "[_ project-manager.Edit_multiple_tasks]"] + set bulk_action_export_vars [list [list return_url]] +} else { + set bulk_actions [list] + set bulk_action_export_vars [list] +} + +if {$actions_p == 1} { + set actions [list "[_ project-manager.Add_task]" [export_vars \ + -base task-select-project {return_url}] "[_ project-manager.Add_a_task]"] +} else { + set actions [list] +} + +template::list::create \ + -name tasks \ + -multirow tasks \ + -key task_item_id \ + -selected_format $format \ + -elements { + task_item_id { + label "[_ project-manager.number]" + link_url_col item_url + link_html {title "[_ project-manager.lt_View_this_project_ver]" } + display_template {@tasks.task_item_id@} + } + status_type { + label "[_ project-manager.Done_1]" + display_template { + } + } + title { + label "[_ project-manager.Subject_1]" + } + parent_task_id { + label "[_ project-manager.Dep]" + display_template {@tasks.parent_task_id@ + } + } + priority { + label "[_ project-manager.Priority_1]" + display_template { + @tasks.priority@ + } + } + slack_time { + label "[_ project-manager.Slack_1]" + display_template "@tasks.slack_time@@tasks.slack_time@" + } + party_id { + label "[_ project-manager.Who]" + display_template { + @tasks.first_names@ @tasks.last_name@
+ } + } + role { + label "[_ project-manager.Role]" + } + earliest_start { + label "[_ project-manager.Earliest_Start]" + display_template "@tasks.earliest_start_pretty@@tasks.earliest_start_pretty@" + } + earliest_finish { + label "[_ project-manager.Earliest_Finish]" + display_template "@tasks.earliest_finish_pretty@@tasks.earliest_finish_pretty@" + } + latest_start { + label "[_ project-manager.Latest_Start]" + display_template "@tasks.latest_start_pretty@@tasks.latest_start_pretty@" + } + latest_finish { + label "[_ project-manager.Latest_Finish]" + display_template "@tasks.latest_finish_pretty@@tasks.latest_finish_pretty@" + } + end_date { + label "[_ project-manager.Deadline]" + display_template "@tasks.end_date_pretty@@tasks.end_date_pretty@" + } + status { + label "[_ project-manager.Status_1]" + } + days_remaining { + label "[_ project-manager.Days_work]" + html { + align right + } + } + hours_remaining { + label "[_ project-manager.Hours_remaining]" + html { + align right + } + } + actual_days_worked { + label "[_ project-manager.Days_worked]" + html { + align right + } + } + actual_hours_worked { + label "[_ project-manager.Hours_worked]" + html { + align right + } + } + project_item_id { + label "[_ project-manager.Project_1]" + display_col project_name + link_url_eval {[export_vars \ + -base one {project_item_id $tasks(project_item_id)}]} + hide_p {[ad_decode [exists_and_not_null project_item_id] 1 1 0]} + } + log_url { + label "[_ project-manager.Log]" + display_template {L} + } + edit_url { + label "[_ acs-kernel.common_Edit]" + display_template {E} + } + percent_complete { + label "[_ project-manager.Percent_complete]" + } + } \ + -sub_class { + narrow + } \ + -filters $filters \ + -orderby { + default_value $default_orderby + title { + label "[_ project-manager.Subject_1]" + orderby_desc "t.title desc, ts.task_item_id, u.first_names, u.last_name" + orderby_asc "t.title asc, ts.task_item_id, u.first_names, u.last_name" + default_direction asc + } + full_name { + label "[_ project-manager.Who]" + orderby_desc "u.first_names desc,u.last_name desc, ts.task_item_id" + orderby_asc "u.first_names, u.last_name, ts.task_item_id" + default_direction asc + } + description { + label "[_ project-manager.Description]" + orderby_desc "t.description desc, ts.task_item_id, u.first_names, u.last_name" + orderby_asc "t.description, ts.task_item_id, u.first_names, u.last_name" + default_direction asc + } + slack_time { + label "[_ project-manager.Slack_1]" + orderby_desc "(latest_start - earliest_start) desc, ts.task_item_id, u.first_names, u.last_name" + orderby_asc "(latest_start - earliest_start), ts.task_item_id, u.first_names, u.last_name" + default_direction asc + } + status { + label "[_ project-manager.Status_1]" + orderby_desc "status desc, t.latest_finish desc, ts.task_item_id, u.first_names, u.last_name" + orderby_asc "status asc, t.latest_finish desc, ts.task_item_id, u.first_names, u.last_name" + default_direction asc + } + end_date { + orderby_asc "end_date, task_item_id asc, u.first_names, u.last_name" + orderby_desc "end_date desc, task_item_id desc, u.first_names, u.last_name" + default_direction asc + } + } \ + -actions $actions \ + -bulk_actions $bulk_actions \ + -bulk_action_export_vars $bulk_action_export_vars \ + -page_size_variable_p 1 \ + -page_size $page_size \ + -page_flush_p 0 \ + -page_query_name tasks_pagination \ + -orderby_name orderby \ + -html { + width 100% + } \ + -formats { + normal { + label "[_ project-manager.Table]" + layout table + row $row_list + } + csv { + label "[_ project-manager.CSV]" + output csv + page_size 0 + row $row_list + } + } + +db_multirow -extend {item_url earliest_start_pretty earliest_finish_pretty end_date_pretty latest_start_pretty latest_finish_pretty slack_time edit_url log_url hours_remaining days_remaining actual_days_worked my_user_id user_url} tasks tasks {} { + set item_url [export_vars \ + -base "task-one" {{task_id $task_item_id}}] + + set log_url [export_vars \ + -base "${logger_url}log" {{project_id $logger_project} {pm_task_id $task_item_id} {pm_project_id $project_item_id} {return_url $return_url}}] + + set edit_url [export_vars \ + -base "task-add-edit" {{task_id $task_item_id} project_item_id return_url}] + + set earliest_start_pretty [lc_time_fmt $earliest_start "%x"] + set earliest_finish_pretty [lc_time_fmt $earliest_finish "%x"] + set latest_start_pretty [lc_time_fmt $latest_start "%x"] + set latest_finish_pretty [lc_time_fmt $latest_finish "%x"] + set end_date_pretty [lc_time_fmt $end_date "%x"] + + if {[exists_and_not_null earliest_start_j]} { + set slack_time [pm::task::slack_time \ + -earliest_start_j $earliest_start_j \ + -today_j $today_j \ + -latest_start_j $latest_start_j] + } else { + set slack_time "[_ project-manager.na]" + } + + if {![exists_and_not_null percent_complete]} { + set percent_complete 0 + } + + set hours_remaining \ + [pm::task::hours_remaining \ + -estimated_hours_work $estimated_hours_work \ + -estimated_hours_work_min $estimated_hours_work_min \ + -estimated_hours_work_max $estimated_hours_work_max \ + -percent_complete $percent_complete] + + set days_remaining \ + [pm::task::days_remaining \ + -estimated_hours_work $estimated_hours_work \ + -estimated_hours_work_min $estimated_hours_work_min \ + -estimated_hours_work_max $estimated_hours_work_max \ + -percent_complete $percent_complete] + + if {[exists_and_not_null actual_hours_worked]} { + set actual_days_worked [expr $actual_hours_worked / 24] + } else { + set actual_days_worked "" + } + set my_user_id $user_id + set user_url [export_vars -base "${contacts_url}contact" {{party_id $person_id}}] +} + +# ------------------------- END OF FILE ------------------------- Index: openacs-4/packages/project-manager/sql/postgresql/project-manager-functions-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/sql/postgresql/project-manager-functions-create.sql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/sql/postgresql/project-manager-functions-create.sql 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/sql/postgresql/project-manager-functions-create.sql 26 May 2005 09:34:28 -0000 1.3 @@ -528,6 +528,8 @@ values ( v_revision_id, p_end_date, p_percent_complete, p_estimated_hours_work, p_estimated_hours_work_min, p_estimated_hours_work_max, ''0'', p_priority); + update acs_objects set context_id = p_project_id where object_id = task_id; + PERFORM acs_permission__grant_permission( v_revision_id, p_creation_user, Index: openacs-4/packages/project-manager/sql/postgresql/project-manager-table-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/sql/postgresql/project-manager-table-create.sql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/sql/postgresql/project-manager-table-create.sql 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/sql/postgresql/project-manager-table-create.sql 26 May 2005 09:34:28 -0000 1.2 @@ -66,18 +66,6 @@ ); --- create the content type - select content_type__create_type ( - 'pm_project', -- content_type - 'content_revision', -- supertype - 'Project', -- pretty_name - 'Projects', -- pretty_plural - 'pm_projects', -- table_name - 'project_id', -- id_column - 'pm_project__name' -- name_method - ); - - -- other fields are added in too. See the -custom script. @@ -405,131 +393,6 @@ priority integer default 0 ); --- create the content type -select content_type__create_type ( - 'pm_task', -- content_type - 'content_revision', -- supertype - 'Task', -- pretty_name - 'Tasks', -- pretty_plural - 'pm_tasks_revisions', -- table_name (should this be pm_task?) - 'task_revision_id', -- id_column - 'pm_task__name' -- name_method -); - --- add in attributes - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'end_date', -- attribute_name - 'date', -- datatype - 'End date', -- pretty_name - 'End dates', -- pretty_plural - null, -- sort_order - null, -- default value - 'timestamptz' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'percent_complete', -- attribute_name - 'number', -- datatype - 'Percent complete', -- pretty_name - 'Percents complete', -- pretty_plural - null, -- sort_order - null, -- default value - 'numeric' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'estimated_hours_work', -- attribute_name - 'number', -- datatype - 'Estimated hours work', -- pretty_name - 'Estimated hours work', -- pretty_plural - null, -- sort_order - null, -- default value - 'numeric' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'estimated_hours_work_min', -- attribute_name - 'number', -- datatype - 'Estimated minimum hours', -- pretty_name - 'Estimated minimum hours', -- pretty_plural - null, -- sort_order - null, -- default value - 'numeric' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'estimated_hours_work_max', -- attribute_name - 'number', -- datatype - 'Estimated maximum hours', -- pretty_name - 'Estimated maximum hours', -- pretty_plural - null, -- sort_order - null, -- default value - 'numeric' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'actual_hours_worked', -- attribute_name - 'number', -- datatype - 'Actual hours worked', -- pretty_name - 'Actual hours worked', -- pretty_plural - null, -- sort_order - null, -- default value - 'numeric' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'earliest_start', -- attribute_name - 'date', -- datatype - 'Earliest start date', -- pretty_name - 'Earliest start dates', -- pretty_plural - null, -- sort_order - null, -- default value - 'timestamptz' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'earliest_finish', -- attribute_name - 'date', -- datatype - 'Earliest finish date', -- pretty_name - 'Earliest finish dates', -- pretty_plural - null, -- sort_order - null, -- default value - 'timestamptz' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'latest_start', -- attribute_name - 'date', -- datatype - 'Latest start date', -- pretty_name - 'Latest start dates', -- pretty_plural - null, -- sort_order - null, -- default value - 'timestamptz' -- column_spec -); - -select content_type__create_attribute ( - 'pm_task', -- content_type - 'latest_finish', -- attribute_name - 'date', -- datatype - 'Latest finish date', -- pretty_name - 'Latest finish dates', -- pretty_plural - null, -- sort_order - null, -- default value - 'timestamptz' -- column_spec -); - - - create table pm_task_logger_proj_map ( task_item_id integer constraint pm_task_log_proj_map_t_nn @@ -668,6 +531,4 @@ comment on table pm_users_viewed is ' Used to keep track of what users to see on the task calendar and other views. -'; - -\i project-manager-custom-create.sql +'; \ No newline at end of file Index: openacs-4/packages/project-manager/tcl/application-data-link-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-data-link-procs-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-data-link-procs-oracle.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,37 @@ + + +oracle8.0 + + + + begin + :1 = acs_rel.new ( + rel_id => null, + rel_type => 'application_data_link', + object_id_one => :this_object_id, + object_id_two => :target_object_id, + context_id => :this_object_id, + creation_user => :user_id, + creation_ip => :id_addr + ); + end; + + + + + + begin + :1 = acs_rel.new ( + rel_id => null, + rel_type => 'application_data_link', + object_id_one => :target_object_id, + object_id_two => :this_object_id, + context_id => :this_object_id, + creation_user => :user_id, + creation_ip => :id_addr + ); + end; + + + + Index: openacs-4/packages/project-manager/tcl/application-data-link-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-data-link-procs-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-data-link-procs-postgresql.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,33 @@ + + +postgresql7.2 + + + + select acs_rel__new ( + null, + 'application_data_link', + :this_object_id, + :target_object_id, + :this_object_id, + :user_id, + :id_addr + ) + + + + + + select acs_rel__new ( + null, + 'application_data_link', + :target_object_id, + :this_object_id, + :this_object_id, + :user_id, + :id_addr + ) + + + + Index: openacs-4/packages/project-manager/tcl/application-data-link-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-data-link-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-data-link-procs.tcl 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,43 @@ +ad_library { + + Procs of application data linking + + @author Timo Hentschel (timo@timohentschel.de) + @creation-date 2005-05-23 +} + +namespace eval application_data_link {} + +ad_proc -public application_data_link::new { + -this_object_id:required + -target_object_id:required +} { + set user_id [ad_conn user_id] + set id_addr [ad_conn peeraddr] + + db_exec_plsql create_forward_link {} + db_exec_plsql create_backward_link {} +} + +ad_proc -public application_data_link::delete_links { + -object_id:required +} { + set rel_ids [db_list linked_objects {}] + + foreach rel_id $rel_ids { + relation_remove $rel_id + } +} + +ad_proc -public application_data_link::get { + -object_id:required +} { + return [db_list linked_objects {}] +} + +ad_proc -public application_data_link::get_linked { + -from_object_id:required + -to_object_type:required +} { + return [db_list linked_object {}] +} Index: openacs-4/packages/project-manager/tcl/application-data-link-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-data-link-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-data-link-procs.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,34 @@ + + + + + + select rel_id + from acs_rels + where rel_type = 'application_data_link' + and (object_id_one = :object_id + or object_id_two = :object_id) + + + + + + select object_id_two + from acs_rels + where object_id_one = :package_id + and rel_type = 'application_data_link' + + + + + + select o.object_id + from acs_rels r, acs_objects o + where r.object_id_one = :from_object_id + and r.object_id_two = o.object_id + and o.object_type = :to_object_type + and r.rel_type = 'application_data_link' + + + + Index: openacs-4/packages/project-manager/tcl/application-link-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-link-procs-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-link-procs-oracle.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,37 @@ + + +oracle8.0 + + + + begin + :1 = acs_rel.new ( + rel_id => null, + rel_type => 'application_link', + object_id_one => :this_package_id, + object_id_two => :target_package_id, + context_id => :this_package_id, + creation_user => :user_id, + creation_ip => :id_addr + ); + end; + + + + + + begin + :1 = acs_rel.new ( + rel_id => null, + rel_type => 'application_link', + object_id_one => :target_package_id, + object_id_two => :this_package_id, + context_id => :this_package_id, + creation_user => :user_id, + creation_ip => :id_addr + ); + end; + + + + Index: openacs-4/packages/project-manager/tcl/application-link-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-link-procs-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-link-procs-postgresql.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,33 @@ + + +postgresql7.2 + + + + select acs_rel__new ( + null, + 'application_link', + :this_package_id, + :target_package_id, + :this_package_id, + :user_id, + :id_addr + ) + + + + + + select acs_rel__new ( + null, + 'application_link', + :target_package_id, + :this_package_id, + :this_package_id, + :user_id, + :id_addr + ) + + + + Index: openacs-4/packages/project-manager/tcl/application-link-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-link-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-link-procs.tcl 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,43 @@ +ad_library { + + Procs of application linking + + @author Timo Hentschel (timo@timohentschel.de) + @creation-date 2005-05-23 +} + +namespace eval application_link {} + +ad_proc -public application_link::new { + -this_package_id:required + -target_package_id:required +} { + set user_id [ad_conn user_id] + set id_addr [ad_conn peeraddr] + + db_exec_plsql create_forward_link {} + db_exec_plsql create_backward_link {} +} + +ad_proc -public application_link::delete_links { + -package_id:required +} { + set rel_ids [db_list linked_packages {}] + + foreach rel_id $rel_ids { + relation_remove $rel_id + } +} + +ad_proc -public application_link::get { + -package_id:required +} { + return [db_list linked_packages {}] +} + +ad_proc -public application_link::get_linked { + -from_package_id:required + -to_package_key:required +} { + return [db_list linked_package {}] +} Index: openacs-4/packages/project-manager/tcl/application-link-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/Attic/application-link-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/application-link-procs.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,34 @@ + + + + + + select rel_id + from acs_rels + where rel_type = 'application_link' + and (object_id_one = :package_id + or object_id_two = :package_id) + + + + + + select object_id_two + from acs_rels + where object_id_one = :package_id + and rel_type = 'application_link' + + + + + + select p.package_id + from acs_rels r, apm_packages p + where r.object_id_one = :from_package_id + and r.object_id_two = p.package_id + and p.package_key = :to_package_key + and r.rel_type = 'application_link' + + + + Index: openacs-4/packages/project-manager/tcl/install-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/install-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/install-procs.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/install-procs.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -10,18 +10,59 @@ @cvs-id $Id$ } - namespace eval pm::install {} +ad_proc -private pm::install::package_install { +} { + Package install callback proc. +} { + ## Create pm_project + dtype::create -name {pm_project} -supertype {content_revision} -pretty_name {Project} -pretty_plural {Projects} -table_name {pm_projects} -id_column {project_id} + content::type::attribute::new -content_type {pm_project} -attribute_name {project_code} -datatype {string} -pretty_name {Project code} -pretty_plural {Project codes} -column_spec {varchar(255)} + content::type::attribute::new -content_type {pm_project} -attribute_name {goal} -datatype {string} -pretty_name {Project goal} -pretty_plural {Project goals} -column_spec {varchar(4000)} + content::type::attribute::new -content_type {pm_project} -attribute_name {planned_start_date} -datatype {date} -pretty_name {Planned start date} -pretty_plural {Planned start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {planned_end_date} -datatype {date} -pretty_name {Planned end date} -pretty_plural {Planned end dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_start_date} -datatype {date} -pretty_name {Actual start date} -pretty_plural {Actual start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_end_date} -datatype {date} -pretty_name {Actual end date} -pretty_plural {Actual end dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {status_id} -datatype {integer} -pretty_name {Status} -pretty_plural {Status} -column_spec {integer} + content::type::attribute::new -content_type {pm_project} -attribute_name {ongoing_p} -datatype {string} -pretty_name {Project ongoing} -pretty_plural {Projects ongoing} -column_spec {char(1)} + content::type::attribute::new -content_type {pm_project} -attribute_name {estimated_finish_date} -datatype {date} -pretty_name {Estimated finish date} -pretty_plural {Estimated finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {earliest_finish_date} -datatype {date} -pretty_name {Earliest finish date} -pretty_plural {Earliest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {latest_finish_date} -datatype {date} -pretty_name {Latest finish date} -pretty_plural {Latest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_hours_completed} -datatype {number} -pretty_name {Actual hours completed} -pretty_plural {Actual hours completed} -column_spec {numeric} + content::type::attribute::new -content_type {pm_project} -attribute_name {estimated_hours_total} -datatype {number} -pretty_name {Estimated hours total} -pretty_plural {Estimated hours total} -column_spec {numeric} + content::type::attribute::new -content_type {pm_project} -attribute_name {logger_project} -datatype {integer} -pretty_name {Linked logger project} -pretty_plural {Linked logger projects} -column_spec {integer} + content::type::attribute::new -content_type {pm_project} -attribute_name {customer_id} -datatype {integer} -pretty_name {Customer} -pretty_plural {Customers} -column_spec {integer} + ## Create pm_task + dtype::create -name {pm_task} -supertype {content_revision} -pretty_name {Task} -pretty_plural {Tasks} -table_name {pm_tasks_revisions} -id_column {task_revision_id} + content::type::attribute::new -content_type {pm_task} -attribute_name {end_date} -datatype {date} -pretty_name {End date} -pretty_plural {End dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_task} -attribute_name {percent_complete} -datatype {number} -pretty_name {Percent complete} -pretty_plural {Percents complete} -column_spec {numeric} + content::type::attribute::new -content_type {pm_task} -attribute_name {estimated_hours_work} -datatype {number} -pretty_name {Estimated hours work} -pretty_plural {Estimated hours work} -column_spec {numeric} + content::type::attribute::new -content_type {pm_task} -attribute_name {estimated_hours_work_min} -datatype {number} -pretty_name {Estimated minimum hours} -pretty_plural {Estimated minimum hours} -column_spec {numeric} + content::type::attribute::new -content_type {pm_task} -attribute_name {estimated_hours_work_max} -datatype {number} -pretty_name {Estimated maximum hours} -pretty_plural {Estimated maximum hours} -column_spec {numeric} + content::type::attribute::new -content_type {pm_task} -attribute_name {actual_hours_worked} -datatype {number} -pretty_name {Actual hours worked} -pretty_plural {Actual hours worked} -column_spec {numeric} + content::type::attribute::new -content_type {pm_task} -attribute_name {earliest_start} -datatype {date} -pretty_name {Earliest start date} -pretty_plural {Earliest start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_task} -attribute_name {earliest_finish} -datatype {date} -pretty_name {Earliest finish date} -pretty_plural {Earliest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_task} -attribute_name {latest_start} -datatype {date} -pretty_name {Latest start date} -pretty_plural {Latest start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_task} -attribute_name {latest_finish} -datatype {date} -pretty_name {Latest finish date} -pretty_plural {Latest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_task} -attribute_name {priority} -datatype {integer} -pretty_name {Priority} -pretty_plural {Priorities} -column_spec {integer} + + # Create new relationship type for Application Links + rel_types::new "application_link" "Application Link" "Application Links" apm_package 0 "" apm_package 0 "" + rel_types::new "application_data_link" "Application Data Link" "Application Data Links" acs_object 0 "" acs_object 0 "" +} + ad_proc -private pm::install::package_instantiate { {-package_id:required} } { Package instantiation callback proc. } { - # Create the project repository - - # db_exec_plsql create_project { } + # create a content folder + set folder_id [content::folder::new -name "project_manager_$package_id" -package_id $package_id ] + # register the allowed content types for a folder + content::folder::register_content_type -folder_id $folder_id -content_type {pm_project} -include_subtypes t + content::folder::register_content_type -folder_id $folder_id -content_type {pm_task} -include_subtypes t } ad_proc -private pm::install::package_uninstantiate { @@ -36,3 +77,167 @@ # ns_log Debug "pm::install::package_uninstantiate delete folder_id: $folder_id" # db_exec_plsql delete_root_folder { } } + +ad_proc -public -callback pm::project_new { + {-package_id:required} + {-project_id:required} +} { +} + +ad_proc -public -callback pm::project_edit { + {-package_id:required} + {-project_id:required} +} { +} + +ad_proc -public -callback pm::project_delete { + {-package_id:required} + {-project_id:required} +} { +} + +ad_proc -public -callback pm::task_new { + {-package_id:required} + {-task_id:required} +} { +} + +ad_proc -public -callback pm::task_edit { + {-package_id:required} + {-task_id:required} +} { +} + +ad_proc -public -callback pm::task_delete { + {-package_id:required} + {-task_id:required} +} { +} + +ad_proc -public -callback forum::message_new -impl project_manager { + {-package_id:required} + {-message_id:required} +} { + create a new task for each new forum message +} { + # make sure this is not a reply message + forum::message::get -message_id $message_id -array message + if {$message_id == $message(root_message_id)} { + set user_id [ad_conn user_id] + set ip_addr [ad_conn peeraddr] + + # get linked projects to forum + foreach project_item_id [application_data_link::get_linked -from_object_id $message(forum_id) -to_object_type "pm_project"] { + db_1row pm_package_id { + select package_id as pm_package_id + from acs_objects + where object_id = :project_item_id + } + + set task_id [pm::task::new \ + -project_id $project_item_id \ + -title $message(subject) \ + -creation_user $user_id \ + -creation_ip $ip_addr \ + -package_id $pm_package_id \ + -no_callback] + + set task_item_id [pm::task::get_item_id -task_id $task_id] + + application_data_link::new -this_object_id $message_id -target_object_id $task_item_id + } + } +} + +ad_proc -public -callback contact::contact_form -impl project_manager { + {-package_id:required} + {-form:required} + {-object_type:required} +} { + If organisation, ask to create new project +} { + if { $object_type != "person" } { + ad_form -extend -name $form -form { + {create_project_p:text(radio) \ + {label "[_ project-manager.create_project]"} \ + {options {{[_ acs-kernel.common_Yes] "t"} {[_ acs-kernel.common_no] "f"}}} \ + {values "f"} + } + } + } +} + +ad_proc -public -callback contact::contact_new_form -impl project_manager { + {-package_id:required} + {-contact_id:required} + {-form:required} + {-object_type:required} +} { + create a new project for new organization +} { + if { $object_type != "person" } { + upvar create_project_p create_project_p + + if {$create_project_p == "t"} { + db_1row organisation_data { + select o.name, ao.creation_user, ao.creation_ip + from organizations o, acs_objects ao + where o.organization_id = :contact_id + and ao.object_id = o.organization_id + } + + foreach pm_package_id [application_link::get_linked -from_package_id $package_id -to_package_key "project-manager"] { + set project_id [pm::project::new \ + -project_name $name \ + -status_id 1 \ + -organization_id $contact_id \ + -creation_user $creation_user \ + -creation_ip $creation_ip \ + -package_id $pm_package_id \ + -no_callback] + + set project_item_id [pm::project::get_project_item_id -project_id $project_id] + + application_data_link::new -this_object_id $contact_id -target_object_id $project_item_id + } + } + } +} + +ad_proc -private pm::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 { + 2.72a1 3.0d1 { + db_transaction { + content::type::attribute::new -content_type {pm_project} -attribute_name {project_code} -datatype {string} -pretty_name {Project code} -pretty_plural {Project codes} -column_spec {varchar(255)} + content::type::attribute::new -content_type {pm_project} -attribute_name {goal} -datatype {string} -pretty_name {Project goal} -pretty_plural {Project goals} -column_spec {varchar(4000)} + content::type::attribute::new -content_type {pm_project} -attribute_name {planned_start_date} -datatype {date} -pretty_name {Planned start date} -pretty_plural {Planned start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {planned_end_date} -datatype {date} -pretty_name {Planned end date} -pretty_plural {Planned end dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_start_date} -datatype {date} -pretty_name {Actual start date} -pretty_plural {Actual start dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_end_date} -datatype {date} -pretty_name {Actual end date} -pretty_plural {Actual end dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {status_id} -datatype {integer} -pretty_name {Status} -pretty_plural {Status} -column_spec {integer} + content::type::attribute::new -content_type {pm_project} -attribute_name {ongoing_p} -datatype {string} -pretty_name {Project ongoing} -pretty_plural {Projects ongoing} -column_spec {char(1)} + content::type::attribute::new -content_type {pm_project} -attribute_name {estimated_finished_date} -datatype {date} -pretty_name {Estimated finish date} -pretty_plural {Estimated finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {earliest_finish_date} -datatype {date} -pretty_name {Earliest finish date} -pretty_plural {Earliest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {latest_finish_date} -datatype {date} -pretty_name {Latest finish date} -pretty_plural {Latest finish dates} -column_spec {timestamptz} + content::type::attribute::new -content_type {pm_project} -attribute_name {actual_hours_completed} -datatype {number} -pretty_name {Actual hours completed} -pretty_plural {Actual hours completed} -column_spec {numeric} + content::type::attribute::new -content_type {pm_project} -attribute_name {estimated_hours_total} -datatype {number} -pretty_name {Estimated hours total} -pretty_plural {Estimated hours total} -column_spec {numeric} + content::type::attribute::new -content_type {pm_project} -attribute_name {logger_project} -datatype {integer} -pretty_name {Linked logger project} -pretty_plural {Linked logger projects} -column_spec {integer} + + content::type::attribute::new -content_type {pm_task} -attribute_name {priority} -datatype {integer} -pretty_name {Priority} -pretty_plural {Priorities} -column_spec {integer} + } + } + + 3.0d1 3.0d2 { + rel_types::new "application_link" "Application Link" "Application Links" apm_package 0 "" apm_package 0 "" + } + 3.0d2 3.0d3 { + rel_types::new "application_data_link" "Application Data Link" "Application Data Links" acs_object 0 "" acs_object 0 "" + } + } +} Index: openacs-4/packages/project-manager/tcl/process-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/process-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/process-procs.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/process-procs.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -424,7 +424,7 @@ set task_term \ [parameter::get -parameter "Taskname" -default "Task"] set task_term_lower \ - [parameter::get -parameter "taskname" -default "task"] + [_ project-manager.task] set use_uncertain_completion_times_p \ [parameter::get -parameter "UseUncertainCompletionTimesP" -default "0"] @@ -475,24 +475,24 @@ foreach to_address $to_addresses { set notification_text "${intro_text} -

Process overview

+

[_ project-manager.Process_overview]

- + - +
Project:[_ project-manager.Project] $project_name (\#$project_item_id)
Overview of process:[_ project-manager.Overview_of_process] $process_name
-

$task_term and current status

+

[_ project-manager.lt_task_term_and_current]

- - - " + + + " foreach ti $task_info { set task_item_id [lindex $ti 0] @@ -552,7 +552,7 @@ } # build table of current status - append notification_text "
$task_term nameSlack timeLeadLatest finish[_ project-manager.Slack_time][_ project-manager.Lead][_ project-manager.Latest_finish]

If the row is in red, you are involved in this task. If it is in grey, then it has already been completed.

" + append notification_text "

[_ project-manager.lt_If_the_row_is_in_red_]

" pm::util::email \ -to_addr $to_address \ Index: openacs-4/packages/project-manager/tcl/project-manager-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-manager-procs-oracle.xql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/project-manager-procs-oracle.xql 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/project-manager-procs-oracle.xql 26 May 2005 09:34:29 -0000 1.3 @@ -40,5 +40,11 @@ + + + select pm_project.get_root_folder (:package_id, 'f') + + + Index: openacs-4/packages/project-manager/tcl/project-manager-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-manager-procs-postgresql.xql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/project-manager-procs-postgresql.xql 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/project-manager-procs-postgresql.xql 26 May 2005 09:34:29 -0000 1.3 @@ -53,5 +53,11 @@ ORDER BY name + + + + select pm_project__get_root_folder (:package_id, 'f') + + Index: openacs-4/packages/project-manager/tcl/project-manager-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-manager-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/project-manager-procs.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/project-manager-procs.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -314,7 +314,7 @@ if {[empty_string_p $return_val]} { ns_log Error "Project-manager: need to set up LoggerPrimaryURL in parameters" - util_user_message -message "Administrator needs to set up logger integration" + util_user_message -message "[_ project-manager.lt_Administrator_needs_t]" } return $return_val @@ -484,7 +484,7 @@ set project_url [pm::project::url \ -project_item_id $object_id] - set subject "Project comment: $title" + set subject "[_ project-manager.lt_Project_comment_title]" # convert to HTML set richtext_list [list $comment $mime_type] @@ -656,7 +656,7 @@ return "" } - set return_val "
$export_vars
$category_select" append return_val "
" @@ -753,3 +753,83 @@ return $assignees } + +ad_proc -private pm::util::get_root_folder { + {-package_id ""} +} { + Returns the Root folder of the project manager instance +} { + set project_root [db_exec_plsql get_root_folder { }] + return $project_root +} + +ad_proc -public pm::util::get_project_name { + {-project_id ""} + {-project_item_id ""} +} { + Returns the project name +} { + + if {![exists_and_not_null project_item_id] && \ + ![exists_and_not_null project_id]} { + + ad_complain "[_ project-manager.No_project_passed_in]" + + } + + if {[empty_string_p $project_id]} { + set project_id [pm::project::get_project_id -project_item_id $project_item_id] + } + + return [util_memoize [list pm::util::get_project_name_not_cached -project_id $project_id] 600] +} + +ad_proc -private pm::util::get_project_name_not_cached { + {-project_id:required} +} { + Returns the project name +} { + set project_name [db_string get_project_name { }] + return $project_name +} + +ad_proc -public pm::util::get_parent_id { + {-project_item_id:required} + {-project_id:required} +} { + Returns the parent_id +} { + return [util_memoize [list pm::util::get_parent_id_not_cached -project_item_id $project_item_id -project_id $project_id] 600] +} + +ad_proc -private pm::util::get_parent_id_not_cached { + {-project_item_id:required} + {-project_id:required} +} { + Returns the parent_id +} { + set parent_id [db_string get_project_name { }] + return $parent_id +} + +ad_proc -public pm::util::closed_p { + {-project_id ""} + {-project_item_id ""} + +} { + Returns 1 if the project is closed +} { + + if {![exists_and_not_null project_item_id] && \ + ![exists_and_not_null project_id]} { + + ad_complain "[_ project-manager.No_project_passed_in]" + + } + + if {[empty_string_p $project_id]} { + set project_id [pm::project::get_project_id -project_item_id $project_item_id] + } + + return [db_0or1row project_closed_p "select 1 from pm_projectsx where project_id = :project_id and status_id in (select status_id from pm_task_status where status_type ='c')"] +} \ No newline at end of file Index: openacs-4/packages/project-manager/tcl/project-manager-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-manager-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/tcl/project-manager-procs.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,30 @@ + + + + + + + + + + + + select p.title as project_name + FROM + pm_projectsx p + WHERE + project_id = :project_id + + + + + select p.parent_id + FROM + pm_projectsx p + WHERE + p.item_id = :project_item_id and + p.project_id = :project_id + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/tcl/project-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-procs-oracle.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/tcl/project-procs-oracle.xql 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/tcl/project-procs-oracle.xql 26 May 2005 09:34:29 -0000 1.2 @@ -184,4 +184,16 @@ + + + SELECT + party_id, + role_id + FROM + pm_project_assignment a + WHERE + project_id = :project_item_id + + + Index: openacs-4/packages/project-manager/tcl/project-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-procs-postgresql.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/tcl/project-procs-postgresql.xql 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/tcl/project-procs-postgresql.xql 26 May 2005 09:34:29 -0000 1.2 @@ -245,4 +245,16 @@ + + + SELECT + party_id, + role_id + FROM + pm_project_assignment a + WHERE + project_id = :project_item_id + + + Index: openacs-4/packages/project-manager/tcl/project-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/project-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/project-procs.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/project-procs.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -195,6 +195,7 @@ -creation_user:required -creation_ip:required -package_id:required + -no_callback:boolean } { Creates a new project @@ -248,12 +249,26 @@ -party_id $creation_user \ -send_email_p "f" + # Set the parent_id to the package_id if this is not a subproject. + # Otherwise permission inheritance won't work. + # Update the context_id + if {[empty_string_p $parent_id]} { + set parent_id $package_id + } + + db_dml update_context_id "update acs_objects set context_id = :parent_id where object_id = :project_item_id" + + if {!$no_callback_p} { + callback pm::project_new -package_id $package_id -project_id $project_item_id + } + return $project_revision } ad_proc -public pm::project::delete { -project_item_id:required + -no_callback:boolean } { Stub for project deletion @@ -266,7 +281,10 @@ @error } { - + if {!$no_callback_p} { + callback pm::project_delete -package_id [ad_conn package_id] -project_id $project_item_id + } + # should we delete the logger project as well? } @@ -291,6 +309,7 @@ -creation_user:required -creation_ip:required -package_id:required + -no_callback:boolean } { Stub for project edit @@ -349,6 +368,10 @@ ); "] + if {!$no_callback_p} { + callback pm::project_edit -package_id $package_id -project_id $project_item_id + } + return $returnval } @@ -1757,9 +1780,9 @@ set from_addr [cc_email_from_party [ad_conn user_id]] set role [pm::role::name -role_id $role_id] - set subject "Assigned to project: $project_name" + set subject "[_ project-manager.lt_Assigned_to_project_p]" - set content "
You have been assigned to a project: $project_name (as $role)
" + set content "
[_ project-manager.lt_You_have_been_assigne]
" pm::util::email \ @@ -1845,13 +1868,32 @@ return $current_assignees } +ad_proc -public pm::project::assignee_role_list { + {-project_item_id:required} +} { + Returns a list of lists, with all assignees to a particular + project. {{party_id role_id} {party_id role_id}} + @author Malte Sussdorff (openacs@sussdorff.de) + @creation-date 2005-05-14 + + @param project_item_id + + @return + + @error +} { + + return [db_list_of_lists get_assignees_roles { }] + +} + ad_proc -public pm::project::assignee_filter_select { - {-status_id:required} + {-status_id ""} } { Returns a list of lists, people who are assigned to projects with a status of status_id. Used in the list-builder filters for - the projects list page. Cached 5 minutes. + the projects list page. Cached 10 minutes. @author Jade Rubick (jader@bread.com) @creation-date 2004-06-11 @@ -1867,7 +1909,7 @@ ad_proc -private pm::project::assignee_filter_select_helper { - {-status_id:required} + {-status_id ""} } { Returns a list of lists, people who are assigned projects with a status of status_id. Used in the list-builder filters for @@ -1882,7 +1924,14 @@ @error } { - return [db_list_of_lists get_people { + + if {[exists_and_not_null status_id]} { + set status_clause "p.status_id = :status_id and" + } else { + set status_clause "" + } + + return [db_list_of_lists get_people " SELECT distinct(first_names || ' ' || last_name) as fullname, u.person_id @@ -1894,11 +1943,11 @@ WHERE u.person_id = a.party_id and i.item_id = a.project_id and - p.status_id = :status_id and + $status_clause i.live_revision = p.project_id ORDER BY fullname - }] + "] } Index: openacs-4/packages/project-manager/tcl/task-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/tcl/task-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/tcl/task-procs.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/tcl/task-procs.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -628,6 +628,7 @@ -update_ip:required -package_id:required {-priority "0"} + -no_callback:boolean } { @@ -695,6 +696,10 @@ db_dml update_logger_entries { } + if {!$no_callback_p} { + callback pm::task_edit -package_id $package_id -task_id $task_item_id + } + return $return_val } @@ -717,6 +722,7 @@ -creation_ip:required -package_id:required {-priority "0"} + -no_callback:boolean } { Creates a new task. @@ -750,13 +756,18 @@ pm::task::close -task_item_id $task_item_id } + if {!$no_callback_p} { + callback pm::task_new -package_id $package_id -task_id $task_item_id + } + return $task_item_id } ad_proc -public pm::task::delete { -task_item_id:required + -no_callback:boolean } { Marks a task deleted @@ -769,6 +780,10 @@ @error No error thrown if there is no such task. } { + if {!$no_callback_p} { + callback pm::task_delete -package_id [ad_conn package_id] -task_id $task_item_id + } + db_dml mark_delete "update pm_tasks set deleted_p = 't' where task_id = :task_item_id" pm::project::compute_status [pm::task::project_item_id -task_item_id $task_item_id] @@ -800,11 +815,16 @@ object_id } { - set package_id [db_string pm_package_id "select package_id from cr_folders cf, cr_items ci1, cr_items ci2 where cf.folder_id = ci1.parent_id and ci1.item_id = ci2.parent_id and ci2.item_id = :object_id"] + set package_id [db_string pm_package_id "select package_id from cr_folders cf, cr_items ci1, cr_items ci2 where cf.folder_id = ci1.parent_id and ci1.item_id = ci2.parent_id and ci2.item_id = :object_id" -default 0] + + if {$package_id == 0} { + + set url [site_node_closest_ancestor_package_url -package_key "project-manager"] + } else { + set url "[ad_url]" + append url [site_node::get_url_from_object_id -object_id $package_id] + } - set url "[ad_url]" - append url [site_node::get_url_from_object_id -object_id $package_id] - set package_url "${url}task-one?task_id=$object_id" return $package_url @@ -1267,23 +1287,22 @@ } - set overdue_title "

Overdue Tasks

" + set overdue_title "

[_ project-manager.Overdue_Tasks]

" - set overdue_description "consult with people affected, and let them know deadlines are affected" + set overdue_description "[_ project-manager.lt_consult_with_people_a]" - set pressing_title "

Pressing Tasks

" + set pressing_title "

[_ project-manager.Pressing_Tasks]

" - set pressing_description "you need to start working on these soon to avoid affecting deadlines" + set pressing_description "[_ project-manager.lt_you_need_to_start_wor]" - set longterm_title "

Long Term Tasks

" + set longterm_title "

[_ project-manager.Long_Term_Tasks]

" - set longterm_description "look over these to plan ahead" + set longterm_description "[_ project-manager.lt_look_over_these_to_pl]" # okay, let's now set up the email body set description " -

This is a daily reminder of tasks that are assigned to you -You currently have $task_count($party) tasks assigned to you

+

[_ project-manager.lt_This_is_a_daily_remin]

$overdue_title @@ -1293,12 +1312,12 @@ - - - - - - + + + + + + " @@ -1317,12 +1336,12 @@
Task \#SubjectRoleLatest startLatest finishSlack[_ project-manager.Task] \#[_ project-manager.Subject_1][_ project-manager.Role][_ project-manager.Latest_start][_ project-manager.Latest_finish][_ project-manager.Slack_1]
- - - - - - + + + + + + " @@ -1339,12 +1358,12 @@
Task \#SubjectRoleLatest startLatest finishSlack[_ project-manager.Task] \#[_ project-manager.Subject_1][_ project-manager.Role][_ project-manager.Latest_start][_ project-manager.Latest_finish][_ project-manager.Slack_1]
- - - - - - + + + + + + " @@ -1419,7 +1438,7 @@ set task_term \ [parameter::get -parameter "Taskname" -default "Task"] set task_term_lower \ - [parameter::get -parameter "taskname" -default "task"] + [_ project-manager.task] set use_uncertain_completion_times_p \ [parameter::get -parameter "UseUncertainCompletionTimesP" -default "0"] @@ -1435,8 +1454,8 @@ # EDIT # ---- - set subject_out "Edited $task_term \#$task_item_id: $subject" - set intro_text "$mod_username edited this $task_term_lower" + set subject_out "[_ project-manager.lt_Edited_task_term_task]" + set intro_text "[_ project-manager.lt_mod_username_edited_t]" } else { @@ -1445,16 +1464,16 @@ # NEW # --- - set subject_out "New $task_term \#$task_item_id: $subject" - set intro_text "$mod_username assigned you to a new $task_term_lower" + set subject_out "[_ project-manager.lt_New_task_term_task_it]" + set intro_text "[_ project-manager.lt_mod_username_assigned]" } if {[empty_string_p $comment]} { set comment_text "" } else { - set comment_text "

Comment:

$comment

" + set comment_text "

[_ project-manager.Comment]

$comment

" } set url [pm::task::get_url $task_item_id] @@ -1495,38 +1514,38 @@ set is_lead_p [lindex $ass 2] set notification_text "${intro_text}${comment_text} -

Task overview

+

[_ project-manager.Task_overview]

Task \#SubjectRoleLatest startLatest finishSlack[_ project-manager.Task] \#[_ project-manager.Subject_1][_ project-manager.Role][_ project-manager.Latest_start][_ project-manager.Latest_finish][_ project-manager.Slack_1]
- + - + - +
Subject:[_ project-manager.Subject] $subject (\#$task_item_id)
Project:[_ project-manager.Project] $project_name
Your role:[_ project-manager.Your_role] $role
$process_html -

Description

+

[_ project-manager.Description]

$description_out
-

Dates:

+

[_ project-manager.Dates_1]

- + - +
Latest start:[_ project-manager.Latest_start_1] $latest_start
Latest finish[_ project-manager.Latest_finish] $latest_finish
" @@ -1866,6 +1885,7 @@ {-number:required} {-process_task_id ""} {-task_item_id ""} + {-project_item_id ""} } { Assignee HTML for new tasks @@ -1895,17 +1915,19 @@ } elseif {[exists_and_not_null task_item_id]} { - # EDITING + # EDITING (retrieve the assignees) set task_assignee_list_of_lists \ [pm::task::assignee_role_list \ -task_item_id $task_item_id] } else { - # NEW - - set task_assignee_list_of_lists [list] + # NEW (set the assigness to the default assignees of the project) + + set task_assignee_list_of_lists \ + [pm::project::assignee_role_list \ + -project_item_id $project_item_id] } # Get assignments for when editing @@ -2114,6 +2136,9 @@ } { Returns HTML for the date widget in the task-add-edit page + + Since the calendar widget Javascript has been put in, this may + need to be updated. @author Jade Rubick (jader@bread.com) @creation-date 2004-10-15 @@ -2327,18 +2352,18 @@ set iso_date_new "$end_date_year_array($tid)-$end_date_month_array($tid)-$end_date_day_array($tid) 00:00:00" if {[string equal $iso_date_old "-- 00:00:00"]} { - set date_old "no hard deadline" + set date_old "[_ project-manager.no_hard_deadline]" } else { set date_old [lc_time_fmt $iso_date_old "%x"] } if {[string equal $iso_date_new "-- 00:00:00"]} { - set date_new "no hard deadline" + set date_new "[_ project-manager.no_hard_deadline]" } else { set date_new [lc_time_fmt $iso_date_new "%x"] } - lappend changes "Hard deadline changed from $date_old to $date_new" + lappend changes "[_ project-manager.lt_Hard_deadline_changed]" } set old_one_line [ad_get_client_property -- project-manager old_one_line($tid)] @@ -2361,7 +2386,7 @@ set richtext_list [list $description_array($tid) $description_mime_type_array($tid)] set new_description_html [template::util::richtext::get_property html_value $richtext_list] - lappend changes "Description changed" + lappend changes "[_ project-manager.Description_changed]" } set old_estimated_hours_work [ad_get_client_property -- project-manager old_estimated_hours_work($tid)] @@ -2376,13 +2401,13 @@ set new [pm::util::days_work -hours_work $estimated_hours_work_min_array($tid)] if {![string equal $old $new]} { - lappend changes "Work estimate (min) changed from $old to $new days" + lappend changes "[_ project-manager.lt_Work_estimate_min_cha]" } set old [pm::util::days_work -hours_work $old_estimated_hours_work_max] set new [pm::util::days_work -hours_work $estimated_hours_work_max_array($tid)] if {![string equal $old $new]} { - lappend changes "Work estimate (max) changed from $old to $new days" + lappend changes "[_ project-manager.lt_Work_estimate_max_cha]" } } else { @@ -2391,7 +2416,7 @@ set new [pm::util::days_work -hours_work $estimated_hours_work_array($tid)] if {![string equal $old $new]} { - lappend changes "Work estimate changed from $old to $new days" + lappend changes "[_ project-manager.lt_Work_estimate_changed]" } } @@ -2402,16 +2427,16 @@ if {[string is true $use_uncertain_completion_times_p]} { if {![string equal $old_estimated_hours_work_min $estimated_hours_work_min_array($tid)]} { - lappend changes "Work estimate (min) changed from $old_estimated_hours_work_min to $estimated_hours_work_min_array($tid) hrs" + lappend changes "[_ project-manager.lt_Work_estimate_min_cha_1]" } if {![string equal $old_estimated_hours_work_max $estimated_hours_work_max_array($tid)]} { - lappend changes "Work estimate (max) changed from $old_estimated_hours_work_max to $estimated_hours_work_max_array($tid) hrs" + lappend changes "[_ project-manager.lt_Work_estimate_max_cha_1]" } } else { if {![string equal $old_estimated_hours_work $estimated_hours_work_array($tid)]} { - lappend changes "Work estimate changed from $old_estimated_hours_work to $estimated_hours_work_array($tid) hrs" + lappend changes "[_ project-manager.lt_Work_estimate_changed_1]" } } @@ -2428,14 +2453,14 @@ foreach new $new_assignees { if { [lsearch $old_assignees $new] == -1} { - lappend changes "Added: $new" + lappend changes "[_ project-manager.Added_new]" } } # check for assignees that have been removed foreach old $old_assignees { if { [lsearch $new_assignees $old] == -1} { - lappend changes "Removed: $old" + lappend changes "[_ project-manager.Removed_old]" } } @@ -2447,7 +2472,7 @@ set old [pm::project::name -project_item_id $old_project_item_id] - lappend changes "Project changed from $old" + lappend changes "[_ project-manager.lt_Project_changed_ifrom]" } @@ -2457,20 +2482,20 @@ if {![string equal $old_dependency $dependency_array($tid)]} { if {[empty_string_p $old_dependency]} { - set old "Nothing" + set old "[_ project-manager.Nothing]" } else { set old [pm::task::name \ -task_item_id $old_dependency] } if {[empty_string_p $dependency_array($tid)]} { - set new "Nothing" + set new "[_ project-manager.Nothing]" } else { set new [pm::task::name \ -task_item_id $dependency_array($tid)] } - lappend changes "Dependency changed from $old ($old_dependency) to $new ($dependency_array($tid))" + lappend changes "[_ project-manager.lt_Dependency_changed_if]" } @@ -2598,7 +2623,7 @@ } { if {[empty_string_p $set]} { - set default_orderby "latest_finish_pretty,asc" + set default_orderby "end_date,asc" set return_val [ad_get_client_property \ -default $default_orderby \ Index: openacs-4/packages/project-manager/www/add-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/add-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/add-edit-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/add-edit-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -27,8 +27,10 @@ context_bar:onevalue title:onevalue +} -validate { } +permission::require_permission -object_id $project_item_id -privilege "read" # this is necessary for new projects if {![exists_and_not_null old_project_id]} { @@ -39,14 +41,14 @@ # the unique identifier for this package set package_id [ad_conn package_id] set subsite_id [ad_conn subsite_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set user_group_id [application_group::group_id_from_package_id \ -package_id $subsite_id] # terminology -set project_term [parameter::get -parameter "ProjectName" -default "Project"] -set project_term_lower [parameter::get -parameter "projectname" -default "project"] +set project_term [_ project-manager.Project] +set project_term_lower [_ project-manager.project] set use_goal_p [parameter::get -parameter "UseGoalP" -default "1"] set use_project_code_p [parameter::get -parameter "UseUserProjectCodesP" -default "1"] @@ -91,7 +93,7 @@ } \ -new_data { - ad_returnredirect -message "Project changes saved" "one?[export_url_vars project_item_id]" + ad_returnredirect -message "[_ project-manager.lt_Project_changes_saved]" "one?[export_url_vars project_item_id]" ad_script_abort } -edit_data { @@ -100,7 +102,7 @@ } -after_submit { - ad_returnredirect -message "Project changes saved" "one?[export_url_vars project_item_id]" + ad_returnredirect -message "[_ project-manager.lt_Project_changes_saved]" "one?[export_url_vars project_item_id]" ad_script_abort } Index: openacs-4/packages/project-manager/www/add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -36,16 +36,16 @@ # --------------------------------------------------------------- # # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] +# permissions. Check that user has write permission on the package. +permission::require_permission -party_id $user_id -object_id $package_id -privilege write + # terminology -set project_term [parameter::get -parameter "ProjectName" -default "Project"] -set project_term_lower [parameter::get -parameter "projectname" -default "project"] +set project_term [_ project-manager.Project] +set project_term_lower [_ project-manager.project] set use_goal_p [parameter::get -parameter "UseGoalP" -default "1"] set use_project_code_p [parameter::get -parameter "UseUserProjectCodesP" -default "1"] - -set use_project_customizations_p [parameter::get -parameter "UseProjectCustomizationsP" -default "0"] - set ongoing_by_default_p [parameter::get -parameter "OngoingByDefaultP" -default "f"] @@ -55,15 +55,15 @@ if {[exists_and_not_null project_id]} { - set title "Edit a $project_term_lower" - set context_bar [ad_context_bar "Edit $project_term"] + set title "[_ project-manager.lt_Edit_a_project_term_l]" + set context_bar [ad_context_bar "[_ project-manager.Edit_project_term]"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege write } else { - set title "Add a $project_term_lower" - set context_bar [ad_context_bar "New $project_term"] + set title "[_ project-manager.lt_Add_a_project_term_lo]" + set context_bar [ad_context_bar "[_ project-manager.New_project_term]"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege create @@ -97,50 +97,50 @@ } {project_name:text - {label "[set project_term] name"} + {label "[_ project-manager.lt_set_project_term_name]"} {value $project_name} {html {size 50}} } {description:text(textarea),optional - {label "Description"} + {label "[_ project-manager.Description]"} {value $description} {html { rows 5 cols 40 wrap soft}}} {customer_id:text(select),optional - {label "Customer"} - {options {{"--- TBD ---" ""} [db_list_of_lists get_customer "select o.name, o.organization_id from organizations o order by o.name"]}} + {label "[_ project-manager.Customer]"} + {options {{"[_ project-manager.---_TBD_---]" ""} [db_list_of_lists get_customer "select o.name, o.organization_id from organizations o order by o.name"]}} } {planned_start_date:text(text) - {label "Starts"} + {label "[_ project-manager.Starts]"} {html {id sel1}} {after_html { \[y-m-d \] }} } {planned_end_date:text(text) - {label "Deadline"} + {label "[_ project-manager.Deadline_1]"} {html {id sel2}} {after_html { \[y-m-d \] }} } {ongoing_p:text(select) - {label "Project is ongoing?"} - {options {{"No" f} {"Yes" t}}} + {label "[_ project-manager.Project_is_ongoing]"} + {options {{"[_ acs-kernel.common_no]" f} {"[_ acs-kernel.common_Yes]" t}}} {value $ongoing_p} - {help_text "If yes, then this project has no deadline"} + {help_text "[_ project-manager.lt_If_yes_then_this_proj]"} } {status_id:text(select) - {label "Status"} + {label "[_ project-manager.Status_1]"} {options {[db_list_of_lists get_status_codes { }]}} } {variables:text(multiselect),multiple - {label "Logged variables"} + {label "[_ project-manager.Logged_variables]"} {options {[logger::ui::variable_options_all]}} {values {$logger_values}} {html {size 6}} @@ -151,15 +151,15 @@ if {[exists_and_not_null project_id]} { if {![empty_string_p [category_tree::get_mapped_trees $package_id]]} { ad_form -extend -name add_edit -form { - {category_ids:integer(category),multiple {label "Categories"} + {category_ids:integer(category),multiple {label "[_ project-manager.Categories]"} {html {size 7}} {value {$project_item_id $package_id}} } } } } else { if {![empty_string_p [category_tree::get_mapped_trees $package_id]]} { ad_form -extend -name add_edit -form { - {category_ids:integer(category),multiple,optional {label "Categories"} + {category_ids:integer(category),multiple,optional {label "[_ project-manager.Categories]"} {html {size 7}} {value {}} } } @@ -170,7 +170,7 @@ ad_form -extend -name add_edit \ -form { {goal:text(textarea),optional - {label "[set project_term] goal"} + {label "[_ project-manager.lt_set_project_term_goal]"} {value $goal} {html { rows 5 cols 40 wrap soft}}} } @@ -181,23 +181,15 @@ ad_form -extend -name add_edit \ -form { {project_code:text,optional - {label "[set project_term] code"} + {label "[_ project-manager.lt_set_project_term_code]"} {value $project_code} } } } +dtype::form::add_elements -prefix pm -object_type pm_project -object_id [value_if_exists project_id] -form add_edit -exclude_static -cr_widget none - - ad_form -extend -name add_edit \ - -select_query_name project_query \ - -on_submit { - - set user_id [ad_conn user_id] - set peeraddr [ad_conn peeraddr] - - } \ -new_request { if {[string equal $ongoing_by_default_p t]} { @@ -208,119 +200,147 @@ set planned_end_date "[lindex $planned_end_date 0]-[lindex $planned_end_date 1]-[lindex $planned_end_date 2]" set planned_start_date [util::date acquire clock [clock scan $planned_start_date]] set planned_start_date "[lindex $planned_start_date 0]-[lindex $planned_start_date 1]-[lindex $planned_start_date 2]" - - - - } \ - -new_data { + } -edit_request { + db_1row project_query {} + } -on_submit { + + set user_id [ad_conn user_id] + set peeraddr [ad_conn peeraddr] + set folder_id [pm::util::get_root_folder -package_id $package_id] + set customer_name [organizations::name -organization_id $customer_id] + if {![empty_string_p $customer_name]} { + append customer_name " - " + } + if {[empty_string_p $parent_id]} { + set parent_id $folder_id + } + set planned_start_date_sql "to_timestamp('$planned_start_date','YYYY MM DD HH24 MI SS')" + set planned_end_date_sql "to_timestamp('$planned_end_date','YYYY MM DD HH24 MI SS')" - set project_id [pm::project::new \ - -project_name $project_name \ - -project_code $project_code \ - -parent_id $parent_id \ - -goal $goal \ - -description $description \ - -planned_start_date $planned_start_date \ - -planned_end_date $planned_end_date \ - -actual_start_date "" \ - -actual_end_date "" \ - -ongoing_p $ongoing_p \ - -status_id $status_id \ - -organization_id $customer_id \ - -creation_date "" \ - -creation_user $user_id \ - -creation_ip $peeraddr \ - -package_id $package_id - ] + } -new_data { - set project_item_id [pm::project::get_project_item_id -project_id $project_id] - set logger_project [pm::project::get_logger_project -project_item_id $project_item_id] + db_transaction { + # if the project is ongoing, there is no end date + # we set it to null to signify that. Technically, this + # is bad data model design -- we should just get rid of + # ongoing_p + if {[string equal $ongoing_p t]} { + set actual_end_date "" + set planned_end_date "" + } - if {[exists_and_not_null category_ids]} { - category::map_object -remove_old -object_id $project_item_id $category_ids - } + # create a logger project + set logger_project [logger::project::new \ + -name "$customer_name$project_name" \ + -description $description \ + -project_lead $user_id \ + ] - if {[exists_and_not_null variables]} { - foreach var $variables { - logger::project::map_variable \ - -project_id $logger_project \ - -variable_id $var - } - } else { - # add in the default variable - logger::project::map_variable \ - -project_id $logger_project \ - -variable_id [logger::variable::get_default_variable_id] - } + # we want the logger project to show up in logger! + set logger_URLs [parameter::get -parameter "LoggerURLsToKeepUpToDate" -default ""] + foreach url $logger_URLs { + # get the package_id + set node_id [site_node::get_node_id -url $url] + array set node [site_node::get -node_id $node_id] + set this_package_id $node(package_id) - if {$use_project_customizations_p} { - # warn of current bug so users can work around it - ad_returnredirect -message "You must submit changes on this page or you will lose any data on this page" "add-edit-2?[export_url_vars project_item_id project_id]" - ad_script_abort - } else { - ad_returnredirect -message "Project: '$project_name' added" "one?[export_url_vars project_item_id project_id]" - ad_script_abort - } + logger::package::map_project \ + -project_id $logger_project \ + -package_id $this_package_id + } + # create a project manager project (associating the logger project + # with the logger project) + + set project_id [dtype::form::process \ + -prefix pm \ + -object_type pm_project \ + -object_id $project_id \ + -form add_edit \ + -cr_widget none \ + -defaults [list title $project_name description $description mime_type "text/plain" context_id $parent_id parent_id $folder_id] \ + -default_fields {project_code goal {planned_start_date $planned_start_date_sql} {planned_end_date $planned_end_date_sql} actual_start_date actual_end_date ongoing_p status_id customer_id logger_project} \ + -exclude_static] + + set project_item_id [pm::project::get_project_item_id -project_id $project_id] + # set logger_project [pm::project::get_logger_project -project_item_id $project_item_id] + set project_role [pm::role::default] + + pm::project::assign \ + -project_item_id $project_item_id \ + -role_id $project_role \ + -party_id $user_id \ + -send_email_p "f" + + if {[exists_and_not_null category_ids]} { + category::map_object -remove_old -object_id $project_item_id $category_ids + } + + if {[exists_and_not_null variables]} { + foreach var $variables { + logger::project::map_variable -project_id $logger_project -variable_id $var + } + } else { + # add in the default variable + logger::project::map_variable -project_id $logger_project -variable_id [logger::variable::get_default_variable_id] + } + + callback pm::project_new -package_id $package_id -project_id $project_item_id + } + } -edit_data { - # we need to pass the old_project_id to add-edit-2.tcl because - # the new revision will not have any of the custom values in - # it until it is edited. So we need to pull in these values - set old_project_id $project_id + db_transaction { + # we need to pass the old_project_id to add-edit-2.tcl because + # the new revision will not have any of the custom values in + # it until it is edited. So we need to pull in these values + set old_project_id $project_id - set project_id [pm::project::edit \ - -project_item_id $project_item_id \ - -project_name $project_name \ - -project_code $project_code \ - -parent_id $parent_id \ - -goal $goal \ - -description $description \ - -planned_start_date $planned_start_date \ - -planned_end_date $planned_end_date \ - -actual_start_date "" \ - -actual_end_date "" \ - -logger_project $logger_project \ - -ongoing_p $ongoing_p \ - -status_id $status_id \ - -organization_id $customer_id \ - -creation_user $user_id \ - -creation_ip $peeraddr \ - -package_id $package_id] - - set project_item_id [pm::project::get_project_item_id \ - -project_id $project_id] + set logger_project [pm::project::get_logger_project \ + -project_item_id $project_item_id] - set logger_project [pm::project::get_logger_project -project_item_id $project_item_id] - + set active_p [pm::status::open_p -task_status_id $status_id] - if {[exists_and_not_null variables]} { - - logger::project::remap_variables -project_id $logger_project -new_variable_list $variables - - } else { - logger::project::remap_variables -project_id $logger_project -new_variable_list [logger::variable::get_default_variable_id] - } + logger::project::edit \ + -project_id $logger_project \ + -name "$customer_name$project_name" \ + -description $description \ + -project_lead $user_id \ + -active_p $active_p - if {[exists_and_not_null category_ids]} { - category::map_object -remove_old -object_id $project_item_id $category_ids - } + set project_id [dtype::form::process \ + -prefix pm \ + -object_type pm_project \ + -object_id $project_id \ + -form add_edit \ + -cr_widget none \ + -defaults [list title $project_name description $description mime_type "text/plain" context_id $parent_id parent_id $folder_id] \ + -default_fields {project_code goal {planned_start_date $planned_start_date_sql} {planned_end_date $planned_end_date_sql} actual_start_date actual_end_date ongoing_p status_id customer_id logger_project} \ + -exclude_static] + + set project_item_id [pm::project::get_project_item_id \ + -project_id $project_id] + + # set logger_project [pm::project::get_logger_project -project_item_id $project_item_id] + + if {[exists_and_not_null variables]} { + logger::project::remap_variables -project_id $logger_project -new_variable_list $variables + } else { + logger::project::remap_variables -project_id $logger_project -new_variable_list [logger::variable::get_default_variable_id] + } + + if {[exists_and_not_null category_ids]} { + category::map_object -remove_old -object_id $project_item_id $category_ids + } + callback pm::project_edit -package_id $package_id -project_id $project_item_id + } + } -after_submit { - if {$use_project_customizations_p} { - # warn of current bug so users can work around it - ad_returnredirect -message "You must submit changes on this page or you will lose any data on this page" "add-edit-2?[export_url_vars project_id old_project_id]" - # to add back in subproject support, should use - # compute_parent_status - pm::project::compute_status $project_item_id - ad_script_abort - } else { - ad_returnredirect -message "Changes to project saved" "one?[export_url_vars project_id]" - # to add back in subproject support, should use - # compute_parent_status - pm::project::compute_status $project_item_id - ad_script_abort - } + ad_returnredirect -message "[_ project-manager.lt_Changes_to_project_sa]" "one?[export_url_vars project_id]" + # to add back in subproject support, should use + # compute_parent_status + pm::project::compute_status $project_item_id + ad_script_abort } - Index: openacs-4/packages/project-manager/www/calendar-users-update.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/calendar-users-update.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/calendar-users-update.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/calendar-users-update.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -15,7 +15,7 @@ } -errors { } -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] if {[empty_string_p party_id]} { set party_id [list $user_id] @@ -39,4 +39,4 @@ } } -ad_returnredirect -message "Updated who you will see on the task calendar" task-calendar +ad_returnredirect -message "[_ project-manager.lt_Updated_who_you_will_]" task-calendar Index: openacs-4/packages/project-manager/www/index-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/Attic/index-postgresql.xql,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/index-postgresql.xql 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/index-postgresql.xql 26 May 2005 09:34:29 -0000 1.2 @@ -53,6 +53,10 @@ s.status_id = p.status_id and i.parent_id = f.folder_id and f.package_id = :package_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = p.project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) [template::list::filter_where_clauses -and -name projects] [template::list::orderby_clause -orderby -name projects] Index: openacs-4/packages/project-manager/www/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/index.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/index.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/index.adp 26 May 2005 09:34:29 -0000 1.2 @@ -2,37 +2,10 @@ - @project_term@s + #project-manager.Projects# @context;noquote@ - - - - - - - - - - - -
- -
- Search:
- - @hidden_vars;noquote@ - -
- - @category_select;noquote@ - - - -
- - - -
+ + Index: openacs-4/packages/project-manager/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/index.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/index.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/index.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -16,12 +16,12 @@ @return project_term_lower Terminology for projects (lower case) } { - orderby_project:optional + orderby:optional {status_id:integer,optional} {searchterm ""} category_id:multiple,optional {format "normal"} - {assignee_id:integer,optional} + {assignee_id ""} } -properties { context:onevalue @@ -37,22 +37,15 @@ # --------------------------------------------------------------- # -# 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 exporting_vars { status_id category_id assignee_id orderby_project format } +set exporting_vars { status_id category_id assignee_id orderby format } set hidden_vars [export_vars -form $exporting_vars] - # set up context bar set context [list] # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege read @@ -62,24 +55,28 @@ 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 root_folder [pm::util::get_root_folder -package_id $package_id] # Projects, using list-builder --------------------------------- -# set default values +# Set status if {![exists_and_not_null status_id]} { - set status_id [pm::project::default_status_open] + set status_where_clause "" + set status_id "" +} else { + set status_where_clause {p.status_id = :status_id} } - # We want to set up a filter for each category tree. set export_vars [export_vars -form {status_id orderby}] if {[exists_and_not_null category_id]} { set temp_category_id $category_id + set pass_cat $category_id } else { set temp_category_id "" + set pass_cat "" } set category_select [pm::util::category_selects \ @@ -105,17 +102,17 @@ set default_orderby [pm::project::index_default_orderby] -if {[exists_and_not_null orderby_project]} { +if {[exists_and_not_null orderby]} { pm::project::index_default_orderby \ - -set $orderby_project + -set $orderby } -# Get url of the organizations package if it has been mounted for the links on the index page. -set organizations_url [util_memoize [list site_node::get_package_url -package_key organizations]] -if {[empty_string_p $organizations_url]} { - set organization_column "@projects.customer_name@" +# Get url of the contacts package if it has been mounted for the links on the index page. +set contacts_url [util_memoize [list site_node::get_package_url -package_key contacts]] +if {[empty_string_p $contacts_url]} { + set contact_column "@projects.customer_name@" } else { - set organization_column "@projects.customer_name@" + set contact_column "@projects.customer_name@" } @@ -126,49 +123,49 @@ -key project_item_id \ -elements { project_name { - label "Project name" + label "[_ project-manager.Project_name]" link_url_col item_url - link_html { title "View this project version" } + link_html { title "[_ project-manager.lt_View_this_project_ver]" } } customer_name { - label "Customer" + label "[_ project-manager.Customer]" display_template " -$organization_column@projects.customer_name@ +$contact_column@projects.customer_name@ " } earliest_finish_date { - label "Earliest finish" + label "[_ project-manager.Earliest_finish]" display_template "@projects.earliest_finish_date@@projects.earliest_finish_date@" } latest_finish_date { - label "Latest Finish" + label "[_ project-manager.Latest_Finish]" display_template "@projects.latest_finish_date@@projects.latest_finish_date@" } actual_hours_completed { - label "Hours completed" + label "[_ project-manager.Hours_completed]" display_template "@projects.actual_hours_completed@/@projects.estimated_hours_total@" } category_id { display_template "" } } \ - -actions [list "Add project" "add-edit" "Add project" "Customers" "[site_node::get_package_url -package_key organizations]" "View customers"] \ - -bulk_actions [list "Close" "bulk-close" "Close project"] \ + -actions [list "[_ project-manager.Add_project]" "add-edit" "[_ project-manager.Add_project]" "[_ project-manager.Customers]" "[site_node::get_package_url -package_key contacts]" "[_ project-manager.View_customers]"] \ + -bulk_actions [list "[_ project-manager.Close]" "bulk-close" "[_ project-manager.Close_project]"] \ -sub_class { narrow } \ -filters { searchterm { - label "Search" + label "[_ project-manager.Search_1]" where_clause {$search_term_where} } status_id { - label "Status" + label "[_ project-manager.Status_1]" values {[pm::status::project_status_select]} - where_clause {s.status_id = :status_id} + where_clause {$status_where_clause} } assignee_id { - label "Assignee" + label "[_ project-manager.Assignee]" values {$assignees_filter} where_clause {pa.party_id = :assignee_id} } @@ -180,45 +177,45 @@ -orderby { default_value $default_orderby project_name { - label "Project name" + label "[_ project-manager.Project_name]" orderby_desc "upper(p.title) desc" orderby_asc "upper(p.title) asc" default_direction asc } customer_name { - label "Customer Name" + label "[_ project-manager.Customer_Name]" orderby_desc "upper(o.name) desc, earliest_finish_date desc" orderby_asc "upper(o.name) asc, earliest_finish_date asc" default_direction asc } category_id { - label "Categories" + label "[_ project-manager.Categories]" orderby_desc "c.category_name desc" orderby_asc "c.category_name asc" default_direction asc } earliest_finish_date { - label "Earliest finish" + label "[_ project-manager.Earliest_finish]" orderby_desc "p.earliest_finish_date desc" orderby_asc "p.earliest_finish_date asc" default_direction asc } latest_finish_date { - label "Latest finish" + label "[_ project-manager.Latest_finish]" orderby_desc "p.latest_finish_date desc" orderby_asc "p.latest_finish_date asc" default_direction asc } actual_hours_completed { - label "Hours completed" + label "[_ project-manager.Hours_completed]" orderby_desc "p.actual_hours_completed desc" orderby_asc "p.actual_hours_completed asc" default_direction asc } } \ -formats { normal { - label "Table" + label "[_ project-manager.Table]" layout table row { project_name {} @@ -230,7 +227,7 @@ } } csv { - label "CSV" + label "[_ project-manager.CSV]" output csv page_size 0 row { @@ -243,13 +240,13 @@ } } } \ - -orderby_name orderby_project \ + -orderby_name orderby \ -html { width 100% } # Note: On oracle it you get "ORA-03113: end-of-file on communication channel" -# please drop the index cat_object_map_i. Unique indexes are not allowed in organization index tables +# please drop the index cat_object_map_i. Unique indexes are not allowed in contact index tables db_multirow -extend { item_url } projects project_folders { } { Index: openacs-4/packages/project-manager/www/log-bulk.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/log-bulk.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/log-bulk.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/log-bulk.adp 26 May 2005 09:34:29 -0000 1.2 @@ -2,5 +2,5 @@ @title@ @context@ -This page will eventually allow you to log hours against multiple -tasks at once. +#project-manager.lt_This_page_will_eventu# + Index: openacs-4/packages/project-manager/www/log-bulk.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/log-bulk.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/log-bulk.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/log-bulk.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -19,13 +19,13 @@ } set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] -set title "Log time for multiple tasks" +set title "[_ project-manager.lt_Log_time_for_multiple]" if {[exists_and_not_null return_url]} { - set context [list [list $return_url Tasks] "Log time"] + set context [list [list $return_url Tasks] "[_ project-manager.Log_time]"] } else { - set context [list "Log time"] + set context [list "[_ project-manager.Log_time]"] } Index: openacs-4/packages/project-manager/www/log.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/log.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/log.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/log.adp 26 May 2005 09:34:29 -0000 1.2 @@ -3,9 +3,9 @@ @context;noquote@ -The administrator needs to set up integration with logger. +#project-manager.lt_The_administrator_nee# #project-manager.lt_set_up_integration_wi#.

-After they have done this, you can go back to the previous page, - refresh it, and then add and edit logged hours. +#project-manager.lt_After_they_have_done_# + Index: openacs-4/packages/project-manager/www/log.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/log.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/log.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/www/log.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -7,5 +7,5 @@ } -set title "Set up logger integration" +set title "[_ project-manager.lt_Set_up_logger_integra]" set context [list] Index: openacs-4/packages/project-manager/www/one.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/one.adp,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/one.adp 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/www/one.adp 26 May 2005 09:34:29 -0000 1.3 @@ -1,7 +1,7 @@ - @my_title;noquote@ -- Closed + @my_title;noquote@ -- #project-manager.Closed# @my_title;noquote@ @@ -10,407 +10,52 @@ @project_item_id@ -

(not current, select live version from the task change page)

+

#project-manager.lt_not_current_set_live#

- - - Index: openacs-4/packages/project-manager/www/one.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/one.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/one.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/one.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -61,7 +61,7 @@ if {![exists_and_not_null project_item_id] && \ ![exists_and_not_null project_id]} { - ad_complain "No project passed in" + ad_complain "[_ project-manager.No_project_passed_in]" } } @@ -98,411 +98,30 @@ # terminology and other parameters -set project_term [parameter::get -parameter "ProjectName" -default "Project"] -set project_term_lower [parameter::get -parameter "projectname" -default "project"] -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set use_goal_p [parameter::get -parameter "UseGoalP" -default "1"] -set hide_done_tasks_p [parameter::get -parameter "HideDoneTaskP" -default "1"] -set use_project_code_p [parameter::get -parameter "UseUserProjectCodesP" -default "1"] -set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] +set project_term [_ project-manager.Project] set use_project_customizations_p [parameter::get -parameter "UseProjectCustomizationsP" -default "0"] set use_subprojects_p [parameter::get -parameter "UseSubprojectsP" -default "0"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege read -set write_p [permission::permission_p -object_id $package_id -privilege write] -set create_p [permission::permission_p -object_id $package_id -privilege create] - - -set process_instance_options [pm::process::instance_options \ - -project_item_id $project_item_id \ - -process_instance_id $instance_id] - - -set process_reminder_url [export_vars -base process-reminder {instance_id project_item_id return_url}] - -if {[empty_string_p $process_instance_options]} { - set instance_html "" -} else { - - set instance_html " - - [export_vars -form -entire_form -exclude {instance_id}] - - -" -} - -# we do this so that the list builder templates don't add a where -# clause when instance_id is set. -if {[empty_string_p $instance_id]} { - unset instance_id -} - -# categories - -set categories [list] -set cat_list [category::get_mapped_categories $project_item_id] -foreach cat $cat_list { - lappend categories [category::get_name $cat] -} - +# Get Project Information db_1row project_query { } -column_array project -set richtext_list [list $project(description) $project(mime_type)] - -set project(description) [template::util::richtext::get_property html_value $richtext_list] - -set project_root [db_exec_plsql get_root_folder { }] - -set project(planned_start_date) [lc_time_fmt $project(planned_start_date) "%x"] -set project(planned_end_date) [lc_time_fmt $project(planned_end_date) "%x"] -set project(estimated_finish_date) [lc_time_fmt $project(estimated_finish_date) "%x"] -set project(earliest_finish_date) [lc_time_fmt $project(earliest_finish_date) "%x"] -set project(latest_finish_date) [lc_time_fmt $project(latest_finish_date) "%x"] - -# ---------------- -# general comments -# ---------------- -set comments [general_comments_get_comments -print_content_p 1 -print_attachments_p 1 $project_item_id "[ad_conn url]?project_item_id=$project_item_id"] - -set comments_link "Add comment" - - -# we can also get the link to the logger instance. -set logger_url [pm::util::logger_url] -set logger_project_url "$logger_url?project_id=$project(logger_project)" - -if {![exists_and_not_null logger_variable_id]} { - set logger_variable_id [logger::project::get_primary_variable \ - -project_id $project(logger_project)] -} - -set variable_widget [logger::ui::variable_select_widget \ - -project_id $project(logger_project) \ - -current_variable_id $logger_variable_id \ - -select_name logger_variable_id] - -set variable_exports [export_vars -form -entire_form -exclude {logger_variable_id logger_days }] - -set log_url "${logger_url}log?project_id=$project(logger_project)&pm_project_id=$project_item_id&return_url=$return_url&variable_id=$logger_variable_id" - -# There is no point showing an empty listbox, which happens if the user assigns all roles to himself. Doing it this way avoids another trip to the database. -set select_list_html [pm::role::project_select_list -select_name "role_id" -project_item_id $project_item_id -party_id $user_id] -if {[string compare $select_list_html ""]} { - set assignee_add_self_widget "Add myself as [export_vars -form {project_item_id user_id return_url}]$select_list_html" - set roles_listbox_p 1 -} else { - set roles_listbox_p 0 -} - -# Only need a 'remove myself' link if you are already assigned -set assigned_p [pm::project::assigned_p -project_item_id $project_item_id -party_id $user_id] -if {$assigned_p} { - set assignee_remove_self_url [export_vars -base project-assign-remove {project_item_id user_id return_url}] -} - -set assignee_edit_url [export_vars -base project-assign-edit {project_item_id return_url}] - -set today_ansi [clock format [clock scan today] -format "%Y-%m-%d"] -set then_ansi [clock format [clock scan "-$logger_days days"] -format "%Y-%m-%d"] - - -set day_widget "Last Days" - - +# Context Bar and Title information +set portlet_master "/packages/project-manager/lib/portlet" +set project_root [pm::util::get_root_folder -package_id $package_id] set my_title "$project_term \#$project_item_id: $project(project_name)" -set edit_url "[ad_conn package_url]add-edit?[export_url_vars project_item_id]" - -# set up context bar, needs parent_id +# set up context bar, needs project(parent_id) if {[string equal $project(parent_id) $project_root]} { set context [list "$project(project_name)"] } else { - set context [list [list "one?project_item_id=$project(parent_id)" "Parent"] "$project(project_name)"] + set parent_name [pm::util::get_project_name -project_item_id $project(parent_id)] + set context [list [list "one?project_item_id=$project(parent_id)" "$parent_name"] "$project(project_name)"] } -set processes_html [pm::process::select_html] -# Tasks, using list-builder --------------------------------- - -# Hide finished tasks. This should be added as a filter, but I did not have time to look it up in the howto. - -if {$hide_done_tasks_p} { - set done_clause "and t.percent_complete < 100" -} else { - set done_clause "" -} - -set process_link "process-use?project_item_id=$project_item_id" - -set default_orderby [pm::project::one_default_orderby] - -if {[exists_and_not_null orderby_tasks]} { - pm::project::one_default_orderby \ - -set $orderby_tasks -} - - -template::list::create \ - -name tasks \ - -multirow tasks \ - -key task_item_id \ - -html {width 100%} \ - -elements { - task_item_id { - label "ID" - } - status_type { - label "Done" - display_template { - - } - } - title { - label "Subject" - display_template "@tasks.title@@tasks.title@" - } - parent_task_id { - label "Dep" - display_template { - @tasks.parent_task_id@ - } - } - priority { - label "Priority" - display_template { - @tasks.priority@ - } - } - slack_time { - label "Slack" - display_template " - - - @tasks.slack_time@ - - " - } - earliest_start { - label "Earliest Start" - display_template "@tasks.earliest_start_pretty@@tasks.earliest_start_pretty@" - } - earliest_finish { - label "Earliest Finish" - display_template "@tasks.earliest_finish_pretty@@tasks.earliest_finish_pretty@" - } - latest_start { - label "Latest Start" - display_template "@tasks.latest_start_pretty@@tasks.latest_start_pretty@" - } - latest_finish { - label "Latest Finish" - display_template "@tasks.latest_finish_pretty@@tasks.latest_finish_pretty@" - } - last_name { - label "Who" - display_template { - - - - - - @tasks.first_names@ @tasks.last_name@ - - - - -
-
- } - - } - } \ - -bulk_actions { - "Edit" "task-add-edit" "Edit tasks" - } \ - -bulk_action_export_vars { - project_item_id - {return_url} - } \ - -sub_class { - narrow - } \ - -filters { - project_item_id { - hide_p 1 - } - instance_id { - hide_p 1 - where_clause {ti.process_instance = :instance_id} - } - orderby_subproject { - hide_p 1 - } - orderby_people { - hide_p 1 - } - } \ - -orderby { - default_value $default_orderby - title { - orderby_asc "title asc, task_item_id asc" - orderby_desc "title desc, task_item_id desc" - default_direction asc - } - priority { - orderby_asc "priority, earliest_start, task_item_id asc, u.first_names, u.last_name" - orderby_desc "priority desc, earliest_start desc, task_item_id desc, u.first_names, u.last_name" - default_direction desc - } - earliest_start { - orderby_asc "earliest_start, task_item_id asc, u.first_names, u.last_name" - orderby_desc "earliest_start desc, task_item_id desc, u.first_names, u.last_name" - default_direction asc - } - earliest_finish { - orderby_asc "earliest_finish, task_item_id asc, u.first_names, u.last_name" - orderby_desc "earliest_finish desc, task_item_id desc, u.first_names, u.last_name" - default_direction asc - } - latest_start { - orderby_asc "latest_start, task_item_id asc, u.first_names, u.last_name" - orderby_desc "latest_start desc, task_item_id desc, u.first_names, u.last_name" - default_direction asc - } - latest_finish { - orderby_asc "latest_finish, task_item_id asc, u.first_names, u.last_name" - orderby_desc "latest_finish desc, task_item_id desc, u.first_names, u.last_name" - default_direction asc - } - } \ - -orderby_name orderby_tasks - - -db_multirow -extend { item_url earliest_start_pretty earliest_finish_pretty latest_start_pretty latest_finish_pretty slack_time my_user_id} tasks project_tasks_query { -} { - set item_url [export_vars -base "task-one" { {task_id $task_item_id}}] - - set earliest_start_pretty [lc_time_fmt $earliest_start "%x"] - set earliest_finish_pretty [lc_time_fmt $earliest_finish "%x"] - set latest_start_pretty [lc_time_fmt $latest_start "%x"] - set latest_finish_pretty [lc_time_fmt $latest_finish "%x"] - - set slack_time [pm::task::slack_time \ - -earliest_start_j $earliest_start_j \ - -today_j $today_j \ - -latest_start_j $latest_start_j] - - set my_user_id $user_id -} - - -if {$use_subprojects_p} { - - # Subprojects, using list-builder --------------------------------- - - db_multirow subproject project_subproject_query { } - - template::list::create \ - -name subproject \ - -multirow subproject \ - -key item_id \ - -elements { - project_name { - label "Subject" - link_url_col item_url - link_html { title "View this subproject" } - } - actual_hours_completed { - label "Hours completed" - } - } \ - -sub_class { - narrow - } \ - -filters { - project_item_id {} - orderby_tasks {} - orderby_people {} - } \ - -orderby { - project_name {orderby project_name} - default_value project_name,desc - } \ - -orderby_name orderby_subproject \ - -html { - width 100% - } - - - - db_multirow -extend { item_url } subproject project_subproject_query { - } { - set item_url [export_vars -base "one" -override {{project_item_id $item_id}} {project_item_id}] - } -} - -# People, using list-builder --------------------------------- - -db_multirow people project_people_query { } - -template::list::create \ - -name people \ - -multirow people \ - -key item_id \ - -elements { - user_name { - label "Who" - display_template { - - @people.user_name@ - - } - } - role_name { - label "Role" - } - } \ - -sub_class { - narrow - } \ - -filters { - party_id {} - orderby_subproject {} - orderby_tasks {} - } \ - -orderby { - role_id {orderby role_id} - default_value role_id,desc - } \ - -orderby_name orderby_subproject \ - -html { - width 100% - } - - -db_multirow -extend { item_url } subproject project_people_query { -} { - -} - - - -# -------------------------CUSTOMIZATIONS-------------------------- -# If there are customizations, put them in a multirow called custom -# ----------------------------------------------------------------- - -db_1row custom_query { } -column_array custom - -set customer_link "[site_node::get_package_url -package_key organizations]one?organization_id=$custom(customer_id)" - -# end of customizations - ad_return_template # ------------------------- END OF FILE ------------------------- # Index: openacs-4/packages/project-manager/www/one.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/one.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/one.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + SELECT + p.item_id, + p.project_id, + p.title as project_name, + p.project_code, + p.goal, + p.description, + p.mime_type, + to_char(p.planned_start_date,'YYYY-MM-DD HH24:MI') as planned_start_date, + to_char(p.planned_end_date,'YYYY-MM-DD HH24:MI') as planned_end_date, + p.logger_project, + p.ongoing_p, + i.live_revision, + to_char(p.estimated_finish_date,'YYYY-MM-DD HH24:MI') as estimated_finish_date, + to_char(p.earliest_finish_date,'YYYY-MM-DD HH24:MI') as earliest_finish_date, + to_char(p.latest_finish_date,'YYYY-MM-DD HH24:MI') as latest_finish_date, + p.actual_hours_completed, + p.estimated_hours_total, + p.parent_id, + s.status_type + FROM + pm_projectsx p, + cr_items i, + pm_project_status s + WHERE + p.item_id = :project_item_id and + p.project_id = :project_id and + p.item_id = i.item_id and + p.status_id = s.status_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = :project_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) + + + + \ No newline at end of file Index: openacs-4/packages/project-manager/www/process-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -27,21 +27,21 @@ # --------------------------------------------------------------- # # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +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"] +set project_term [_ project-manager.Project] +set project_term_lower [_ project-manager.project] if {[exists_and_not_null process_id]} { - set title "Edit a Process" - set context_bar [ad_context_bar "Edit Process"] + set title "[_ project-manager.Edit_a_Process]" + set context_bar [ad_context_bar "[_ project-manager.Edit_Process]"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege write } else { - set title "Add a Process" - set context_bar [ad_context_bar "New Process"] + set title "[_ project-manager.Add_a_Process]" + set context_bar [ad_context_bar "[_ project-manager.New_Process]"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege create @@ -52,18 +52,18 @@ process_id:key {one_line:text - {label "Subject"} + {label "[_ project-manager.Subject_1]"} {value $one_line} {html {size 40}} } {description:text(textarea),optional - {label "Description"} + {label "[_ project-manager.Description]"} {value $description} {html { rows 5 cols 40 wrap soft}}} {number_of_tasks:text - {label "Number of new tasks"} + {label "[_ project-manager.Number_of_new_tasks]"} {value "1"} {html {size 5}} } @@ -78,7 +78,7 @@ db_dml new_process { *SQL* } - ad_returnredirect -message "Process added. Now add process tasks." "process-task-add-edit?[export_vars -url {{number $number_of_tasks} process_id}]" + ad_returnredirect -message "[_ project-manager.lt_Process_added_Now_add]" "process-task-add-edit?[export_vars -url {{number $number_of_tasks} process_id}]" ad_script_abort } -edit_data { @@ -87,7 +87,7 @@ } -after_submit { - ad_returnredirect -message "Process changes saved. Now edit process tasks" "process-task-add-edit?[export_vars -url {{number $number_of_tasks} process_id}]" + ad_returnredirect -message "[_ project-manager.lt_Process_changes_saved]" "process-task-add-edit?[export_vars -url {{number $number_of_tasks} process_id}]" ad_script_abort } Index: openacs-4/packages/project-manager/www/process-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-delete.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-delete.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-delete.adp 26 May 2005 09:34:29 -0000 1.2 @@ -3,14 +3,15 @@ @context@

- Are you sure you want to delete this process: @one_line@ + #project-manager.lt_Are_you_sure_you_want#

@description@

- Delete + #project-manager.Delete#     - Cancel, do not delete + #project-manager.Cancel_do_not_delete#

+ Index: openacs-4/packages/project-manager/www/process-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-delete.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/process-delete.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/www/process-delete.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -24,8 +24,8 @@ db_1row get_name "select one_line, description from pm_process where process_id = :process_id" - set title "Delete process: $one_line" - set context [list "Delete: $one_line"] + set title "[_ project-manager.lt_Delete_process_one_li]" + set context [list "[_ project-manager.Delete_one_line]"] set yes_url "process-delete?[export_vars {process_id {confirm_p 1} return_url}]" set no_url $return_url @@ -38,4 +38,4 @@ pm::process::delete -process_id $process_id -ad_returnredirect -message "Process deleted" $return_url +ad_returnredirect -message "[_ project-manager.Process_deleted]" $return_url Index: openacs-4/packages/project-manager/www/process-dependency-add-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-dependency-add-edit.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-dependency-add-edit.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-dependency-add-edit.adp 26 May 2005 09:34:29 -0000 1.2 @@ -3,13 +3,7 @@ @title@ -You may now add dependencies to these process -@task_term_lower@s. Dependencies describe the order in which items must -be completed. For example, "the boards must be delivered before -construction can begin". Entering dependencies is important because it -allows the system to automatically compute schedules. However, you can -skip adding dependencies. - +#project-manager.lt_you_may_now_add_dep#

@@ -21,3 +15,4 @@
+ Index: openacs-4/packages/project-manager/www/process-dependency-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-dependency-add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-dependency-add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-dependency-add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -64,22 +64,22 @@ } # terminology -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions -set title "Add $task_term_lower dependencies" -set context_bar [ad_context_bar [list "process-task-add-edit?[export_vars -url {{process_id process_task_id:multiple}}]" "Assignments"] "New $task_term dependency"] +set title "[_ project-manager.lt_Add_task_term_lower_d_1]" +set context_bar [ad_context_bar [list "process-task-add-edit?[export_vars -url {{process_id process_task_id:multiple}}]" "<#_ Assignments"] "<#_ New $task_term dependency"] permission::require_permission -party_id $user_id -object_id $package_id -privilege create -set process_task_id_pass [string map {" " "-"} $process_task_id] -set use_dependency_list_pass [string map {" " "-"} $use_dependency_list] +set process_task_id_pass [string map {" " "-"} $process_task_id] +set use_dependency_list_pass [string map {" " "-"} $use_dependency_list] ad_form -name add_edit -form { dependency_id:key(pm_process_task_dependency_seq) @@ -107,13 +107,13 @@ } -new_data { # convert from our hack back to a list - set process_task_id [string map {"-" " "} $process_task_id] + set process_task_id [string map {"-" " "} $process_task_id] pm::process::remove_dependency \ -process_task_id $process_task_id # convert from our hack back to a list - set use_dependency_list [string map {"-" " "} $use_dependency_list] + set use_dependency_list [string map {"-" " "} $use_dependency_list] foreach tr $use_dependency_list { @@ -132,7 +132,7 @@ } -edit_data { set process_task_id_pass $process_task_id - set process_task_id_pass [string map {"-" " "} $process_task_id_pass] + set process_task_id_pass [string map {"-" " "} $process_task_id_pass] set process_task_id $process_task_id_pass pm::process::remove_dependency -process_task_id $process_task_id @@ -152,7 +152,7 @@ } -after_submit { - ad_returnredirect -message "Process task dependencies saved" [export_vars -base process-one -url {process_id}] + ad_returnredirect -message "[_ project-manager.lt_Process_task_dependen]" [export_vars -base process-one -url {process_id}] ad_script_abort } @@ -195,12 +195,12 @@ {task_title.$tasks(task_id):text(hidden) {section {$tasks(task_title)}} - {label \"Subject\"} + {label \"[_ project-manager.Subject_2]"} {value {$tasks(task_title)}} } {description.$tasks(task_id):text(inform) - {label \"Description\"} + {label \"[_ project-manager.Description_2]"} {value {$tasks(description)}} } @@ -209,7 +209,7 @@ } {dependency_task_id.$tasks(task_id):text(select) - {label \"Dependency\"} + {label \"[_ project-manager.Dependency_1]"} {options {$dependency_options_full}} {value {$tasks(parent_task_id)}} {help_text {$task_term the dependency is based on}} Index: openacs-4/packages/project-manager/www/process-instance-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-instance-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-instance-edit-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-instance-edit-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -17,7 +17,7 @@ } -errors { } -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] permission::require_permission \ @@ -27,4 +27,4 @@ db_dml change_process_instance { } -ad_returnredirect -message "Saved change of process instance name" process-instances?process_id=$process_id +ad_returnredirect -message "[_ project-manager.lt_Saved_change_of_proce]" process-instances?process_id=$process_id Index: openacs-4/packages/project-manager/www/process-instance-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-instance-edit.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/process-instance-edit.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/www/process-instance-edit.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -17,7 +17,7 @@ db_1row get_instance { } -set title "Edit process instance" -set context [list [list "Processes" processes ] [list "Process instances" "process-instances?process_id=$process_id"] $title] +set title "[_ project-manager.lt_Edit_process_instance]" +set context [list [list "[_ project-manager.Processes]" processes ] [list "[_ project-manager.Process_instances]" "process-instances?process_id=$process_id"] $title] Index: openacs-4/packages/project-manager/www/process-instances.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-instances.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-instances.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-instances.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -17,13 +17,13 @@ # set up context bar -set title "Process Instances" -set context [list [list "Processes" processes] $title] +set title "[_ project-manager.Process_Instances]" +set context [list [list "[_ project-manager.Processes]" processes] $title] set header_stuff "" # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege read @@ -38,24 +38,24 @@ edit { display_template { - Edit + [_ acs-kernel.common_Edit] } } instance_id { - label "ID" + label "[_ project-manager.ID]" } name { - label "Name" + label "[_ project-manager.Name]" } project_item_id { - label "Project" + label "[_ project-manager.Project_1]" display_template { @instances.project_name@ } } active_tasks { - label "Active tasks" + label "[_ project-manager.Active_tasks]" } } \ -main_class { Index: openacs-4/packages/project-manager/www/process-one.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-one.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-one.adp 29 Apr 2005 17:43:37 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-one.adp 26 May 2005 09:34:29 -0000 1.2 @@ -2,24 +2,22 @@ -One process +#project-manager.One_process# @context_bar;noquote@ -Process tasks: +#project-manager.Process_tasks#
    -
  • Use all tasks in this process: @use_link;noquote@

    +

  • #project-manager.lt_Use_all_tasks_in_this#

  • - Add - - - new task(s) to this process - +#project-manager.lt_add_new_tasks# +
+ Index: openacs-4/packages/project-manager/www/process-one.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-one.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-one.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-one.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -30,7 +30,7 @@ # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege read @@ -42,15 +42,15 @@ # set up context bar, needs parent_id -set context_bar [ad_context_bar [list "processes?process_id=$process_id" "Processes"] "One"] +set context_bar [ad_context_bar [list "processes?process_id=$process_id" "[_ project-manager.Processes]"] "[_ project-manager.One]"] set use_link "" set elements \ [list \ one_line { - label "Subject" + label "[_ project-manager.Subject_1]" display_template {@tasks.one_line@ @@ -67,10 +67,10 @@ } } \ description { - label "Description" + label "[_ project-manager.Description]" } \ person_id { - label "Lead" + label "[_ project-manager.Lead]" display_template { @tasks.first_names@ @tasks.last_name@
@@ -89,17 +89,17 @@ -orderby { default_value ordering,asc ordering { - label "Order" + label "[_ project-manager.Order]" orderby_asc "t.ordering, t.process_task_id, p.first_names, p.last_name" orderby_desc "t.ordering desc, t.process_task_id desc, p.first_names, p.last_name" default_direction asc } } \ - -bulk_actions { - "Use" "task-select-project" "Use process" - "Edit" "process-task-add-edit" "Edit tasks" - "Delete" "process-task-delete" "Delete tasks" - } \ + -bulk_actions [list \ + "[_ project-manager.Use]" "task-select-project" "[_ project-manager.Use_process]" \ + "[_ acs-kernel.common_Edit]" "process-task-add-edit" "[_ project-manager.Edit_tasks]" \ + "[_ project-manager.Delete]" "process-task-delete" "[_ project-manager.Delete_tasks]" \ + ]\ -bulk_action_export_vars { process_id project_item_id Index: openacs-4/packages/project-manager/www/process-reminder.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-reminder.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/process-reminder.tcl 30 Apr 2005 06:59:33 -0000 1.2 +++ openacs-4/packages/project-manager/www/process-reminder.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -22,4 +22,4 @@ -project_item_id $project_item_id \ -new_p f -ad_returnredirect -message "Status update sent" $return_url +ad_returnredirect -message "[_ project-manager.Status_update_sent]" $return_url Index: openacs-4/packages/project-manager/www/process-task-add-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-add-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-task-add-edit-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-task-add-edit-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -81,7 +81,7 @@ } -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] permission::require_permission -party_id $user_id -object_id $package_id -privilege create @@ -223,11 +223,11 @@ } if {[llength [array get use_dependency]] > 0} { - set dep_msg "Now set up dependencies" + set dep_msg "[_ project-manager.lt_Now_set_up_dependenci]" } else { set dep_msg "" } -ad_returnredirect -message "Process $task_tasks saved. $dep_msg" "process-dependency-add-edit?[export_vars -url {process_task_id:multiple process_id use_dependency:array}]" +ad_returnredirect -message "[_ project-manager.lt_Process_task_tasks_sa] $dep_msg" "process-dependency-add-edit?[export_vars -url {process_task_id:multiple process_id use_dependency:array}]" ad_script_abort Index: openacs-4/packages/project-manager/www/process-task-add-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-add-edit.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-task-add-edit.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-task-add-edit.adp 26 May 2005 09:34:29 -0000 1.2 @@ -18,46 +18,46 @@
- -
+ + + - - - - - - - - - - - - - -
- - - - - - - - Edit - - -   @project_term@ - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name:@project.project_name@
Code:@project.project_code@
Goal:@project.goal@
Description:@project.description;noquote@
-
 
-

- - - - - - - - - - -
- - Dates - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Start@project.planned_start_date@
Earliest finish@project.earliest_finish_date@Ongoing
Latest finish@project.latest_finish_date@Ongoing
Task hours completed@project.actual_hours_completed@ of @project.estimated_hours_total@
-
-
+

- - - - - - - - - - - - - - - -
- - Assignees - -
- -  
- -  
-

+ - -

- - - - - - - - - - - -
- - Project information - -
- - - - - -
Customer@custom.customer_name@
-
 
- - -

- - - - - - - +

+ -

- - - -
- - Categories - -
- - - -
- -
    - - -
  • @categories:item@ - - -
- -
-
 
-

- - - - - - - - - - -
- - Subprojects - -
Add subproject - - - -
- +

- - - - - - - - - - - -
- - Comments - -
- @comments;noquote@ -
    -
  • @comments_link;noquote@ -
-
 
+ -

- - - - - - - - - - - - -
- - Actions - -
- -  
-

- - TASKS - + + +

- - - - - - + - - - - - - +

+ +

-

- - - - - - - - -
- - @task_term@ - -
@instance_html;noquote@ 
- -  
- - -  
+ -

- - - - - - - - - - - - - - - - -
- - Logger - -
-
- @variable_widget;noquote@ - @variable_exports;noquote@ - @day_widget;noquote@ - -
-
 
- -  

 @num.rownum@  Subject:*

+

#project-manager.Subject#*

- Description:
+ #project-manager.Description_1#

- + - - + + - - + + - + - - + + - - + + - + @@ -67,11 +67,11 @@

- depends on another @task_term_lower@ + #project-manager.lt_depends_on_another_ta#

- Order + #project-manager.Order#
@@ -101,3 +101,5 @@

Work required:*#project-manager.Work_required#*
Min: days
#project-manager.Min# #project-manager.days#
Max: days
#project-manager.Max# #project-manager.days#
days
#project-manager.days#
Min: hrs
#project-manager.Min# #project-manager.hrs#
Max: hrs
#project-manager.Max# #project-manager.hrs#
hrs
#project-manager.hrs#
+ + Index: openacs-4/packages/project-manager/www/process-task-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-task-add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-task-add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -48,8 +48,8 @@ # terminology and parameters # -------------------------- -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] set use_day_p [parameter::get -parameter "UseDayInsteadOfHour" -default "t"] @@ -60,7 +60,7 @@ # -------------------------------------- set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # ------------------------------------------------------------ # if process_task_id is set, then we are editing process tasks @@ -69,8 +69,8 @@ if {[exists_and_not_null process_task_id]} { set edit_p 1 - set title "Edit a process $task_term_lower" - set context_bar [ad_context_bar [list "process-one?process_id=$process_id" "Process"] "Edit tasks"] + set title "[_ project-manager.lt_Edit_a_process_task_t]" + set context_bar [ad_context_bar [list "process-one?process_id=$process_id" "[_ project-manager.Process]"] "[_ project-manager.Edit_tasks]"] permission::require_permission -party_id $user_id -object_id $package_id -privilege write set process_tasks [list] @@ -109,8 +109,8 @@ } else { set edit_p 0 - set title "Add a process $task_term_lower" - set context_bar [ad_context_bar [list "process-one?process_id=$process_id" "Process"] "Add tasks"] + set title "[_ project-manager.lt_Add_a_process_task_te]" + set context_bar [ad_context_bar [list "process-one?process_id=$process_id" "[_ project-manager.Process]"] "[_ project-manager.Add_tasks]"] permission::require_permission -party_id $user_id -object_id $package_id -privilege create for {set i 1} {$i <= $number} {incr i} { @@ -173,7 +173,7 @@ set role [lindex $role_list 1] append html " -

Assignee: $role_name

" +

[_ project-manager.Assignee_1] $role_name

" foreach assignee_list $assignee_list_of_lists { set name [lindex $assignee_list 0] Index: openacs-4/packages/project-manager/www/process-task-assign-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-assign-add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-task-assign-add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-task-assign-add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -52,23 +52,23 @@ # terminology -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] # the unique identifier for this package set package_id [ad_conn package_id] set subsite_id [ad_conn subsite_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set user_group_id [application_group::group_id_from_package_id \ -package_id $subsite_id] # permissions and more -set title "Add a process $task_term_lower (assignment)" -set context_bar [ad_context_bar [list "processes?process_id=$process_id" "Processes"] "Add assignment"] +set title "[_ project-manager.lt_Add_a_process_task_te_1]" +set context_bar [ad_context_bar [list "processes?process_id=$process_id" "[_ project-manager.Processes]"] "[_ project-manager.Add_assignment]"] permission::require_permission -party_id $user_id -object_id $package_id -privilege create @@ -92,11 +92,11 @@ -set users_lofl "{{--Select Person--} {}} " +set users_lofl "{{[_ project-manager.--Select_Person--]} {}} " append users_lofl [db_list_of_lists get_users { }] -set roles_lofl "{{--Select Role--} {}} " +set roles_lofl "{{[_ project-manager.--Select_Role--]} {}} " append roles_lofl [db_list_of_lists get_roles { }] @@ -317,13 +317,13 @@ [list \ [list \ party_id.$tiid.$i:text(select) \ - {label "Assignments \#$i $tiid"} \ + {label "[_ project-manager.Assignments] \#$i $tiid"} \ {options {[set users_lofl]}} \ {values $uv} \ ] \ [list \ role_id.$tiid.$i:text(select) \ - {label "Role \#$i $tiid"} \ + {label "[_ project-manager.Role] \#$i $tiid"} \ {options {[set roles_lofl]}} \ {values $rv} \ ] \ Index: openacs-4/packages/project-manager/www/process-task-delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-delete-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-task-delete-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-task-delete-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -14,7 +14,7 @@ # --------------------------------------------------------------- # # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege write Index: openacs-4/packages/project-manager/www/process-task-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-delete.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-task-delete.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-task-delete.adp 26 May 2005 09:34:29 -0000 1.2 @@ -7,11 +7,12 @@

-Are you sure you'd like to delete these @task_term_lower@s? +#project-manager.lt_Are_you_sure_youd_lik# @hidden_vars;noquote@
+ Index: openacs-4/packages/project-manager/www/process-task-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-task-delete.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-task-delete.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-task-delete.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -27,13 +27,13 @@ # --------------------------------------------------------------- # # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # terminology -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set task_term_lower [_ project-manager.task] -set title "Delete process $task_term_lower" -set context_bar [ad_context_bar "Delete process $task_term_lower"] +set title "[_ project-manager.lt_Delete_process_task_t]" +set context_bar [ad_context_bar "[_ project-manager.lt_Delete_process_task_t]"] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege write Index: openacs-4/packages/project-manager/www/process-use.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-use.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/process-use.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/process-use.adp 26 May 2005 09:34:29 -0000 1.2 @@ -3,6 +3,7 @@ @context_bar;noquote@ @form_definition_beg;noquote@ - @select_widget;noquote@ + @select_widget;noquote@ @form_definition_end;noquote@ + Index: openacs-4/packages/project-manager/www/process-use.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/process-use.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/process-use.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/process-use.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -30,18 +30,18 @@ # --------------------------------------------------------------- # -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] # terminology -set project_term [parameter::get -parameter "ProjectName" -default "Project"] -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set project_term [_ project-manager.Project] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] -set title "Use a process" -set context_bar [ad_context_bar [list "processes" "Processes"] "Use"] +set title "[_ project-manager.Use_a_process]" +set context_bar [ad_context_bar [list "processes" "[_ project-manager.Processes]"] "[_ project-manager.Use]"] # need to change this to show all the projects you're on by Index: openacs-4/packages/project-manager/www/processes.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/processes.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/processes.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/processes.adp 26 May 2005 09:34:29 -0000 1.2 @@ -2,9 +2,10 @@ -Processes +#project-manager.Processes# @context_bar@ + Index: openacs-4/packages/project-manager/www/processes.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/processes.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/processes.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/processes.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -30,17 +30,17 @@ # --------------------------------------------------------------- # # 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 task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] +set project_term [_ project-manager.Project] +set project_term_lower [_ project-manager.project] # set up context bar -set context_bar [list "Processes"] +set context_bar [list "[_ project-manager.Processes]"] # the unique identifier for this package set package_id [ad_conn package_id] -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] # permissions permission::require_permission -party_id $user_id -object_id $package_id -privilege read @@ -60,22 +60,22 @@ -key item_id \ -elements { one_line { - label "Subject" + label "[_ project-manager.Subject_1]" display_template { @processes.one_line@ } } description { - label "Description" + label "[_ project-manager.Description]" } instances { - label "Times used" + label "[_ project-manager.Times_used]" display_template { @processes.instances@ } } creation_date { - label "Created" + label "[_ project-manager.Created]" } delete { link_url_col delete_url @@ -88,7 +88,7 @@ narrow } \ -actions { - "Add process" "process-add-edit" "Add a process" + "#project-manager.Add_process#" "process-add-edit" "#project-manager.Add_a_process#" } \ -filters { orderby_process {} Index: openacs-4/packages/project-manager/www/project-assign-add.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-add.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/project-assign-add.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/project-assign-add.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -18,6 +18,9 @@ } -errors { } +# permissions +permission::require_permission -party_id $user_id -object_id $project_item_id -privilege write + set index 0 foreach user $user_id { @@ -34,9 +37,9 @@ } if {[llength $user_id] > 1} { - set assign "Assignments" + set assign "[_ project-manager.Assignments]" } else { - set assign "Assignment" + set assign "[_ project-manager.Assignment]" } -ad_returnredirect -message "$assign saved" $return_url +ad_returnredirect -message "[_ project-manager.assign_saved]" $return_url Index: openacs-4/packages/project-manager/www/project-assign-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/project-assign-edit-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/project-assign-edit-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -17,8 +17,11 @@ } -errors { } -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] +# permissions +permission::require_permission -party_id $user_id -object_id $project_item_id -privilege write + # remove assignments set current_assignees [pm::project::assign_remove_everyone \ -project_item_id $project_item_id] @@ -41,4 +44,4 @@ } -ad_returnredirect -message "Assignments saved" $return_url +ad_returnredirect -message "[_ project-manager.Assignments_saved]" $return_url Index: openacs-4/packages/project-manager/www/project-assign-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-edit.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/project-assign-edit.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/project-assign-edit.adp 26 May 2005 09:34:29 -0000 1.2 @@ -2,6 +2,7 @@ @title@ @context@ - + @html;noquote@ + Index: openacs-4/packages/project-manager/www/project-assign-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/project-assign-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/project-assign-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -20,8 +20,11 @@ set package_id [ad_conn package_id] # The id of the person logged in and browsing this page -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] +# permissions +permission::require_permission -party_id $user_id -object_id $project_item_id -privilege write + set subsite_id [ad_conn subsite_id] set user_group_id [application_group::group_id_from_package_id \ @@ -30,8 +33,8 @@ set project_name [pm::project::name -project_item_id $project_item_id] -set title "Edit project assignees" -set context [list [list "one?project_item_id=$project_item_id" "$project_name"] "Edit assignees"] +set title "[_ project-manager.lt_Edit_project_assignee]" +set context [list [list "one?project_item_id=$project_item_id" "$project_name"] "[_ project-manager.Edit_assignees]"] set project_task_assignee_url [export_vars -base project-assign-task-assignees {project_item_id return_url}] @@ -83,7 +86,7 @@ set role [lindex $role_list 1] append html " -

Assignee: $role_name

" +

[_ project-manager.Assignee_1] $role_name

" foreach assignee_list $assignee_list_of_lists { set name [lindex $assignee_list 0] Index: openacs-4/packages/project-manager/www/project-assign-remove.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-remove.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/project-assign-remove.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/project-assign-remove.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -17,6 +17,8 @@ } -errors { } +# permissions +permission::require_permission -party_id $user_id -object_id $project_item_id -privilege write foreach user $user_id { @@ -26,9 +28,9 @@ } if {[llength $user_id] > 1} { - set assign "Assignments" + set assign "[_ project-manager.Assignments]" } else { - set assign "Assignment" + set assign "[_ project-manager.Assignment]" } -ad_returnredirect -message "$assign removed" $return_url +ad_returnredirect -message "[_ project-manager.assign_removed]" $return_url Index: openacs-4/packages/project-manager/www/project-assign-task-assignees.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-assign-task-assignees.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/project-assign-task-assignees.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/project-assign-task-assignees.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -34,6 +34,10 @@ WHERE i.parent_id = :project_item_id and i.item_id = a.task_id + and exists (select 1 from acs_object_party_privilege_map ppm + where ppm.object_id = p.project_item_id + and ppm.privilege = 'read' + and ppm.party_id = :user_id) }] set parties [list] @@ -75,4 +79,4 @@ -send_email_p $send_email_p } -ad_returnredirect -message "Saved project assignments based on task assignments" [export_vars -base project-assign-edit {project_item_id return_url}] +ad_returnredirect -message "[_ project-manager.lt_Saved_project_assignm]" [export_vars -base project-assign-edit {project_item_id return_url}] Index: openacs-4/packages/project-manager/www/project-revisions.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/project-revisions.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/project-revisions.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/project-revisions.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -17,10 +17,11 @@ } -errors { } +permission::require_permission -object_id $project_item_id -privilege "read" -set title "Project Changes" +set title "[_ project-manager.Project_Changes]" -set context [list "one?project_item_id=$project_item_id Project" "View Revisions"] +set context [list "one?project_item_id=$project_item_id" "[_ project-manager.Project_1]" "[_ project-manager.View_Revisions]"] # Project Revisions, using list-builder --------------------------------- @@ -31,20 +32,20 @@ -key project_id \ -elements { project_id { - label "Subject" + label "[_ project-manager.Subject_1]" display_col project_name link_url_col item_url - link_html { title "View this revision" } + link_html { title "[_ project-manager.View_this_revision]" } display_template {@revisions.project_name@@revisions.project_name@} } description { - label "Description" + label "[_ project-manager.Description]" display_template { @revisions.description_rich;noquote@ } } planned_end_date { - label "Deadline" + label "[_ project-manager.Deadline_1]" } } \ -sub_class { Index: openacs-4/packages/project-manager/www/task-add-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/task-add-edit-2.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/task-add-edit-2.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -54,10 +54,13 @@ # --------------------------------------------------------------- # Set up # --------------------------------------------------------------- -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] set peeraddr [ad_conn peeraddr] +# permissions +permission::require_permission -party_id $user_id -object_id $package_id -privilege read + set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] set hours_day [pm::util::hours_day] @@ -111,10 +114,6 @@ # EDITING # ------- - permission::require_permission \ - -party_id $user_id \ - -object_id $package_id \ - -privilege write # ----------------------------------------------------- # find out information about the task before we edit it @@ -189,7 +188,9 @@ # edit task # --------- + permission::require_permission -party_id $user_id -object_id $task_item_id($num) -privilege write + set dead_line "[set end_date_${num}(year)]-[set end_date_${num}(month)]-[set end_date_${num}(day)]" set task_revision \ [pm::task::edit \ @@ -257,11 +258,6 @@ # USING PROCESS OR CREATING NEW TASKS # ----------------------------------- - permission::require_permission \ - -party_id $user_id \ - -object_id $package_id \ - -privilege create - if {[string is true $using_process_p]} { set process_instance_id [pm::process::instantiate \ @@ -293,6 +289,8 @@ # create task # ----------- + permission::require_permission -party_id $user_id -object_id $project_item_id($num) -privilege create + set task_item \ [pm::task::new \ -project_id $project_item_id($num) \ Index: openacs-4/packages/project-manager/www/task-add-edit-3.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-3.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/task-add-edit-3.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/task-add-edit-3.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -53,10 +53,12 @@ # --------------------------------------------------------------- # Set up # --------------------------------------------------------------- -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] set peeraddr [ad_conn peeraddr] + +# Not sure whether permissions check here on individual task is relevant. Check with Jade. if {[string is true $edit_p]} { permission::require_permission \ -party_id $user_id \ @@ -75,7 +77,7 @@ } -ad_progress_bar_begin -title "Updating status..." -message_1 "Please wait..." -message_2 "Will continue automatically" +ad_progress_bar_begin -title "[_ project-manager.Updating_status]" -message_1 "[_ project-manager.Please_wait]" -message_2 "[_ project-manager.lt_Will_continue_automat]" # compute the status for all projects @@ -86,14 +88,19 @@ foreach num $number { + permission::require_permission \ + -party_id $user_id \ + -object_id $project_item_id($num) \ + -privilege create + if {[lsearch $computed_projects $project_item_id($num)] < 0} { pm::project::compute_status $project_item_id($num) lappend computed_projects $project_item_id($num) } } -util_user_message -message "Saved tasks. You may need to refresh the screen to see the changes." +util_user_message -message "[_ project-manager.lt_Saved_tasks_You_may_n]" ad_progress_bar_end -url $return_url @@ -102,6 +109,11 @@ if {[string is true $using_process_p]} { + permission::require_permission \ + -party_id $user_id \ + -object_id $project_item_id(1) \ + -privilege create + if {[string is true $send_email_p]} { pm::process::email_alert \ -process_instance_id $process_instance_id \ @@ -119,6 +131,11 @@ foreach num $number { + permission::require_permission \ + -party_id $user_id \ + -object_id $task_item_id($num) \ + -privilege write + if {[exists_and_not_null comments($num)]} { # add comment to task pm::util::general_comment_add \ Index: openacs-4/packages/project-manager/www/task-add-edit-one-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/task-add-edit-one-oracle.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,11 @@ + + + oracle8.0 + + + + select to_char(sysdate,'YYYY-MM-DD') from dual + + + + Index: openacs-4/packages/project-manager/www/task-add-edit-one-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/task-add-edit-one-postgresql.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,11 @@ + + + postgresql7.3 + + + + select to_char(now(),'YYYY-MM-DD') from dual + + + + Index: openacs-4/packages/project-manager/www/task-add-edit-one.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/task-add-edit-one.adp 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,7 @@ + + @title;noquote@ + @context@ + +

+ +
Index: openacs-4/packages/project-manager/www/task-add-edit-one.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/task-add-edit-one.tcl 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,672 @@ +ad_page_contract { + + Add/edit form for tasks + + Needs to handle the following cases: +
    +
  • Adding a new task or tasks
  • +
  • Editing a task or tasks
  • +
  • Using a process to add new tasks
  • +
+ + @author jader@bread.com + @creation-date 2003-07-28 + @cvs-id $Id: task-add-edit-one.tcl,v 1.1 2005/05/26 09:34:29 maltes Exp $ + + @return context Context bar + @return title Page title. + + @param task_item_id list of tasks to edit, if there are any + @project_item_id The project these tasks are assigned to. + @param process_id The id for the process used, if any + @param process_task_id The process task IDs if there is a process used. + @param return_url +} { + task_item_id:integer,optional + {project_item_id:integer ""} + {process_id:integer ""} + {process_task_id:integer,multiple ""} + {return_url ""} + {assignee:array,multiple,optional} +} + + +# --------------------------------------------------------------- +# Set up +# --------------------------------------------------------------- +set user_id [ad_maybe_redirect_for_registration] +set package_id [ad_conn package_id] + +# use hour units or day units +set use_day_p [parameter::get -parameter "UseDayInsteadOfHour" -default "t"] +set hours_day [pm::util::hours_day] + +if {[string is true $use_day_p]} { + set work_units "[_ project-manager.days]" +} else { + set work_units "[_ project-manager.hrs]" +} + +# --------------------------------------------------------------- +# terminology +# --------------------------------------------------------------- +set project_term [_ project-manager.Project] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] +set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] + +# ------------------------- +# Set up flags to use later +# ------------------------- + +if {[exists_and_not_null task_item_id] || ![ad_form_new_p -key task_id]} { + set edit_p t + db_1row task_data {} + set logger_project [pm::project::get_logger_project -project_item_id $project_item_id] + set variable_options [logger::ui::variable_options -project_id $logger_project] + + set open_p [pm::project::open_p -project_item_id $project_item_id] + if {[string is false $open_p]} { + set project_options [list [list [pm::project::name -project_item_id $project_item_id] $project_item_id]] + } else { + set project_options [pm::project::get_list_of_open] + } +} else { + set edit_p f +} + +if {[exists_and_not_null process_id]} { + set using_process_p t +} else { + set using_process_p f +} + +# -------------------------------------------------------------------- +# if we are editing tasks, each task has its own project. We also want +# to look up all the old information to store it for later. We use +# this for comparison, to see what has changed. +# -------------------------------------------------------------------- + +if {![string is true $edit_p] &&[empty_string_p $project_item_id]} { + + ad_return_error "[_ project-manager.Project_missing]" "[_ project-manager.lt_For_new_tasks_a_proje]" + ad_script_abort +} + +# --------------------------------------------------------------- +# permissions and title setup, etc +# --------------------------------------------------------------- + +if {[string is true $edit_p]} { + + set title "[_ project-manager.lt_Edit_a_task_term_lowe]" + set context [list [list $return_url "[_ project-manager.Go_back]"] "[_ project-manager.Edit_task_term]"] + +} else { + + set title "[_ project-manager.Add_task_term_lower]" + set context [list [list [export_vars -base one {project_item_id}] "[pm::project::name -project_item_id $project_item_id]"] "[_ project-manager.New_task_term]"] + + permission::require_permission -party_id $user_id -object_id $project_item_id -privilege create + +} + +# ------------------------------------------------------------- +# Start creating the multirow we'll use to create the interface +# ------------------------------------------------------------- + +set boolean_options [list [list "[_ project-manager.Yes]" t] [list "[_ project-manager.No]" f]] +set format_options [list [list "[_ project-manager.Enhanced_Text]" "text/enhanced"] [list "[_ project-manager.Plain_Text]" "text/plain"] [list "[_ project-manager.Fixed-width_Text]" "text/fixed-width"] [list "[_ project-manager.HTML]" "text/html"]] +set percent_options [list [list "[_ project-manager.Open]" 0] [list "[_ project-manager.Closed]" 100]] +set dependency_options [pm::task::options_list \ + -edit_p $edit_p \ + -project_item_id $project_item_id \ + -number 1 \ + -current_number 1] + +set send_email_p t + +ad_form -name task_add_edit -export {task_item_id} \ + -form { + task_id:key + + {edit_p:text(hidden)} + {using_process_p:text(hidden)} + {return_url:text(hidden),optional} + {process_task_id:text(hidden),optional} + + {send_email_p:text(select) + {label "[_ project-manager.lt_Send_email_to_assigne]"} + {options $boolean_options} + } + } + +if {[string is true $using_process_p]} { + ad_form -extend -name task_add_edit \ + -form { + {process_name:text,optional + {label "[_ project-manager.Process_name]"} + {html {size 25}} + } + } +} + +ad_form -extend -name task_add_edit \ + -form { + {task_title:text + {label "[_ project-manager.Process_name]"} + {html {size 40}} + } + + {description:text(textarea),optional + {label "[_ project-manager.Description_1]"} + {html { rows 14 cols 40 wrap soft}} + } + + {description_mime_type:text(select),optional + {label "[_ project-manager.Format]"} + {options $format_options} + } + } + +if {[string is true $edit_p]} { + if {![empty_string_p [category_tree::get_mapped_trees $package_id]]} { + ad_form -extend -name task_add_edit -form { + {category_ids:integer(category),multiple {label "[_ project-manager.Categories]"} + {html {size 7}} {value {$task_id $package_id}} + } + } + } +} else { + if {![empty_string_p [category_tree::get_mapped_trees $package_id]]} { + ad_form -extend -name task_add_edit -form { + {category_ids:integer(category),multiple,optional {label "[_ project-manager.Categories]"} + {html {size 7}} {value {}} + } + } + } +} + +dtype::form::add_elements -prefix pm -object_type pm_task -object_id [value_if_exists task_id] -form task_add_edit -exclude_static -cr_widget none + +if {[string is true $edit_p]} { + ad_form -extend -name task_add_edit \ + -form { + {comment:text(textarea),optional + {label "[_ project-manager.Description_1]"} + {html { rows 7 cols 40 wrap soft}} + {section "[_ project-manager.Comment]"} + } + + {comment_mime_type:text(select),optional + {label "[_ project-manager.Format]"} + {options $format_options} + {section "[_ project-manager.Comment]"} + } + } +} else { + ad_form -extend -name task_add_edit \ + -form { + {comment:text(hidden) + {value ""} + } + + {comment_mime_type:text(hidden) + {value "text/plain"} + } + } +} + +if {!$use_uncertain_completion_times_p} { + ad_form -extend -name task_add_edit \ + -form { + {estimated_hours_work:text + {label " "} + {html {size 5}} + {after_html $work_units} + {section "[_ project-manager.Work_required]"} + } + } +} elseif {[string is true $use_day_p]} { + ad_form -extend -name task_add_edit \ + -form { + {estimated_days_work_min:text + {label "[_ project-manager.Min]"} + {html {size 5}} + {after_html $work_units} + {section "[_ project-manager.Work_required]"} + } + + {estimated_days_work_max:text + {label "[_ project-manager.Max]"} + {html {size 5}} + {after_html $work_units} + {section "[_ project-manager.Work_required]"} + } + } +} else { + ad_form -extend -name task_add_edit \ + -form { + {estimated_hours_work_min:text + {label "[_ project-manager.Min]"} + {html {size 5}} + {after_html $work_units} + {section "[_ project-manager.Work_required]"} + } + + {estimated_hours_work_max:text + {label "[_ project-manager.Max]"} + {html {size 5}} + {after_html $work_units} + {section "[_ project-manager.Work_required]"} + } + } +} + +ad_form -extend -name task_add_edit \ + -form { + {task_end_date:text(text),optional + {label "[_ project-manager.lt_Deadline_task]"} + {html {id sel1}} + {after_html { \[y-m-d \] + }} + } + } + +if {[string is true $edit_p]} { + ad_form -extend -name task_add_edit \ + -form { + {project_item_id:text(select),optional + {label $project_term} + {options $project_options} + } + } +} else { + ad_form -extend -name task_add_edit \ + -form { + {project_item_id:text(hidden)} + } +} + +ad_form -extend -name task_add_edit \ + -form { + {dependency:text(select),optional + {label "[_ project-manager.Dependency]"} + {options $dependency_options} + } + + {priority:text,optional + {label "[_ project-manager.Priority]"} + {html {size 4}} + {help_text "[_ project-manager.lt_Enter_a_number_for_or]"} + } + } + +if {[string is true $edit_p]} { + ad_form -extend -name task_add_edit \ + -form { + {percent_complete:text,optional + {label "[_ project-manager.Status]"} + {html {size 4}} + {help_text "[_ project-manager.lt_Enter_100_to_close_th_1]"} + } + + {hours:text,optional + {label "[_ project-manager.Quantity]"} + {html {size 4}} + {section "[_ project-manager.Log_entry]"} + } + + {logger_variable_id:text(select),optional + {label " "} + {options $variable_options} + {section "[_ project-manager.Log_entry]"} + } + + {log_date:text(text),optional + {label "[_ project-manager.Date_1]"} + {html {id sel2}} + {after_html { \[y-m-d \] + }} + {section "[_ project-manager.Log_entry]"} + } + + {log:text,optional + {label "[_ project-manager.Description_1]"} + {html {size 30}} + {help_text "[_ project-manager.lt_You_can_optionally_lo]"} + {section "[_ project-manager.Log_entry]"} + } + } +} elseif {[string is true $using_process_p]} { + ad_form -extend -name task_add_edit \ + -form { + {percent_complete:text(select),optional + {label "[_ project-manager.Status]"} + {options $percent_options} + } + } +} else { + ad_form -extend -name task_add_edit \ + -form { + {percent_complete:text(hidden)} + } +} + +set roles_list [pm::role::select_list_filter] +set assignee_options [pm::util::subsite_assignees_list_of_lists] + +# Get assignments for when using processes +if {[string is true $using_process_p]} { + # PROCESS + set task_assignee_list [pm::process::task_assignee_role_list -process_task_id $process_task_id] +} elseif {[string is true $edit_p]} { + # EDITING + set task_assignee_list [pm::task::assignee_role_list -task_item_id $task_item_id] +} else { + # NEW + set task_assignee_list [list] +} + +foreach role_list $roles_list { + set role_name [lindex $role_list 0] + set role [lindex $role_list 1] + + set assignees [list] + foreach one_assignee $assignee_options { + set name [lindex $one_assignee 0] + set person_id [lindex $one_assignee 1] + + if {[lsearch $task_assignee_list [list $person_id $role]] >= 0} { + lappend assignees $person_id + } + } + + ad_form -extend -name task_add_edit \ + -form [list \ + [list assignee.$role\:text(checkbox),optional,multiple \ + [list label $role_name] \ + [list options $assignee_options] \ + [list section "[_ project-manager.Assignees]"] \ + [list values $assignees] \ + ] ] +} + +ad_form -extend -name task_add_edit -new_request { + set send_email_p t + set task_title "" + set description "" + set description_mime_type "text/plain" + set estimated_hours_work 0 + set estimated_hours_work_min 0 + set estimated_hours_work_max 0 + set estimated_days_work_min 0 + set estimated_days_work_max 0 + set percent_complete 0 + set task_end_date [db_string today {}] + set dependency "" + set priority 0 +} -edit_request { + db_1row get_task_data {} + + set hours_day [pm::util::hours_day] + set estimated_days_work_min [expr $estimated_hours_work_min / $hours_day] + set estimated_days_work_max [expr $estimated_hours_work_max / $hours_day] + + set log_date [db_string today {}] + set logger_variable_id [logger::project::get_primary_variable -project_id $logger_project] +} -validate { +} -on_submit { + set hours_day [pm::util::hours_day] + set status_id [pm::task::default_status_open] + + set end_date_split [split $task_end_date "-"] + set end_date(day) [lindex [set end_date_split] 2] + set end_date(month) [lindex [set end_date_split] 1] + set end_date(year) [lindex [set end_date_split] 0] + set end_date(format) "" + ad_page_contract_filter_proc_date end_date end_date + set end_date_sql [pm::util::datenvl -value $end_date(date) -value_if_null "null" -value_if_not_null "to_timestamp('$end_date(date)','YYYY-MM-DD')"] + + if {[info exists log_date]} { + set log_date_split [split $log_date "-"] + set log_date_array(day) [lindex [set log_date_split] 2] + set log_date_array(month) [lindex [set log_date_split] 1] + set log_date_array(year) [lindex [set log_date_split] 0] + set log_date_array(format) "" + ad_page_contract_filter_proc_date log_date_array log_date_array + } + + if {[string is true $use_day_p]} { + # set the hours work + if {[string is true $use_uncertain_completion_times_p]} { + set estimated_hours_work_min \ + [expr $estimated_days_work_min * $hours_day] + set estimated_hours_work_max \ + [expr $estimated_days_work_max * $hours_day] + } else { + set estimated_hours_work \ + [expr $estimated_days_work * $hours_day] + } + } + + if {$estimated_hours_work_min > $estimated_hours_work_max} { + set temp $estimated_hours_work_max + set estimated_hours_work_max $estimated_hours_work_min + set estimated_hours_work_min $temp + } + + if {[string is true $use_uncertain_completion_times_p]} { + set estimated_hours_work [expr .5 * ($estimated_hours_work_max - $estimated_hours_work_min) + $estimated_hours_work_min] + } else { + set estimated_hours_work_min $estimated_hours_work + set estimated_hours_work_max $estimated_hours_work + } + +} -new_data { + db_transaction { + + # ----------------------------------- + # USING PROCESS OR CREATING NEW TASKS + # ----------------------------------- + + if {[string is true $using_process_p]} { + set process_instance_id [pm::process::instantiate \ + -process_id $process_id \ + -project_item_id $project_item_id \ + -name $process_name] + } else { + set process_instance_id "" + } + + # ----------- + # create task + # ----------- + + permission::require_permission -party_id $user_id -object_id $project_item_id -privilege create + + set task_id [dtype::form::process \ + -prefix pm \ + -object_type pm_task \ + -object_id $task_id \ + -form task_add_edit \ + -cr_widget none \ + -defaults [list title $task_title description $description mime_type $description_mime_type context_id $project_item_id parent_id $project_item_id] \ + -default_fields {percent_complete {end_date $end_date_sql} estimated_hours_work estimated_hours_work_min estimated_hours_work_max priority} \ + -exclude_static] + + set task_item_id [db_string get_item_id {}] + + db_dml new_task {} + + if {$percent_complete >= 100} { + pm::task::close -task_item_id $task_item_id + } + + # ---------------- + # add in assignees + # ---------------- + + if {[array exists assignee]} { + foreach role [array names assignee] { + foreach person_id $assignee($role) { + pm::task::assign \ + -task_item_id $task_item_id \ + -party_id $person_id \ + -role_id $role + } + } + } + + # ------------------- + # add in dependencies + # ------------------- + + # if there is a numXX as the dependency, then we are relying + # on new tasks that had not been created yet. So we match them + # up with the new tasks we've just created. + if {[regexp {num(.*)} $dependency match parent]} { + set dependency $task_item_id($parent) + } + + if {[exists_and_not_null dependency]} { + pm::task::dependency_add \ + -task_item_id $task_item_id \ + -parent_id $dependency \ + -dependency_type finish_before_start \ + -project_item_id $project_item_id + } + + if {[exists_and_not_null category_ids]} { + category::map_object -remove_old -object_id $task_id $category_ids + } + + callback pm::task_new -package_id $package_id -task_id $task_item_id + } +} -edit_data { + db_transaction { + + pm::task::clear_client_properties \ + -task_item_id $task_item_id + + # ------------------------------------- + # Log hours and other variables to task + # ------------------------------------- + + set logger_project [pm::project::get_logger_project \ + -project_item_id $project_item_id] + + + if {[exists_and_not_null hours]} { + + pm::project::log_hours \ + -logger_project_id $logger_project \ + -variable_id $logger_variable \ + -value $hours \ + -description $log \ + -task_item_id $task_item_id \ + -project_item_id $project_item_id \ + -update_status_p f \ + -party_id $user_id \ + -timestamp_ansi $log_date_array(date) + } + + # --------- + # edit task + # --------- + + permission::require_permission -party_id $user_id -object_id $task_item_id -privilege write + + set task_id [dtype::form::process \ + -prefix pm \ + -object_type pm_task \ + -object_id $task_id \ + -form task_add_edit \ + -cr_widget none \ + -defaults [list title $task_title description $description mime_type $description_mime_type context_id $project_item_id parent_id $project_item_id] \ + -default_fields {percent_complete {end_date $end_date_sql} estimated_hours_work estimated_hours_work_min estimated_hours_work_max priority} \ + -exclude_static] + + db_dml update_task {} + + if {$percent_complete >= 100} { + pm::task::close -task_item_id $task_item_id + } + + # -------------------------- + # remove all old assignments + # -------------------------- + pm::task::assign_remove_everyone \ + -task_item_id $task_item_id + + # ----------------------- + # remove all dependencies + # ----------------------- + pm::task::dependency_delete_all \ + -task_item_id $task_item_id + + + # ---------------- + # add in assignees + # ---------------- + + if {[array exists assignee]} { + foreach role [array names assignee] { + foreach person_id $assignee($role) { + pm::task::assign \ + -task_item_id $task_item_id \ + -party_id $person_id \ + -role_id $role + } + } + } + + # ----------------------- + # add in the dependencies + # ----------------------- + + if {[exists_and_not_null dependency]} { + pm::task::dependency_add \ + -task_item_id $task_item_id \ + -parent_id $dependency \ + -dependency_type finish_before_start \ + -project_item_id $project_item_id + } + + if {[exists_and_not_null category_ids]} { + category::map_object -remove_old -object_id $task_id $category_ids + } + + callback pm::task_edit -package_id $package_id -task_id $task_item_id + } +} -after_submit { + set number 1 + set comments(1) $comment + set comments_mime_type(1) $comment_mime_type + + ad_set_client_property -persistent f -- \ + project-manager \ + project_item_id(1) \ + $project_item_id + + ad_set_client_property -persistent f -- \ + project-manager \ + task_item_id(1) \ + $task_item_id + + ad_returnredirect \ + [export_vars -base task-add-edit-3 \ + { \ + number:multiple \ + using_process_p \ + process_instance_id \ + edit_p \ + comments:array \ + comments_mime_type:array \ + send_email_p \ + return_url}] + + ad_script_abort +} + +ad_return_template Index: openacs-4/packages/project-manager/www/task-add-edit-one.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit-one.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager/www/task-add-edit-one.xql 26 May 2005 09:34:29 -0000 1.1 @@ -0,0 +1,49 @@ + + + + + + select i.latest_revision as task_id, t.parent_id as project_item_id + from cr_items i, pm_tasks_revisionsx t + where i.item_id = :task_item_id + and t.object_id = i.latest_revision + + + + + + select title as task_title, description, mime_type as description_mime_type, + percent_complete, to_char(end_date,'YYYY-MM-DD') as task_end_date, + estimated_hours_work, estimated_hours_work_min, + estimated_hours_work_max, priority + from pm_tasks_revisionsi + where object_id = :task_id + + + + + + select item_id + from cr_revisions + where revision_id = :task_id + + + + + + insert into pm_tasks + (task_id, task_number, status, process_instance) + values + (:task_item_id, 1, :status_id, :process_instance_id) + + + + + + update pm_tasks + set status = :status_id + where task_id = :task_item_id + + + + Index: openacs-4/packages/project-manager/www/task-add-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/task-add-edit.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/task-add-edit.adp 26 May 2005 09:34:29 -0000 1.2 @@ -8,14 +8,14 @@ @export_vars;noquote@ - Send email to assignees? + #project-manager.lt_Send_email_to_assigne# - Process name + #project-manager.Process_name# @@ -55,55 +55,55 @@
Subject:*

+

#project-manager.Subject#*

- Description:
+ #project-manager.Description_1#

- Format: + #project-manager.Format#

- Comment
+ #project-manager.Comment_1#

- Format: + #project-manager.Format# @@ -121,16 +121,16 @@

- + - + - + @@ -141,11 +141,11 @@ - + - + @@ -159,7 +159,7 @@
- Deadline: @tasks.end_date_html;noquote@

+ #project-manager.lt_Deadline_tasksend_dat#

@@ -169,14 +169,14 @@

- Dependency:
+ #project-manager.Dependency#

- Priority: + #project-manager.Priority#
[i] - Enter a number for ordering the priority. 0 is the default - and also the lowest priority. + #project-manager.lt_Enter_a_number_for_or#

- Status: + #project-manager.Status# %
[i] - Enter 100% to close the @task_term_lower@, or less to open it. + #project-manager.lt_Enter_100_to_close_th_1#
- Status: + #project-manager.Status# @@ -219,10 +218,10 @@

- Log entry: + #project-manager.Log_entry#

Work required:*#project-manager.Work_required#*
Min:
#project-manager.Min# @work_units;noquote@
Max:
#project-manager.Max# @work_units;noquote@
Min:
#project-manager.Min# @work_units;noquote@
Max:
#project-manager.Max# @work_units;noquote@
- + - + - + @@ -317,3 +316,4 @@
Quantity:#project-manager.Quantity# @@ -231,14 +230,14 @@
Date:#project-manager.Date_1# <%= [set today_html@tasks.task_item_id@] %>
Description:#project-manager.Description_1# @@ -255,7 +254,7 @@ [i] - You can optionally log time worked here. + #project-manager.lt_You_can_optionally_lo#

+ Index: openacs-4/packages/project-manager/www/task-add-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-add-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/task-add-edit.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/task-add-edit.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -36,10 +36,15 @@ } +if {$new_tasks == "1"} { + ad_returnredirect [export_vars -base task-add-edit-one {task_item_id project_item_id process_id process_task_id:multiple return_url}] + ad_script_abort +} + # --------------------------------------------------------------- # Set up # --------------------------------------------------------------- -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set package_id [ad_conn package_id] # use hour units or day units @@ -55,9 +60,9 @@ # --------------------------------------------------------------- # terminology # --------------------------------------------------------------- -set project_term [parameter::get -parameter "ProjectName" -default "Project"] -set task_term [parameter::get -parameter "TaskName" -default "Task"] -set task_term_lower [parameter::get -parameter "taskname" -default "task"] +set project_term [_ project-manager.Project] +set task_term [_ project-manager.Task] +set task_term_lower [_ project-manager.task] set use_uncertain_completion_times_p [parameter::get -parameter "UseUncertainCompletionTimesP" -default "1"] # ------------------------- @@ -103,33 +108,25 @@ } elseif {[empty_string_p $project_item_id]} { - ad_return_error "Project missing" "For new tasks, a project must be passed in" + ad_return_error "[_ project-manager.Project_missing]" "[_ project-manager.lt_For_new_tasks_a_proje]" ad_script_abort } # --------------------------------------------------------------- # permissions and title setup, etc # --------------------------------------------------------------- -if {[string is true $edit_p]} { +if {[string is true $edit_p]} { - set title "Edit a $task_term_lower" - set context [list [list $return_url "Go back"] "Edit $task_term"] + set title "[_ project-manager.lt_Edit_a_task_term_lowe]" + set context [list [list $return_url "[_ project-manager.Go_back]"] "[_ project-manager.Edit_task_term]"] - permission::require_permission \ - -party_id $user_id \ - -object_id $package_id \ - -privilege write - } else { - set title "Add $task_term_lower" - set context [list [list "one?item_id=$project_item_id" "One $project_term"] "New $task_term"] + set title "[_ project-manager.Add_task_term_lower]" + set context [list [list "one?project_item_id=$project_item_id" "[pm::project::name -project_item_id $project_item_id]"] "[_ project-manager.New_task_term]"] - permission::require_permission \ - -party_id $user_id \ - -object_id $package_id \ - -privilege create + permission::require_permission -party_id $user_id -object_id $project_item_id -privilege create } @@ -162,12 +159,6 @@ if {[string is true $edit_p]} { -# set today_html [pm::task::today_html \ - \# -month_target log_month \ - \# -day_target log_day \ - \# -year_target log_year] - - # ------- # EDITING # ------- @@ -187,6 +178,9 @@ foreach task $task_item_id { + # Check permission for user to edit the task + permission::require_permission -party_id $user_id -object_id $task -privilege write + set this_project $task_project_item_id($task) set project_options [pm::project::select_list_of_open \ @@ -199,14 +193,9 @@ -project_id $logger_project] set today_date [db_string today "select to_date(sysdate,'YYYY-MM-DD') from dual"] set today_html$task "
y-m-d " + + set end_date_html "
y-m-d " - #set end_date_html [pm::task::date_html \ - \# -selected_day $task_end_date_day($task) \ - \# -selected_month $task_end_date_month($task) \ - \# -selected_year $task_end_date_year($task)] - - set end_date_html "
y-m-d " - set assignee_html [pm::task::assignee_html \ -task_item_id $task \ -number $number] @@ -313,12 +302,6 @@ set new_tasks [llength $process_tasks] -# set end_date_html [pm::task::date_html] - - - set end_date_html "
y-m-d " - - set number 1 set total_number [llength $process_tasks] @@ -350,6 +333,7 @@ [pm::util::days_work \ -hours_work $process_estimated_hours_work_max($pt)] + set end_date_html "
y-m-d " # make sure deps are working. @@ -382,13 +366,14 @@ # NEW # --- -set today_date [db_string today "select to_date(sysdate,'YYYY-MM-DD') from dual"] - # set end_date_html [pm::task::date_html] + set today_date [db_string today "select to_date(sysdate,'YYYY-MM-DD') from dual"] + # set end_date_html [pm::task::date_html] for {set i 1} {$i <= $new_tasks} {incr i} { set end_date_html "
y-m-d " set assignee_html [pm::task::assignee_html \ + -project_item_id $project_item_id \ -number $i] set dependency_options_full [pm::task::options_list_html \ Index: openacs-4/packages/project-manager/www/task-assign-add.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-assign-add.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/task-assign-add.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/task-assign-add.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -18,6 +18,9 @@ } -errors { } +# permissions +permission::require_permission -party_id $user_id -object_id $task_item_id -privilege write + set present_user_id [ad_conn user_id] set peeraddr [ad_conn peeraddr] @@ -34,7 +37,7 @@ -role_id $role_id \ -party_id $user - append comment "
  • Added: [person::name -person_id $user]
  • " + append comment "
  • [_ project-manager.Added] [person::name -person_id $user]
  • " incr index } @@ -53,9 +56,9 @@ if {[llength $user_id] > 1} { - set assign "Assignments" + set assign "[_ project-manager.Assignments]" } else { - set assign "Assignment" + set assign "[_ project-manager.Assignment]" } -ad_returnredirect -message "$assign saved" $return_url +ad_returnredirect -message "[_ project-manager.assign_saved]" $return_url Index: openacs-4/packages/project-manager/www/task-assign-remove.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-assign-remove.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/project-manager/www/task-assign-remove.tcl 30 Apr 2005 06:59:34 -0000 1.2 +++ openacs-4/packages/project-manager/www/task-assign-remove.tcl 26 May 2005 09:34:29 -0000 1.3 @@ -1,4 +1,4 @@ -# +# ad_page_contract { @@ -17,6 +17,9 @@ } -errors { } +# permissions +permission::require_permission -party_id $user_id -object_id $task_item_id -privilege write + set present_user_id [ad_conn user_id] set peeraddr [ad_conn peeraddr] @@ -34,7 +37,7 @@ -party_id $user if {[string is true $assigned_p]} { - lappend comment_list "
  • Removed: [person::name -person_id $user]
  • " + lappend comment_list "
  • [_ project-manager.Removed]: [person::name -person_id $user]
  • " } } @@ -56,10 +59,10 @@ } if {[llength $user_id] > 1} { - set assign "Assignments" + set assign "[_ project-manager.Assignments]" } else { - set assign "Assignment" + set assign "[_ project-manager.Assignment]" } -ad_returnredirect -message "$assign removed" $return_url +ad_returnredirect -message "[_ project-manager.assign_removed]" $return_url Index: openacs-4/packages/project-manager/www/task-calendar.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-calendar.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/project-manager/www/task-calendar.adp 29 Apr 2005 17:43:38 -0000 1.1 +++ openacs-4/packages/project-manager/www/task-calendar.adp 26 May 2005 09:34:29 -0000 1.2 @@ -4,8 +4,8 @@ @context@@header_stuff;noquote@ - View options - Key + #project-manager.View_options# + #project-manager.Key# @@ -15,11 +15,11 @@ -

    View options

    +

    #project-manager.View_options#

    @hide_show_closed;noquote@ -

    Key

    +

    #project-manager.Key#

    @@ -28,7 +28,7 @@
    -

    Users to view

    +

    #project-manager.Users_to_view#

    @@ -46,3 +46,4 @@ + Index: openacs-4/packages/project-manager/www/task-calendar.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager/www/task-calendar.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/project-manager/www/task-calendar.tcl 30 Apr 2005 07:17:46 -0000 1.3 +++ openacs-4/packages/project-manager/www/task-calendar.tcl 26 May 2005 09:34:29 -0000 1.4 @@ -20,11 +20,11 @@ roles:multirow } -set user_id [auth::require_login] +set user_id [ad_maybe_redirect_for_registration] set date [calendar::adjust_date -date $date -julian_date $julian_date] -set title "Task calendar" +set title "[_ project-manager.Task_calendar]" set context [list $title] set header_stuff "