Example #1
0
/**
return data:
	$array[success]=true;
	$array[tasks]=array of ProjectTask objects
**OR**
	$array[success]=false;
	$array[errormessage]='Invalid Subproject';
*/
function &MSPDownload($session_hash, $group_project_id)
{
    if (!session_continue($session_hash)) {
        $array['success'] = false;
        $array['errormessage'] = 'Could Not Continue Session';
    }
    $pg =& projectgroup_get_object($group_project_id);
    if (!$pg || !is_object($pg)) {
        $array['success'] = false;
        $array['errormessage'] = 'Could Not Get ProjectGroup';
    } elseif ($pg->isError()) {
        $array['success'] = false;
        $array['errormessage'] = 'Could Not Get ProjectGroup: ' . $pg->getErrorMessage();
    } else {
        $ptf =& new ProjectTaskFactory($pg);
        if (!$ptf || !is_object($ptf)) {
            $array['success'] = false;
            $array['errormessage'] = 'Could Not Get ProjectTaskFactory';
        } elseif ($ptf->isError()) {
            $array['success'] = false;
            $array['errormessage'] = 'Could Not Get ProjectTaskFactory: ' . $ptf->getErrorMessage();
        } else {
            $ptf->order = 'external_id';
            $array['success'] = true;
            $array['tasks'] =& $ptf->getTasks();
            if (!$array['tasks']) {
                $array['success'] = false;
                $array['errormessage'] = 'No Matching ProjectTasks Found: ' . $ptf->getErrorMessage();
            }
        }
    }
    printr($array, 'MSPDownload::return-array');
    return $array;
}
function &projecttask_get_object($project_task_id, $data = false)
{
    global $PROJECTTASK_OBJ;
    if (!isset($PROJECTTASK_OBJ["_" . $project_task_id . "_"])) {
        if ($data) {
            //the db result handle was passed in
        } else {
            $res = db_query("SELECT * FROM project_task_vw\n\t\t\t\t\tWHERE project_task_id='{$project_task_id}'");
            if (db_numrows($res) < 1) {
                $PROJECTTASK_OBJ["_" . $project_task_id . "_"] = false;
                return false;
            }
            $data =& db_fetch_array($res);
        }
        $ProjectGroup =& projectgroup_get_object($data["group_project_id"]);
        $PROJECTTASK_OBJ["_" . $project_task_id . "_"] = new ProjectTask($ProjectGroup, $project_task_id, $data);
    }
    return $PROJECTTASK_OBJ["_" . $project_task_id . "_"];
}
Example #3
0
function &pm_import_tasks($group_project_id, &$tasks)
{
    printr($tasks, 'MSPCheckin::in-array');
    printr(getenv('TZ'), 'MSPCheckin::entry TZ');
    $pg =& projectgroup_get_object($group_project_id);
    if (!$pg || !is_object($pg)) {
        $array['success'] = false;
        $array['errormessage'] = 'Could Not Get ProjectGroup';
    } elseif ($pg->isError()) {
        $array['success'] = false;
        $array['errormessage'] = 'Could Not Get ProjectGroup: ' . $pg->getErrorMessage();
    } else {
        $count = count($tasks);
        //printr($count,'count - count of tasks');
        //
        //  Build hash list of technicians so we can get their ID for assigning tasks
        //
        $techs =& $pg->getTechnicianObjects();
        $tcount = count($techs);
        for ($i = 0; $i < $tcount; $i++) {
            $tarr[strtolower($techs[$i]->getUnixName())] = $techs[$i]->getID();
            $tarr[strtolower($techs[$i]->getRealName())] = $techs[$i]->getID();
        }
        $invalid_names = array();
        //
        //  Create a linked list based on the msproj_id
        //
        for ($i = 0; $i < $count; $i++) {
            $msprojid[$tasks[$i]['msproj_id']] =& $tasks[$i];
            $resrc = $tasks[$i]['resources'];
            for ($j = 0; $j < count($resrc); $j++) {
                //validate user - see if they really exist as techs in this subproject
                if (!$tarr[strtolower($resrc[$j]['user_name'])]) {
                    //create list of bogus names to send back
                    if (array_search(strtolower($resrc[$j]['user_name']), $invalid_names) === false) {
                        $invalid_names[] = $resrc[$j]['user_name'];
                    }
                }
            }
        }
        //
        //  invalid assignees - send it back for remapping
        //
        if (count($invalid_names)) {
            $array['success'] = false;
            $array['errormessage'] = 'Invalid Resource Name';
            $array['resourcename'] = $invalid_names;
            for ($i = 0; $i < $tcount; $i++) {
                $array['usernames'][$techs[$i]->getID()] = $techs[$i]->getUnixName();
            }
            return $array;
        } else {
            //
            //  Begin inserting/updating the tasks
            //
            for ($i = 0; $i < $count; $i++) {
                if ($was_error) {
                    continue;
                }
                //no task_id so it must be new - create it
                if (!$tasks[$i]['id']) {
                    if (!$tasks[$i]['notes']) {
                        $tasks[$i]['notes'] = 'None Provided';
                    }
                    //create the task
                    $pt = new ProjectTask($pg);
                    if (!$pt || !is_object($pt)) {
                        $array['success'] = false;
                        $was_error = true;
                        $array['errormessage'] = 'Could Not Get ProjectTask';
                    } elseif ($pt->isError()) {
                        $array['success'] = false;
                        $was_error = true;
                        $array['errormessage'] = 'Could Not Get ProjectTask: ' . $pt->getErrorMessage();
                    } else {
                        //remap priority names=>numbers
                        $priority = $tasks[$i]['priority'];
                        if (!$priority || $priority < 1 || $priority > 5) {
                            //				printr($priority,'Invalid Priority On New Task');
                            $priority = 3;
                        }
                        //map users
                        $assignees = array();
                        $resrc = $tasks[$i]['resources'];
                        for ($ucount = 0; $ucount < count($resrc); $ucount++) {
                            //get their user_id from the $tarr we created earlier
                            $assignees[] = $tarr[strtolower($resrc[$ucount]['user_name'])];
                        }
                        //don't do anything with dependencies yet - we may only have
                        //the MSprojid from dependent items
                        $hours = $tasks[$i]['work'];
                        if (!$hours) {
                            $hours = '0.0';
                        }
                        $percent_complete = intval($tasks[$i]['percent_complete']);
                        if (!$percent_complete) {
                            $percent_complete = 0;
                        } elseif ($percent_complete > 100) {
                            $percent_complete = 100;
                        }
                        if (!$pt->create(addslashes($tasks[$i]['name']), addslashes($tasks[$i]['notes']), $priority, $hours, strtotime($tasks[$i]['start_date']), strtotime($tasks[$i]['end_date']), 100, $percent_complete, $assignees, $deps = array(), $tasks[$i]['duration'], $tasks[$i]['parent_id'])) {
                            $array['success'] = false;
                            $was_error = true;
                            $array['errormessage'] = 'Error Creating ProjectTask: ' . $pt->getErrorMessage();
                            break 1;
                            //							continue;
                        } else {
                            //successful
                            $tasks[$i]['id'] = $pt->getID();
                            $tasks[$i]['obj'] = $pt;
                            $pt->setExternalID($tasks[$i]['msproj_id']);
                            $pt = null;
                        }
                    }
                } else {
                    //update existing task
                    //create the task
                    $pt =& projecttask_get_object($tasks[$i]['id']);
                    if (!$pt || !is_object($pt)) {
                        printr($tasks[$i]['id'], 'Could not get task');
                        //	$array['success']=false;
                        //	$was_error=true;
                        //	$array['errormessage']='Could Not Get ProjectTask';
                    } elseif ($pt->isError()) {
                        printr($tasks[$i]['id'], 'Could not get task - error in task');
                        $array['success'] = false;
                        $was_error = true;
                        $array['errormessage'] = 'Could Not Get ProjectTask: ' . $pt->getErrorMessage();
                    } else {
                        //remap priority names=>numbers
                        $priority = $tasks[$i]['priority'];
                        if (!$priority || $priority < 1 || $priority > 5) {
                            printr($priority, 'Invalid Priority On Existing Task');
                            $priority = 3;
                        }
                        //map users
                        $assignees = array();
                        $resrc = $tasks[$i]['resources'];
                        for ($ucount = 0; $ucount < count($resrc); $ucount++) {
                            //get their user_id from the $tarr we created earlier
                            $assignees[] = $tarr[strtolower($resrc[$ucount]['user_name'])];
                        }
                        //don't do anything with dependencies yet - we may only have the
                        //MSprojid from dependent items
                        $hours = $tasks[$i]['work'];
                        if (!$hours) {
                            $hours = '0.0';
                        }
                        $percent_complete = intval($tasks[$i]['percent_complete']);
                        if (!$percent_complete) {
                            $percent_complete = 0;
                        } elseif ($percent_complete > 100) {
                            $percent_complete = 100;
                        }
                        if (!$pt->update(addslashes($tasks[$i]['name']), addslashes($tasks[$i]['notes']), $priority, $hours, strtotime($tasks[$i]['start_date']), strtotime($tasks[$i]['end_date']), $pt->getStatusID(), $pt->getCategoryID(), $percent_complete, $assignees, $pt->getDependentOn(), $pg->getID(), $tasks[$i]['duration'], $tasks[$i]['parent_id'])) {
                            $array['success'] = false;
                            $was_error = true;
                            $array['errormessage'] = 'Error Updating ProjectTask: ' . $pt->getErrorMessage();
                            break 1;
                            //							continue;
                        } else {
                            //successful
                            $tasks[$i]['id'] = $pt->getID();
                            $tasks[$i]['obj'] = $pt;
                            $pt->setExternalID($tasks[$i]['msproj_id']);
                            $pt = null;
                        }
                    }
                    //if task->iserror()
                }
                //if task_id
                //accumulate list of completed tasks
                //any task not in this list will be deleted
                $completed[$tasks[$i]['id']] = true;
            }
            //for i
            //
            //  Do task dependencies
            //
            printr($was_error, 'Right before deps');
            if (!$was_error) {
                //iterate the tasks
                for ($i = 0; $i < $count; $i++) {
                    $darr = $tasks[$i]['dependenton'];
                    $deps = array();
                    //iterate each dependency in a task
                    for ($dcount = 0; $dcount < count($darr); $dcount++) {
                        //get the id of the task we're dependent on -
                        // may have to get it from msprojid linked list
                        $id = $darr[$dcount]['task_id'];
                        if ($id < 1) {
                            $id = $msprojid[$darr[$dcount]['msproj_id']]['id'];
                        }
                        //prevent task from being dependent on itself
                        if ($id == $tasks[$i]['id']) {
                            continue;
                        }
                        $deps[$id] = $darr[$dcount]['link_type'];
                    }
                    printr($deps, 'Deps for task id: ' . $tasks[$i]['id']);
                    if (is_object($tasks[$i]['obj'])) {
                        printr($deps, '11 Done Setting deps for task id: ' . $tasks[$i]['id']);
                        if (!$tasks[$i]['obj']->setDependentOn($deps)) {
                            $was_error = true;
                            $array['success'] = false;
                            printr($tasks[$i]['obj'], 'FAILED TO SET DEPENDENCIES: ' . $tasks[$i]['obj']->getErrorMessage());
                        }
                        printr($deps, '22 Done Setting deps for task id: ' . $tasks[$i]['id']);
                    } else {
                        //				$was_error=true;
                        //				$array['success']=false;
                        printr($foo, 'PROJECT TASK OBJECT DOES NOT EXIST IN OBJ ARRAY');
                    }
                    printr($deps, 'Done Setting deps for task id: ' . $tasks[$i]['id']);
                    unset($deps);
                }
                //iterates tasks to do dependencies
            }
            //
            //	Delete unreferenced tasks
            //
            printr($was_error, 'Right before deleting unreferenced tasks');
            if (!$was_error) {
                $ptf =& new ProjectTaskFactory($pg);
                $pt_arr =& $ptf->getTasks();
                for ($i = 0; $i < count($pt_arr); $i++) {
                    if (is_object($pt_arr[$i])) {
                        if (!$completed[$pt_arr[$i]->getID()]) {
                            printr($pt_arr[$i]->getID(), 'Deleting task');
                            if (!$pt_arr[$i]->delete(true)) {
                                echo $pt_arr[$i]->getErrorMessage();
                            } else {
                                printr($foo, 'Deleting Unreferenced Tasks');
                            }
                        }
                    }
                }
            }
        }
        //invalid names
    }
    //get projectGroup
    if (!$was_error) {
        $array['success'] = true;
    }
    //	printr($array,'MSPCheckin::return-array');
    printr(getenv('TZ'), 'MSPCheckin::exit TZ');
    return $array;
}
Example #4
0
 private function _getRolesIdByAllowedAction($section, $reference, $action = NULL)
 {
     $result = array();
     $qpa = db_construct_qpa();
     $qpa = db_construct_qpa($qpa, 'SELECT role_id FROM pfo_role_setting WHERE section_name=$1 AND ref_id=$2 ', array($section, $reference));
     // Look for roles that are directly allowed to perform action
     switch ($section) {
         case 'forge_admin':
         case 'forge_read':
         case 'approve_projects':
         case 'approve_news':
         case 'project_admin':
         case 'project_read':
         case 'tracker_admin':
         case 'pm_admin':
         case 'forum_admin':
             $qpa = db_construct_qpa($qpa, 'AND perm_val = 1');
             break;
         case 'forge_stats':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 1');
                     break;
                 case 'admin':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 2');
                     break;
             }
             break;
         case 'scm':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 1');
                     break;
                 case 'write':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 2');
                     break;
             }
             break;
         case 'docman':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 1');
                     break;
                 case 'submit':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 2');
                     break;
                 case 'approve':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 3');
                     break;
                 case 'admin':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 4');
                     break;
             }
             break;
         case 'frs':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read_public':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 1');
                     break;
                 case 'read_private':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 2');
                     break;
                 case 'write':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 3');
                     break;
             }
             break;
         case 'forum':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 1');
                     break;
                 case 'post':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 2');
                     break;
                 case 'unmoderated_post':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 3');
                     break;
                 case 'moderate':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val >= 4');
                     break;
             }
             break;
         case 'tracker':
         case 'pm':
             switch ($action) {
                 case 'ANY':
                     $qpa = db_construct_qpa($qpa, 'AND perm_val != 0');
                     break;
                 case 'read':
                     $qpa = db_construct_qpa($qpa, 'AND (perm_val & 1) = 1');
                     break;
                 case 'tech':
                     $qpa = db_construct_qpa($qpa, 'AND (perm_val & 2) = 2');
                     break;
                 case 'manager':
                     $qpa = db_construct_qpa($qpa, 'AND (perm_val & 4) = 4');
                     break;
             }
             break;
         default:
             $hook_params = array();
             $hook_params['section'] = $section;
             $hook_params['reference'] = $reference;
             $hook_params['action'] = $action;
             $hook_params['qpa'] = $qpa;
             $hook_params['result'] = $result;
             plugin_hook_by_reference("list_roles_by_permission", $hook_params);
             $qpa = $hook_params['qpa'];
             break;
     }
     $res = db_query_qpa($qpa);
     if (!$res) {
         $this->setError('RBACEngine::getRolesByAllowedAction()::' . db_error());
         return false;
     }
     while ($arr = db_fetch_array($res)) {
         $result[] = $arr['role_id'];
     }
     // Also look for roles that can perform the action because they're more powerful
     switch ($section) {
         case 'forge_read':
         case 'approve_projects':
         case 'approve_news':
         case 'forge_stats':
         case 'project_admin':
             $result = array_merge($result, $this->_getRolesIdByAllowedAction('forge_admin', -1));
             break;
         case 'project_read':
         case 'tracker_admin':
         case 'pm_admin':
         case 'forum_admin':
         case 'scm':
         case 'docman':
         case 'frs':
             $result = array_merge($result, $this->_getRolesIdByAllowedAction('project_admin', $reference));
             break;
         case 'tracker':
             if ($action != 'tech') {
                 $t = artifactType_get_object($reference);
                 $result = array_merge($result, $this->_getRolesIdByAllowedAction('tracker_admin', $t->Group->getID()));
             }
             break;
         case 'pm':
             if ($action != 'tech') {
                 $t = projectgroup_get_object($reference);
                 $result = array_merge($result, $this->_getRolesIdByAllowedAction('pm_admin', $t->Group->getID()));
             }
             break;
         case 'forum':
             $t = forum_get_object($reference);
             $result = array_merge($result, $this->_getRolesIdByAllowedAction('forum_admin', $t->Group->getID()));
             break;
         case 'new_tracker':
             if ($action != 'tech') {
                 $result = array_merge($result, $this->_getRolesIdByAllowedAction('tracker_admin', $reference));
             }
             break;
         case 'new_pm':
             if ($action != 'tech') {
                 $result = array_merge($result, $this->_getRolesIdByAllowedAction('pm_admin', $reference));
             }
             break;
         case 'new_forum':
             $t = forum_get_object($reference);
             $result = array_merge($result, $this->_getRolesIdByAllowedAction('forum_admin', $reference));
             break;
     }
     return array_unique($result);
 }