summaryrefslogtreecommitdiff
path: root/app/Api/Procedure/ProjectProcedure.php
blob: b6b9bcbf24dfc7dd8b419cc10c1f6e7211a0c59b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php

namespace Kanboard\Api\Procedure;

use Kanboard\Api\Authorization\ProjectAuthorization;

/**
 * Project API controller
 *
 * @package  Kanboard\Api\Procedure
 * @author   Frederic Guillot
 */
class ProjectProcedure extends BaseProcedure
{
    public function getProjectById($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectById', $project_id);
        $project = $this->projectModel->getById($project_id);
        return $this->projectApiFormatter->withProject($project)->format();
    }

    public function getProjectByName($name)
    {
        $project = $this->projectModel->getByName($name);
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByName', $project['id']);
        return $this->projectApiFormatter->withProject($project)->format();
    }

    public function getProjectByIdentifier($identifier)
    {
        $project = $this->projectModel->getByIdentifier($identifier);
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByIdentifier', $project['id']);
        return $this->projectApiFormatter->withProject($project)->format();
    }

    public function getProjectByEmail($email)
    {
        $project = $this->projectModel->getByEmail($email);
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectByEmail', $project['id']);
        return $this->projectApiFormatter->withProject($project)->format();
    }

    public function getAllProjects()
    {
        return $this->projectsApiFormatter->withProjects($this->projectModel->getAll())->format();
    }

    public function removeProject($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'removeProject', $project_id);
        return $this->projectModel->remove($project_id);
    }

    public function enableProject($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'enableProject', $project_id);
        return $this->projectModel->enable($project_id);
    }

    public function disableProject($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'disableProject', $project_id);
        return $this->projectModel->disable($project_id);
    }

    public function enableProjectPublicAccess($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'enableProjectPublicAccess', $project_id);
        return $this->projectModel->enablePublicAccess($project_id);
    }

    public function disableProjectPublicAccess($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'disableProjectPublicAccess', $project_id);
        return $this->projectModel->disablePublicAccess($project_id);
    }

    public function getProjectActivities(array $project_ids)
    {
        foreach ($project_ids as $project_id) {
            ProjectAuthorization::getInstance($this->container)
                ->check($this->getClassName(), 'getProjectActivities', $project_id);
        }

        return $this->helper->projectActivity->getProjectsEvents($project_ids);
    }

    public function getProjectActivity($project_id)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getProjectActivity', $project_id);
        return $this->helper->projectActivity->getProjectEvents($project_id);
    }

    public function createProject($name, $description = null, $owner_id = 0, $identifier = null, $start_date = null, $end_date = null)
    {
        $values = $this->filterValues(array(
            'name' => $name,
            'description' => $description,
            'identifier' => $identifier,
            'start_date' => $start_date,
            'end_date' => $end_date,
        ));

        list($valid, ) = $this->projectValidator->validateCreation($values);
        return $valid ? $this->projectModel->create($values, $owner_id, $this->userSession->isLogged()) : false;
    }

    public function updateProject($project_id, $name = null, $description = null, $owner_id = null, $identifier = null, $start_date = null, $end_date = null)
    {
        ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'updateProject', $project_id);

        $values = $this->filterValues(array(
            'id' => $project_id,
            'name' => $name,
            'description' => $description,
            'owner_id' => $owner_id,
            'identifier' => $identifier,
            'start_date' => $start_date,
            'end_date' => $end_date
        ));

        list($valid, ) = $this->projectValidator->validateModification($values);
        return $valid && $this->projectModel->update($values);
    }
}