Index: openacs-4/packages/project-manager-portlet/project-manager-portlet.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/project-manager-portlet.info,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/project-manager-portlet.info 10 Jun 2005 18:27:34 -0000 1.1 @@ -0,0 +1,28 @@ + + + + + Project Manager Portlet + Project Manager Portlets + f + f + + + Bjoern Kiesbye + Malte Sussdorff + Portlet for the Project Manager. + Cognovis + Portlet for the Project Manager. + 0 + + + + + + + + + + + + Index: openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-portlet-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-portlet-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-portlet-create.sql 10 Jun 2005 18:27:34 -0000 1.1 @@ -0,0 +1,274 @@ +-- +-- Copyright (C) 2001, 2002 MIT +-- +-- This file is part of dotLRN. +-- +-- dotLRN is free software; you can redistribute it and/or modify it under the +-- terms of the GNU General Public License as published by the Free Software +-- Foundation; either version 2 of the License, or (at your option) any later +-- version. +-- +-- dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +-- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-- details. +-- + +-- +-- /project-manager-portlet/sql/oracle/project-manager-portlet-create.sql +-- + +-- Creates Project Manager portlet + +-- Copyright (C) 2005 Cognovis +-- @author Bjoern Kiesbye (kiesbye@theservice.de) +-- @creation-date 2005-08-06 + + +-- This is free software distributed under the terms of the GNU Public +-- License version 2 or higher. Full text of the license is available +-- from the GNU Project: http://www.fsf.org/copyleft/gpl.html + +create function inline_0() +returns integer as ' +declare + ds_id portal_datasources.datasource_id%TYPE; +begin + ds_id := portal_datasource__new( + ''project_manager_portlet'', + ''Displays the Project Manager'' + ); + + + -- the standard 4 params + + -- shadeable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''shadeable_p'', + ''t'' +); + + + -- hideable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''hideable_p'', + ''t'' +); + + -- user_editable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''user_editable_p'', + ''t'' +); + + -- shaded_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''shaded_p'', + ''f'' +); + + -- link_hideable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''link_hideable_p'', + ''t'' +); + + + perform portal_datasource__set_def_param( + ds_id, + ''t'', + ''f'', + ''scoped_p'', + ''t'' + ); + + + -- Project-Manager-specific params + + -- Project_manager_id must be configured + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_id'', + '''' + ); + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_orderby'', + '''' + ); + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_status_id'', + '''' + ); + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_searchterm'', + '''' + ); + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_bulk_p'', + '''' + ); + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_action_p'', + '''' + ); + + + + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + -- create the implementation + foo := acs_sc_impl__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''project_manager_portlet'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + + -- add all the hooks + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''GetMyName'', + ''project_manager_portlet::get_my_name'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''GetPrettyName'', + ''project_manager_portlet::get_pretty_name'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''Link'', + ''project_manager_portlet::link'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''AddSelfToPage'', + ''project_manager_portlet::add_self_to_page'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''Show'', + ''project_manager_portlet::show'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''Edit'', + ''project_manager_portlet::edit'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_portlet'', + ''RemoveSelfFromPage'', + ''project_manager_portlet::remove_self_from_page'', + ''TCL'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + + -- Add the binding + perform acs_sc_binding__new ( + ''portal_datasource'', + ''project_manager_portlet'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + +\i project-manager-task-portlet-create.sql + Index: openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-task-portlet-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-task-portlet-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/sql/postgresql/project-manager-task-portlet-create.sql 10 Jun 2005 18:27:34 -0000 1.1 @@ -0,0 +1,232 @@ +-- +-- Copyright (C) 2001, 2002 MIT +-- +-- This file is part of dotLRN. +-- +-- dotLRN is free software; you can redistribute it and/or modify it under the +-- terms of the GNU General Public License as published by the Free Software +-- Foundation; either version 2 of the License, or (at your option) any later +-- version. +-- +-- dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +-- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-- details. +-- + +-- +-- /project-manager-portlet/sql/oracle/project-manager-portlet-create.sql +-- + +-- Creates Project Manager portlet + +-- Copyright (C) 2005 Cognovis +-- @author Bjoern Kiesbye (kiesbye@theservice.de) +-- @creation-date 2005-08-06 + + +-- This is free software distributed under the terms of the GNU Public +-- License version 2 or higher. Full text of the license is available +-- from the GNU Project: http://www.fsf.org/copyleft/gpl.html + +create function inline_0() +returns integer as ' +declare + ds_id portal_datasources.datasource_id%TYPE; +begin + ds_id := portal_datasource__new( + ''project_manager_task_portlet'', + ''Displays the Project Manager'' + ); + + + -- the standard 4 params + + -- shadeable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''shadeable_p'', + ''t'' +); + + + -- hideable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''hideable_p'', + ''t'' +); + + -- user_editable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''user_editable_p'', + ''t'' +); + + -- shaded_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''shaded_p'', + ''f'' +); + + -- link_hideable_p + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''t'', + ''link_hideable_p'', + ''t'' +); + + + perform portal_datasource__set_def_param( + ds_id, + ''t'', + ''f'', + ''scoped_p'', + ''t'' + ); + + + -- Project-Manager-Task-specific params + + -- Project_manager_id must be configured + + perform portal_datasource__set_def_param ( + ds_id, + ''t'', + ''f'', + ''project_manager_id'', + '''' + ); + + + + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + -- create the implementation + foo := acs_sc_impl__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''project_manager_task_portlet'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + + -- add all the hooks + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''GetMyName'', + ''project_manager_task_portlet::get_my_name'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''GetPrettyName'', + ''project_manager_task_portlet::get_pretty_name'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''Link'', + ''project_manager_task_portlet::link'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''AddSelfToPage'', + ''project_manager_task_portlet::add_self_to_page'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''Show'', + ''project_manager_task_portlet::show'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''Edit'', + ''project_manager_task_portlet::edit'', + ''TCL'' + ); + + foo := acs_sc_impl_alias__new ( + ''portal_datasource'', + ''project_manager_task_portlet'', + ''RemoveSelfFromPage'', + ''project_manager_task_portlet::remove_self_from_page'', + ''TCL'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + + +create function inline_0() +returns integer as ' +declare + foo integer; +begin + + -- Add the binding + perform acs_sc_binding__new ( + ''portal_datasource'', + ''project_manager_task_portlet'' + ); + + return 0; + +end;' language 'plpgsql'; +select inline_0(); +drop function inline_0(); + + Index: openacs-4/packages/project-manager-portlet/tcl/project-manager-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/tcl/project-manager-portlet-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/tcl/project-manager-portlet-procs.tcl 10 Jun 2005 18:27:34 -0000 1.1 @@ -0,0 +1,128 @@ +# +# Copyright (C) 2005 Cognovis +# Author: Bjoern Kiesbye (kiesbye@theservice.de) + +# This file is part of dotLRN. +# +# dotLRN is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# + +ad_library { + + Procedures to support the Project Manager + + + @author kiesbye@theservice.de + @cvs-id $Id: project-manager-portlet-procs.tcl + +} + +namespace eval project_manager_portlet { + + ad_proc -private my_package_key { + } { + return "project-manager-portlet" + } + + ad_proc -private get_my_name { + } { + return "project_manager_portlet" + } + + ad_proc -public get_pretty_name { + } { + return "Project Manager Portlet" + } + + ad_proc -public link { + } { + return "" + } + + ad_proc -public add_self_to_page { + {-portal_id:required} + {-project_manager_id:required} + {-page_name ""} + {-pretty_name ""} + {-force_region ""} + {-scoped_p ""} + {-param_action "overwrite"} + {project_manager_bulk_p "1"} + {project_manager_action_p "1"} + {project_manager_status_id "0"} + {project_manager_orderby "default"} + } { + Adds a Project Manager Portlet to the given page. + + @param portal_id The page to add self to + @param project_manager_id The Project Manager instance to add + + @return element_id The new element's id + } { + + # allow overrides of pretty_name and force_region + if {[empty_string_p $pretty_name]} { + set pretty_name [get_pretty_name] + } + + if {[empty_string_p $force_region]} { + set force_region [parameter::get_from_package_key \ + -package_key [my_package_key] \ + -parameter "force_region" + ] + } + + set extra_params "" + + if {![empty_string_p $scoped_p]} { + set extra_params [list scoped_p $scoped_p project_manager_id $project_manager_id project_manager_bulk_p $project_manager_bulk_p project_manager_action_p $project_manager_action_p project_manager_status_id $project_manager_status_id project_manager_orderby $project_manager_orderby] + } + + return [portal::add_element_parameters \ + -portal_id $portal_id \ + -page_name $page_name \ + -portlet_name [get_my_name] \ + -pretty_name $pretty_name \ + -force_region $force_region \ + -key project_manager_id \ + -value $project_manager_id \ + -param_action $param_action \ + -extra_params $extra_params + ] + } + + ad_proc -public remove_self_from_page { + {-portal_id:required} + {-project_manager_id:required} + } { + Removes a Project Manager from the given page. + + @param portal_id The page to remove self from + @param project_manager_id + } { + portal::remove_element_parameters \ + -portal_id $portal_id \ + -portlet_name [get_my_name] \ + -key project_manager_id \ + -value $project_manager_id + } + + ad_proc -public show { + cf + } { + } { + portal::show_proc_helper \ + -package_key [my_package_key] \ + -config_list $cf + + } + +} Index: openacs-4/packages/project-manager-portlet/tcl/project-manager-task-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/tcl/project-manager-task-portlet-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/tcl/project-manager-task-portlet-procs.tcl 10 Jun 2005 18:27:34 -0000 1.1 @@ -0,0 +1,125 @@ +# +# Copyright (C) 2005 Cognovis +# Author: Bjoern Kiesbye (kiesbye@theservice.de) + +# This file is part of dotLRN. +# +# dotLRN is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# + +ad_library { + + Procedures to support the Project Manager + + + @author kiesbye@theservice.de + @cvs-id $Id: project-manager-portlet-procs.tcl + +} + +namespace eval project_manager_task_portlet { + + ad_proc -private my_package_key { + } { + return "project-manager-portlet" + } + + ad_proc -private get_my_name { + } { + return "project_manager_task_portlet" + } + + ad_proc -public get_pretty_name { + } { + return "Project Manager Task Portlet" + } + + ad_proc -public link { + } { + return "project-manager" + } + + ad_proc -public add_self_to_page { + {-portal_id:required} + {-project_manager_id:required} + {-page_name ""} + {-pretty_name ""} + {-force_region ""} + {-scoped_p ""} + {-param_action "overwrite"} + + } { + Adds a Project Manager Task Portlet to the given page. + + @param portal_id The page to add self to + @param project_manager_id The Project Manager instance to add + + @return element_id The new element's id + } { + + # allow overrides of pretty_name and force_region + if {[empty_string_p $pretty_name]} { + set pretty_name [get_pretty_name] + } + + if {[empty_string_p $force_region]} { + set force_region [parameter::get_from_package_key \ + -package_key [my_package_key] \ + -parameter "force_region" + ] + } + + set extra_params "" + + if {![empty_string_p $scoped_p]} { + set extra_params [list scoped_p $scoped_p project_manager_id $project_manager_id] + } + + return [portal::add_element_parameters \ + -portal_id $portal_id \ + -page_name $page_name \ + -portlet_name [get_my_name] \ + -pretty_name $pretty_name \ + -force_region $force_region \ + -key project_manager_id \ + -value $project_manager_id \ + -param_action $param_action \ + -extra_params $extra_params + ] + } + + ad_proc -public remove_self_from_page { + {-portal_id:required} + {-project_manager_id:required} + } { + Removes a Project Manager from the given page. + + @param portal_id The page to remove self from + @param project_manager_id + } { + portal::remove_element_parameters \ + -portal_id $portal_id \ + -portlet_name [get_my_name] \ + -key project_manager_id \ + -value $project_manager_id + } + + ad_proc -public show { + cf + } { + } { + portal::show_proc_helper \ + -package_key [my_package_key] \ + -config_list $cf \ + -template_src "project-manager-task-portlet" + } + +} Index: openacs-4/packages/project-manager-portlet/www/index-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/index-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/index-postgresql.xql 10 Jun 2005 18:27:35 -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-portlet/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/index.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/index.tcl 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,264 @@ +ad_page_contract { + + Main view page for projects. + + @author jader@bread.com + @author ncarroll@ee.usyd.edu.au (on first version that used CR) + @creation-date 2003-05-15 + @cvs-id $Id: index.tcl,v 1.1 2005/06/10 18:27:35 maltes Exp $ + + @return title Page title. + @return context Context bar. + @return projects Multirow data set of projects. + @return task_term Terminology for tasks + @return task_term_lower Terminology for tasks (lower case) + @return project_term Terminology for projects + @return project_term_lower Terminology for projects (lower case) + +} { + orderby:optional + package_id:optional + {status_id:integer,optional} + {searchterm ""} + category_id:multiple,optional + {format "normal"} + {assignee_id ""} + +} -properties { + + context:onevalue + projects:multirow + write_p:onevalue + create_p:onevalue + admin_p:onevalue + task_term:onevalue + task_term_lower:onevalue + project_term:onevalue + project_term_lower:onevalue +} + +# --------------------------------------------------------------- # + +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 [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 "" + set pass_cat "" +} + +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@" +} + + +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 [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 "[_ 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 { + project_name {} + customer_name {} + category_id {} + earliest_finish_date {} + latest_finish_date {} + actual_hours_completed {} + } + } + csv { + label "[_ project-manager.CSV]" + output csv + page_size 0 + row { + project_name {} + customer_name {} + category_id {} + earliest_finish_date {} + latest_finish_date {} + actual_hours_completed {} + } + } + } \ + -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 contact index tables + +db_multirow -extend { item_url } projects project_folders { +} { + set item_url [export_vars -base "one" {project_item_id}] +} + + + +list::write_output -name projects + +ns_log notice "PMID= $package_id , WHERE= [template::list::filter_where_clauses -and -name projects] , AS= $assignee_id" + +# ------------------------- END OF FILE ------------------------- # Index: openacs-4/packages/project-manager-portlet/www/project-manager-portlet-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/project-manager-portlet-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-portlet-postgresql.xql 10 Jun 2005 18:27:35 -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-portlet/www/project-manager-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/project-manager-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-portlet.adp 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,26 @@ +<% + + # + # Copyright (C) 2005 Cognovis + # Author: Bjoern Kiesbye (kiesbye@theservice.de) + # + + # This file is part of dotLRN. + # + # dotLRN is free software; you can redistribute it and/or modify it under the + # terms of the GNU General Public License as published by the Free Software + # Foundation; either version 2 of the License, or (at your option) any later + # version. + # + # dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY + # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + # details. + # + +%> + + + + + Index: openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,109 @@ +ad_page_contract { + The display logic for the project manager portlet + + @author Bjoern Kiesbye (kiesbye@theservice.de) + @cvs_id $Id: project-manager-portlet.tcl +} { + + + + orderby:optional + {status_id:integer,optional} + {searchterm ""} + category_id:multiple,optional + {format "normal"} + {assignee_id ""} + +} -properties { + + context:onevalue + projects:multirow + write_p:onevalue + create_p:onevalue + admin_p:onevalue + task_term:onevalue + task_term_lower:onevalue + project_term:onevalue + project_term_lower:onevalue +} + + +array set config $cf + +set base_url "[ad_conn package_url]project-manager" + +set project_manager_id $config(project_manager_id) +set package_id $config(project_manager_id) + +if {$config(project_manager_status_id) == "{}" } { + + set project_manager_status_id "" +# set status_id "" + +} else { + + set project_manager_status_id $config(project_manager_status_id) +# set status_id $config(project_manager_status_id) + +} + +if {$config(project_manager_action_p) == "{}" } { + + set project_manager_action_p 1 + set action_p 1 + +} else { + + set project_manager_action_p $config(project_manager_action_p) + set action_p $config(project_manager_action_p) + +} + +if {$config(project_manager_searchterm) == "{}" } { + + set searchterm "" + +} else { + + set searchterm $config(project_manager_searchterm) + +} + + + +if { $config(project_manager_orderby) == "{}"} { + + set project_manager_orderby "" + set orderby "" + +} else { + + set project_manager_orderby $config(project_manager_orderby) + set orderby $config(project_manager_orderby) +} + +if {$config(project_manager_bulk_p) == "{}"} { + + set project_manager_bulk_p "" + set bulk_p 1 + +} else { + + set project_manager_bulk_p $config(project_manager_bulk_p) + set bulk_p $config(project_manager_bulk_p) +} + +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 exporting_vars { status_id category_id assignee_id orderby format } +set hidden_vars [export_vars -form $exporting_vars] + Index: openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl.bak =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/Attic/project-manager-portlet.tcl.bak,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl.bak 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,83 @@ +# +# Copyright (C) 2005 Cognovis +# +# This file is part of dotLRN. +# +# dotLRN is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# + +# www/project-manager-portlet.tcl + +ad_page_contract { + The display logic for the project manager portlet + + @author Bjoern Kiesbye (kiesbye@theservice.de) + @cvs_id $Id: project-manager-portlet.tcl +} { + +} + + +# Get stuff from the config +array set config $cf +set project_manager_id $config(project_manager_id) +set package_id $project_manager_id + + +if {$config(project_manager_status_id) == "{}" } { + + set project_manager_status_id "" + +} else { + + set project_manager_status_id $config(project_manager_status_id) + +} + +if {$config(project_manager_action_p) == "{}" } { + + set project_manager_action_p "" + +} else { + + set project_manager_action_p $config(project_manager_action_p) + +} + +if {$config(project_manager_searchterm) == "{}" } { + + set searchterm "" + +} else { + + set searchterm $config(project_manager_searchterm) + +} + +set searchterm $ + +if { $config(project_manager_orderby) == "{}"} { + + set project_manager_orderby "" + +} else { + + set project_manager_orderby $config(project_manager_orderby) +} + +if {$config(project_manager_bulk_p) == "{}"} { + + set project_manager_bulk_p "" + +} else { + + +} Index: openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl.from-index =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/Attic/project-manager-portlet.tcl.from-index,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-portlet.tcl.from-index 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,319 @@ +ad_page_contract { + The display logic for the project manager portlet + + @author Bjoern Kiesbye (kiesbye@theservice.de) + @cvs_id $Id: project-manager-portlet.tcl +} { + + + + orderby:optional + {status_id:integer,optional} + {searchterm ""} + category_id:multiple,optional + {format "normal"} + {assignee_id ""} + +} -properties { + + context:onevalue + projects:multirow + write_p:onevalue + create_p:onevalue + admin_p:onevalue + task_term:onevalue + task_term_lower:onevalue + project_term:onevalue + project_term_lower:onevalue +} + + +array set config $cf +set project_manager_id $config(project_manager_id) +set package_id $config(project_manager_id) + +if {$config(project_manager_status_id) == "{}" } { + + set project_manager_status_id "" +# set status_id "" + +} else { + + set project_manager_status_id $config(project_manager_status_id) +# set status_id $config(project_manager_status_id) + +} + +if {$config(project_manager_action_p) == "{}" } { + + set project_manager_action_p 1 + set action_p 1 + +} else { + + set project_manager_action_p $config(project_manager_action_p) + set action_p $config(project_manager_action_p) + +} + +if {$config(project_manager_searchterm) == "{}" } { + + set searchterm "" + +} else { + + set searchterm $config(project_manager_searchterm) + +} + + + +if { $config(project_manager_orderby) == "{}"} { + + set project_manager_orderby "" + set orderby "" + +} else { + + set project_manager_orderby $config(project_manager_orderby) + set orderby $config(project_manager_orderby) +} + +if {$config(project_manager_bulk_p) == "{}"} { + + set project_manager_bulk_p "" + set bulk_p 1 + +} else { + + set project_manager_bulk_p $config(project_manager_bulk_p) + set bulk_p $config(project_manager_bulk_p) +} + + + +# --------------------------------------------------------------- # + +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 [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 "" + set pass_cat "" +} + +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@" +} + + +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 [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 "[_ 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 { + project_name {} + customer_name {} + category_id {} + earliest_finish_date {} + latest_finish_date {} + actual_hours_completed {} + } + } + csv { + label "[_ project-manager.CSV]" + output csv + page_size 0 + row { + project_name {} + customer_name {} + category_id {} + earliest_finish_date {} + latest_finish_date {} + actual_hours_completed {} + } + } + } \ + -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 contact index tables + +db_multirow -extend { item_url } projects project_folders { +} { + set item_url [export_vars -base "one" {project_item_id}] +} + + + +#list::write_output -name projects + +ns_log notice "PMID= $package_id , WHERE= [template::list::filter_where_clauses -and -name projects] , AS= $assignee_id" + +# ------------------------- END OF FILE ------------------------- # Index: openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.adp 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,3 @@ + Index: openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/project-manager-portlet/www/project-manager-task-portlet.tcl 10 Jun 2005 18:27:35 -0000 1.1 @@ -0,0 +1,6 @@ +array set config $cf + +set base_url "[ad_conn package_url]project-manager" + +set package_id $config(project_manager_id) +