3 * GForge MS Project Integration Facility
5 * Copyright 2004 GForge, LLC
10 require_once $gfwww.'include/squal_pre.php';
11 require_once $gfcommon.'pm/ProjectGroup.class.php';
12 require_once $gfcommon.'pm/import_utils.php';
13 require_once $gfcommon.'pm/ProjectTask.class.php';
14 require_once $gfcommon.'pm/ProjectTaskFactory.class.php';
15 require_once $gfcommon.'include/User.class.php';
16 require_once $gfcommon.'include/session.php';
22 $array[session_hash]=jkjkjkjkjkjkjkj;
23 $array[subprojects]=array(
30 $array[success]=false;
31 $array[errormessage]='Bad Password';
33 function &MSPLogin($username,$password) {
34 global $feedback,$session_ser;
36 $success=session_login_valid(strtolower($username),$password);
38 $array['success']=true;
39 $array['session_hash']=$session_ser;
40 $res=db_query_params ('SELECT pgl.group_project_id, g.group_name || $1 || pgl.project_name AS name
41 FROM groups g, project_group_list pgl, role_setting rs, user_group ug
43 AND g.group_id=pgl.group_id
44 AND rs.value::integer > 0
45 AND rs.group_project_id = pgl.group_project_id
46 AND ug.role_id = rs.role_id
47 AND rs.section_name=$3',
51 $rows=db_numrows($res);
52 if (!$res || $rows<1) {
53 $array['success']=false;
54 $array['errormessage']='No Subprojects Found';
56 for ($i=0; $i<$rows; $i++) {
57 $array['subprojects'][db_result($res,$i,'group_project_id')]=db_result($res,$i,'name');
61 $array['success']=false;
62 $array['errormessage']=$feedback;
64 printr($array,'MSPLogin::return-array');
73 $array[tasks]=array of ProjectTask objects
77 $array[success]=false;
78 $array[errormessage]='Invalid Subproject';
81 function &MSPDownload($session_hash,$group_project_id) {
82 if (!session_continue($session_hash)) {
83 $array['success']=false;
84 $array['errormessage']='Could Not Continue Session';
86 $pg =& projectgroup_get_object($group_project_id);
87 if (!$pg || !is_object($pg)) {
88 $array['success']=false;
89 $array['errormessage']='Could Not Get ProjectGroup';
90 } elseif ($pg->isError()) {
91 $array['success']=false;
92 $array['errormessage']='Could Not Get ProjectGroup: '.$pg->getErrorMessage();
94 $ptf =& new ProjectTaskFactory($pg);
95 if (!$ptf || !is_object($ptf)) {
96 $array['success']=false;
97 $array['errormessage']='Could Not Get ProjectTaskFactory';
98 } elseif ($ptf->isError()) {
99 $array['success']=false;
100 $array['errormessage']='Could Not Get ProjectTaskFactory: '.$ptf->getErrorMessage();
102 $ptf->order='external_id';
103 $array['success']=true;
104 $array['tasks'] =& $ptf->getTasks();
105 if (!$array['tasks']) {
106 $array['success']=false;
107 $array['errormessage']='No Matching ProjectTasks Found: '.$ptf->getErrorMessage();
111 printr($array,'MSPDownload::return-array');
116 //function MSPGetLatest($session_hash,$group_project_id) {
125 FF . Finish to Finish
131 $group_project_id (subproject_id)
141 start_date=>'10/1/04',
143 percent_complete=>'50',
146 array(user_name=>'unix_name'),
150 array( 'task_id'=>'55', 'msproj_id'=44, 'task_name'=>'Task Name', 'link_type'='SS' ),
158 $array[success]=true;
162 $array[success]=false;
163 $array[errormessage]='Invalid Subproject';
164 $array[resourcename]=array(
169 $array[usernames]=array(
170 array(user_id=>55,user_name='Jon Doe'),
171 array(user_id=>87,user_name='Foo'),
176 function &MSPCheckin($session_hash,$group_project_id,$tasks) {
178 printr($tasks,'MSPCheckin::in-tasks');
179 if (!session_continue($session_hash)) {
180 $array['success']=false;
181 $array['errormessage']='Could Not Continue Session';
183 return pm_import_tasks($group_project_id,$tasks);
188 * Return the projects by user.
190 * @author Luis Hurtado luis@gforgegroup.com
191 * @param session_hash User session
192 * @return Groups User groups
196 function &MSPGetProjects($session_hash) {
197 if (!session_continue($session_hash)) {
198 $array['success']=false;
199 $array['errormessage']='Could Not Continue Session';
201 $group_res = db_query_params ('SELECT groups.group_id FROM groups NATURAL JOIN user_group WHERE user_id=$1 AND project_flags=$2',
204 $group_ids=&util_result_column_to_array($group_res,'group_id');
205 $groups=&group_get_objects($group_ids);
213 * @author Luis Hurtado luis@gforgegroup.com
214 * @param groupid ID Group
215 * @param session_hash User Session
216 * @param name Project name
217 * @param ispublic 1 Public 0 Private
218 * @param description Project Description
219 * @return ProjectGroup Object ProjectGroup
223 function &MSPCreateProject($groupid,$session_hash,$name,$ispublic,$description) {
224 if (!session_continue($session_hash)) {
225 $array['success']=false;
226 $array['errormessage']='Could Not Continue Session';
228 $group = group_get_object($groupid);
229 if (!$group || !is_object($group)) {
230 $res['code']="error";
231 $res['description']="No Such Group";
234 $perm =& $group->getPermission(session_get_user());
235 if (!$perm || !is_object($perm)) {
236 $res['code']="error";
237 $res['description']="Could Not Get Perm Object";
239 } elseif ($perm->isError()) {
240 $res['code']="error";
241 $res['description']="Error in Perm Object: ".$perm->getErrorMessage();
243 } elseif (!$perm->isPMAdmin()) {
244 $res['code']="error";
245 $res['description']="User must be Admin";
248 $pg = new ProjectGroup($group);
249 if (!$pg || !is_object($pg)) {
250 $res['code']="error";
251 $res['description']="Could Not Get ProjectGroup";
254 if (!$pg->create($name,$description,$ispublic)) {
255 $res['code']="error";
256 $res['description']='Error Creating Subproject '.$pg->getErrorMessage();