Kimai_Database_Mysql::get_activities_by_project PHP Method

get_activities_by_project() public method

Those are activities which were assigned to the project or which are assigned to no project. Two joins can occur: The JOIN is for filtering the activities by groups. The LEFT JOIN gives each activity row the project id which it has been assigned to via the projects_activities table or NULL when there is no assignment. So we only take rows which have NULL or the project id in that column.
Author: sl
public get_activities_by_project ( integer $projectID, array $groups = null ) : array
$projectID integer
$groups array
return array
    public function get_activities_by_project($projectID, array $groups = null)
    {
        $projectID = MySQL::SQLValue($projectID, MySQL::SQLVALUE_NUMBER);
        $p = $this->kga['server_prefix'];
        if (empty($groups)) {
            $query = "SELECT activity.*, p_a.budget, p_a.approved, p_a.effort\n            FROM {$p}activities AS activity\n            LEFT JOIN {$p}projects_activities AS p_a USING(activityID)\n            WHERE activity.trash=0\n              AND (projectID = {$projectID} OR projectID IS NULL)\n            ORDER BY visible DESC, name;";
        } else {
            $query = "SELECT DISTINCT activity.*, p_a.budget, p_a.approved, p_a.effort\n            FROM {$p}activities AS activity\n            JOIN {$p}groups_activities USING(activityID)\n            LEFT JOIN {$p}projects_activities p_a USING(activityID)\n            WHERE `{$p}groups_activities`.`groupID`  IN (" . implode($groups, ',') . ")\n              AND activity.trash=0\n              AND (projectID = {$projectID} OR projectID IS NULL)\n            ORDER BY visible DESC, name;";
        }
        $result = $this->conn->Query($query);
        if ($result == false) {
            $this->logLastError('get_activities_by_project');
            return false;
        }
        $arr = array();
        if ($this->conn->RowCount()) {
            $this->conn->MoveFirst();
            while (!$this->conn->EndOfSeek()) {
                $row = $this->conn->Row();
                $arr[$row->activityID]['activityID'] = $row->activityID;
                $arr[$row->activityID]['name'] = $row->name;
                $arr[$row->activityID]['visible'] = $row->visible;
                $arr[$row->activityID]['budget'] = $row->budget;
                $arr[$row->activityID]['approved'] = $row->approved;
                $arr[$row->activityID]['effort'] = $row->effort;
            }
            return $arr;
        }
        return array();
    }

Usage Example

Beispiel #1
0
/**
 * @param Kimai_Database_Mysql $database
 * @param array $kgaUser
 * @param bool $viewOtherGroupsAllowed
 * @return array
 * @throws Zend_View_Exception
 */
function getActivitiesData(Kimai_Database_Mysql $database, $kgaUser, $viewOtherGroupsAllowed)
{
    $groups = null;
    if (!$database->global_role_allows($kgaUser['globalRoleID'], 'core-activity-otherGroup-view')) {
        $groups = $kgaUser['groups'];
    }
    $activity_filter = isset($_REQUEST['activity_filter']) ? intval($_REQUEST['activity_filter']) : -2;
    switch ($activity_filter) {
        case -2:
            // -2 is not a valid project id this will give us all unassigned activities.
            $activities = $database->get_activities_by_project(-2, $groups);
            break;
        case -1:
            $activities = $database->get_activities($groups);
            break;
        default:
            $activities = $database->get_activities_by_project($activity_filter, $groups);
    }
    foreach ($activities as $row => $activity) {
        $groupNames = array();
        foreach ($database->activity_get_groups($activity['activityID']) as $groupID) {
            if (!$viewOtherGroupsAllowed && array_search($groupID, $kgaUser['groups']) === false) {
                continue;
            }
            $data = $database->group_get_data($groupID);
            $groupNames[] = $data['name'];
        }
        $activities[$row]['groups'] = implode(", ", $groupNames);
        $activities[$row]['projects'] = $database->activity_get_projects($activity['activityID']) ?: array();
    }
    $result = array();
    if (count($activities) > 0) {
        $result['activities'] = $activities;
    } else {
        $result['activities'] = array();
    }
    $result['projects'] = $database->get_projects($groups);
    $result['selected_activity_filter'] = $activity_filter;
    return $result;
}
Kimai_Database_Mysql