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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
<?php
namespace Kanboard\Model;
use Kanboard\Core\Base;
/**
* Custom Filter model
*
* @package Kanboard\Model
* @author Timo Litzbarski
*/
class CustomFilterModel extends Base
{
/**
* SQL table name
*
* @var string
*/
const TABLE = 'custom_filters';
/**
* Return the list of all allowed custom filters for a user and project
*
* @access public
* @param integer $project_id Project id
* @param integer $user_id User id
* @return array
*/
public function getAll($project_id, $user_id)
{
return $this->db
->table(self::TABLE)
->columns(
UserModel::TABLE.'.name as owner_name',
UserModel::TABLE.'.username as owner_username',
self::TABLE.'.id',
self::TABLE.'.user_id',
self::TABLE.'.project_id',
self::TABLE.'.filter',
self::TABLE.'.name',
self::TABLE.'.is_shared',
self::TABLE.'.append'
)
->asc(self::TABLE.'.name')
->join(UserModel::TABLE, 'id', 'user_id')
->beginOr()
->eq('is_shared', 1)
->eq('user_id', $user_id)
->closeOr()
->eq('project_id', $project_id)
->findAll();
}
/**
* Get custom filter by id
*
* @access private
* @param integer $filter_id
* @return array
*/
public function getById($filter_id)
{
return $this->db->table(self::TABLE)->eq('id', $filter_id)->findOne();
}
/**
* Create a custom filter
*
* @access public
* @param array $values Form values
* @return bool|integer
*/
public function create(array $values)
{
return $this->db->table(self::TABLE)->persist($values);
}
/**
* Update a custom filter
*
* @access public
* @param array $values Form values
* @return bool
*/
public function update(array $values)
{
return $this->db->table(self::TABLE)
->eq('id', $values['id'])
->update($values);
}
/**
* Remove a custom filter
*
* @access public
* @param integer $filter_id
* @return bool
*/
public function remove($filter_id)
{
return $this->db->table(self::TABLE)->eq('id', $filter_id)->remove();
}
/**
* Duplicate custom filters from a project to another one, must be executed inside a transaction
*
* @param integer $src_project_id Source project id
* @param integer $dst_project_id Destination project id
* @return boolean
*/
public function duplicate($src_project_id, $dst_project_id)
{
$filters = $this->db
->table(self::TABLE)
->columns(
self::TABLE.'.user_id',
self::TABLE.'.filter',
self::TABLE.'.name',
self::TABLE.'.is_shared',
self::TABLE.'.append'
)
->eq('project_id', $src_project_id)
->findAll();
foreach ($filters as $filter) {
$filter['project_id'] = $dst_project_id;
// Avoid SQL error with Postgres
$filter['is_shared'] = $filter['is_shared'] ?: 0;
$filter['append'] = $filter['append'] ?: 0;
if (! $this->db->table(self::TABLE)->save($filter)) {
return false;
}
}
return true;
}
}
|