-
Notifications
You must be signed in to change notification settings - Fork 2
/
InlineEditorProcess.module
189 lines (141 loc) · 4.92 KB
/
InlineEditorProcess.module
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
/**
* Copyright Simon Fernandes
* @author: Simon Fernandes
* Date: 10/05/2013
* Time: 10:20
*/
class InlineEditorProcess extends Process {
/**
* Return information about this module (required)
*/
public static $module_name = "Inline_Editor_for_PW";
public static function getModuleInfo() {
return array(
'title' => 'Inline Editor Process',
'summary' => 'Processor for the inline editor',
'version' => 004,
'author' => 'Simon Fernandes',
'permission' => 'page-edit',
);
}
/**
* Get the input, update and save the page.
* Each AJAX call to this method will update a single field
*/
public function ___execute() {
//Is AJAX request?
if($this->config->ajax != true){
throw new WireException("Request must be via AJAX");
}
$page_to_update = $this->pages->get($this->input->post("page_id"));
//Does this page exist?
if(!$page_to_update->id){
$result = $this->formatResult("failed","The requested page does not exist!");
}
//It does exist.
else{
//Do they have permission to save the page?
if($page_to_update->editable()){
//which method handles the request?
//Check the type of field this is. If it's just text, great.
//If not, we need to handle the file upload
switch($this->input->post("field_type")){
case "text":
$result = $this->handleText($page_to_update);
break;
case "Pageimage":
$result = $this->handleImage($page_to_update);
break;
default:
$result = $this->handleText($page_to_update);
break;
}
}
//They do not have permission.
else{
$result = $this->formatResult("failed","Permission denied");
}
}
return $result;
}
private function formatResult($status,$exception){
$result = array(
"status" => $status,
"exception" => $exception
);
return json_encode($result);
}
/**
* @param Page $page The page to be edited
* @return string JSON encoded string of the result
*/
protected function handleText(Page $page){
//Get the field name
$field_name = $this->input->post("field_name");
//Get the data for this field
$page->$field_name = $this->input->post("data");
//Save the page
$page->save();
//Return the result
return $this->formatResult("ok","Field '{$field_name}' on page '{$page->name}' successfully updated");
}
/**
* TODO - Validate the images
* Handle an upload of images
* @param Page $page
*/
protected function handleImage(Page &$page){
//Get the field name
$field_name = $this->input->post("field_name");
$current_name = $page->$field_name->basename;
$upload = new WireUpload("file");
$upload->setMaxFiles(1);
$upload->setOverwrite(true);
$upload->setDestinationPath("{$this->config->paths->files}/{$page->id}/");
$upload->setOverwriteFilename($current_name);
$upload->setValidExtensions(array("jpg","gif","png"));
$files = $upload->execute();
if(empty($files)){
//Something went wrong..
return $this->formatResult("failed",implode(" | ",$upload->getErrors()));
}
/**
* todo How on earth do you just replace an image instead of adding?
*/
$page->$field_name->deleteAll();
$name = $files[0];
foreach($files as $file){
$page->$field_name->add($file);
}
$page->save();
return json_encode(array(
"status" => "ok",
"location" => $page->$field_name->url."".$name,
"exception" => "Image succesfully updated"
));
//return json_encode($_FILES);
}
/**
* Install a new admin page for this process.
*/
public function ___install() {
$page = new Page();
$page->template = 'admin';
$page->name = self::$module_name;
$page->parent = $this->pages->get($this->config->adminRootPageID)->child('name=page');
$page->process = $this;
$page->title = self::$module_name;
// save the page
$page->save();
// tell the user we created this page
$this->message("Inline Editor Admin page has been created");
}
/**
* Remove the admin page that was created during install.
*/
public function ___uninstall() {
$to_delete = $this->pages->get("template=admin, name=". self::$module_name);
$to_delete->delete();
}
}