3 * MS Project Integration Facility
5 * Copyright 2004 GForge, LLC
6 * Copyright 2010, FusionForge Team
7 * http://fusionforge.org
9 * This file is part of FusionForge. FusionForge is free software;
10 * you can redistribute it and/or modify it under the terms of the
11 * GNU General Public License as published by the Free Software
12 * Foundation; either version 2 of the License, or (at your option)
15 * FusionForge is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License along
21 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 require_once $gfcommon.'include/pre.php';
26 require_once $gfcommon.'pm/ProjectGroup.class.php';
27 require_once $gfcommon.'pm/import_utils.php';
28 require_once $gfcommon.'pm/ProjectTask.class.php';
29 require_once $gfcommon.'pm/ProjectTaskFactory.class.php';
30 require_once $gfcommon.'include/User.class.php';
31 require_once $gfcommon.'include/session.php';
37 $array[session_hash]=jkjkjkjkjkjkjkj;
38 $array[subprojects]=array(
45 $array[success]=false;
46 $array[errormessage]='Bad Password';
48 function &MSPLogin($username,$password) {
49 global $feedback,$session_ser;
51 $success=session_login_valid(strtolower($username),$password);
53 $array['success']=true;
54 $array['session_hash']=$session_ser;
57 $result = db_query_params ('SELECT group_project_id FROM project_group_list',
61 while ($arr = db_fetch_array($result)) {
62 if (forge_check_perm ('pm', $arr['group_project_id'], 'read')) {
63 $gids[] = $arr['group_project_id'] ;
67 $res = db_query_params ('SELECT pgl.group_project_id, g.group_name || $1 || pgl.project_name AS name
68 FROM groups g, project_group_list pgl
69 WHERE g.group_id=pgl.group_id
70 AND pgl_group_project_id = ANY ($2)',
72 db_int_array_to_any_clause ($tids))) ;
73 $rows=db_numrows($res);
74 if (!$res || $rows<1) {
75 $array['success']=false;
76 $array['errormessage']='No Subprojects Found';
78 for ($i=0; $i<$rows; $i++) {
79 $array['subprojects'][db_result($res,$i,'group_project_id')]=db_result($res,$i,'name');
83 $array['success']=false;
84 $array['errormessage']=$feedback;
86 printr($array,'MSPLogin::return-array');
95 $array[tasks]=array of ProjectTask objects
99 $array[success]=false;
100 $array[errormessage]='Invalid Subproject';
103 function &MSPDownload($session_hash,$group_project_id) {
104 if (!session_continue($session_hash)) {
105 $array['success']=false;
106 $array['errormessage']='Could Not Continue Session';
108 $pg =& projectgroup_get_object($group_project_id);
109 if (!$pg || !is_object($pg)) {
110 $array['success']=false;
111 $array['errormessage']='Could Not Get ProjectGroup';
112 } elseif ($pg->isError()) {
113 $array['success']=false;
114 $array['errormessage']='Could Not Get ProjectGroup: '.$pg->getErrorMessage();
116 $ptf =& new ProjectTaskFactory($pg);
117 if (!$ptf || !is_object($ptf)) {
118 $array['success']=false;
119 $array['errormessage']='Could Not Get ProjectTaskFactory';
120 } elseif ($ptf->isError()) {
121 $array['success']=false;
122 $array['errormessage']='Could Not Get ProjectTaskFactory: '.$ptf->getErrorMessage();
124 $ptf->order='external_id';
125 $array['success']=true;
126 $array['tasks'] =& $ptf->getTasks();
127 if (!$array['tasks']) {
128 $array['success']=false;
129 $array['errormessage']='No Matching ProjectTasks Found: '.$ptf->getErrorMessage();
133 printr($array,'MSPDownload::return-array');
138 //function MSPGetLatest($session_hash,$group_project_id) {
147 FF . Finish to Finish
153 $group_project_id (subproject_id)
163 start_date=>'10/1/04',
165 percent_complete=>'50',
168 array(user_name=>'unix_name'),
172 array( 'task_id'=>'55', 'msproj_id'=44, 'task_name'=>'Task Name', 'link_type'='SS' ),
180 $array[success]=true;
184 $array[success]=false;
185 $array[errormessage]='Invalid Subproject';
186 $array[resourcename]=array(
191 $array[usernames]=array(
192 array(user_id=>55,user_name='Jon Doe'),
193 array(user_id=>87,user_name='Foo'),
198 function &MSPCheckin($session_hash,$group_project_id,$tasks) {
200 printr($tasks,'MSPCheckin::in-tasks');
201 if (!session_continue($session_hash)) {
202 $array['success']=false;
203 $array['errormessage']='Could Not Continue Session';
205 return pm_import_tasks($group_project_id,$tasks);
210 * Return the projects by user.
212 * @author Luis Hurtado luis@gforgegroup.com
213 * @param session_hash User session
214 * @return Groups User groups
218 function &MSPGetProjects($session_hash) {
219 if (!session_continue($session_hash)) {
220 $array['success']=false;
221 $array['errormessage']='Could Not Continue Session';
223 $projects = array () ;
224 foreach (user_get_session()->getGroups() as $p) {
225 if (forge_check_perm ('pm_admin', $p->getID())) {
236 * @author Luis Hurtado luis@gforgegroup.com
237 * @param groupid ID Group
238 * @param session_hash User Session
239 * @param name Project name
240 * @param ispublic 1 Public 0 Private
241 * @param description Project Description
242 * @return ProjectGroup Object ProjectGroup
246 function &MSPCreateProject($groupid,$session_hash,$name,$ispublic,$description) {
247 if (!session_continue($session_hash)) {
248 $array['success']=false;
249 $array['errormessage']='Could Not Continue Session';
251 $group = group_get_object($groupid);
252 if (!$group || !is_object($group)) {
253 $res['code']="error";
254 $res['description']="No Such Project";
257 if (!forge_check_perm ('pm_admin', $group_id)) {
258 $res['code']="error";
259 $res['description']="User must be Admin";
262 $pg = new ProjectGroup($group);
263 if (!$pg || !is_object($pg)) {
264 $res['code']="error";
265 $res['description']="Could Not Get ProjectGroup";
268 if (!$pg->create($name,$description,$ispublic)) {
269 $res['code']="error";
270 $res['description']='Error Creating Subproject '.$pg->getErrorMessage();