forked from loduis/teamwork.com-project-management
-
Notifications
You must be signed in to change notification settings - Fork 0
/
File.php
124 lines (117 loc) · 3.36 KB
/
File.php
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
<?php
namespace TeamWorkPm;
class File extends Rest\Model
{
protected function init()
{
$this->fields = array(
'pending_file_ref' => true,
'description'=>false,
'category_id'=>array(
'required'=>false,
'attributes'=>array(
'type'=>'integer'
)
),
'category_name'=> false,
'private'=>false
);
}
public function get($id)
{
$id = (int) $id;
if ($id <= 0) {
throw new Exception('Invalid param id');
}
return $this->rest->get("$this->action/$id");
}
/**
* List Files on a Project
*
* GET /projects/#{project_id}/files.xml
*
* This lets you query the list of files for a project.
*
* @param int $project_id
* @return TeamWorkPm\Response\Model
*/
public function getByProject($project_id)
{
$project_id = (int) $project_id;
if ($project_id <= 0) {
throw new Exception('Invalid param project_id');
}
return $this->rest->get("projects/$project_id/$this->action");
}
/**
* Step 1. Upload the file
*
* POST /pendingfiles
*
* Send your file to POST /pendingfiles.xml using the FORM field "file".
* You will still need to authenticate yourself by passing your API token.
*
* If the upload is successful, you will get back something like:
* tf_1706111559e0a49
*
* @param mixed $files
* @return string
* @throws \TeamWorkPm\Exception
*/
public function upload($files)
{
$files = (array) $files;
$pending_file_attachments = array();
foreach ($files as $filename) {
if (!is_file($filename)) {
throw new Exception("Not file exist $filename");
}
}
foreach ($files as $filename) {
$params = array('file'=>'@' . $filename);
$pending_file_attachments[] = $this->rest->upload(
'pendingfiles',
$params
);
}
return join(',', $pending_file_attachments);
}
/**
* Add a File to a Project
*
* POST /projects/#{file_id}/files
*
* @param int $id
* @param array $params [filename, category_id, category_name, description, private, pending_file_ref, project_id]
* @return int File id
* @throws \TeamWorkPm\Exception
*/
public function save(array $data)
{
$project_id = empty($data['project_id']) ? 0: (int) $data['project_id'];
if ($project_id <= 0) {
throw new Exception('Required field project_id');
}
if (empty($data['pending_file_ref']) && empty($data['filename'])) {
throw new Exception('Required field pending_file_ref or filename');
}
if (empty($data['pending_file_ref'])) {
$data['pending_file_ref'] = $this->upload($data['filename']);
}
unset($data['filename']);
return $this->rest->post("projects/$project_id/files", $data);
}
/**
*
* @param int $id
* @return bool
*/
public function delete($id)
{
$id = (int) $id;
if ($id <= 0) {
throw new Exception('Invalid param id');
}
return $this->rest->delete("$this->action/$id");
}
}