|
1
|
|
|
<?php |
|
2
|
|
|
/** |
|
3
|
|
|
* The Wire Attachment. |
|
4
|
|
|
* |
|
5
|
|
|
* Attach files to the wire! |
|
6
|
|
|
*/ |
|
7
|
|
|
|
|
8
|
|
|
elgg_register_event_handler('init', 'system', 'thewire_image'); |
|
9
|
|
|
|
|
10
|
|
|
/** |
|
11
|
|
|
* Inits the plugin |
|
12
|
|
|
* |
|
13
|
|
|
* @return void |
|
14
|
|
|
*/ |
|
15
|
|
View Code Duplication |
function thewire_image() { |
|
16
|
|
|
$plugin_root = dirname(__FILE__); |
|
17
|
|
|
elgg_register_library('thewire_image', "$plugin_root/lib/thewire_image.php"); |
|
18
|
|
|
elgg_register_js('dropzone', 'mod/thewire_images/js/dropzone.js'); |
|
19
|
|
|
elgg_register_css('dropzone', 'mod/thewire_images/css/dropzone.css'); |
|
20
|
|
|
|
|
21
|
|
|
elgg_extend_view('js/elgg', 'js/thewire_image'); |
|
22
|
|
|
|
|
23
|
|
|
elgg_register_event_handler('create', 'object', 'thewire_image_check_attachments'); |
|
24
|
|
|
elgg_register_event_handler('delete', 'object', 'thewire_image_delete_attached_files'); |
|
25
|
|
|
|
|
26
|
|
|
// overrule default save action |
|
27
|
|
|
elgg_unregister_action("thewire/add"); |
|
28
|
|
|
elgg_register_action("thewire/add", "$plugin_root/actions/thewire/add.php"); |
|
29
|
|
|
|
|
30
|
|
|
// downloads are served through pages instead of actions so the download link can be shared. |
|
31
|
|
|
// action tokens prevent sharing action links. |
|
32
|
|
|
// this means we need to implement our own security in the page handler using gatekeeper(). |
|
33
|
|
|
elgg_register_page_handler('thewire_image', 'thewire_image_page_handler'); |
|
34
|
|
|
} |
|
35
|
|
|
|
|
36
|
|
|
/** |
|
37
|
|
|
* Check for attachments when wire posts are created. |
|
38
|
|
|
* |
|
39
|
|
|
* @param type $event |
|
40
|
|
|
* @param type $type |
|
41
|
|
|
* @param type $object |
|
42
|
|
|
* @return type mixed |
|
43
|
|
|
*/ |
|
44
|
|
|
function thewire_image_check_attachments($event, $type, $object) { |
|
|
|
|
|
|
45
|
|
|
if (!elgg_instanceof($object, 'object', 'thewire')) { |
|
46
|
|
|
return null; |
|
47
|
|
|
} |
|
48
|
|
|
|
|
49
|
|
|
$file = elgg_extract('thewire_image_file', $_FILES, null); |
|
50
|
|
|
|
|
51
|
|
|
if ($file) { |
|
52
|
|
|
$file_obj = new TheWireImage(); |
|
53
|
|
|
|
|
54
|
|
|
$file_obj->setFilename('thewire_image/' . rand()); |
|
55
|
|
|
$file_obj->setMimeType($file['type']); |
|
56
|
|
|
$file_obj->original_filename = $file['name']; |
|
57
|
|
|
$file_obj->simpletype = file_get_simple_type($file['type']); |
|
58
|
|
|
$file_obj->access_id = ACCESS_PUBLIC; |
|
59
|
|
|
|
|
60
|
|
|
$file_obj->open("write"); |
|
61
|
|
|
$file_obj->write(get_uploaded_file('thewire_image_file')); |
|
|
|
|
|
|
62
|
|
|
$file_obj->close(); |
|
63
|
|
|
|
|
64
|
|
|
if ($file_obj->save()) { |
|
65
|
|
|
$file_obj->addRelationship($object->getGuid(), 'is_attachment'); |
|
66
|
|
|
} else { |
|
67
|
|
|
register_error(elgg_echo('thewire_image:could_not_save_image')); |
|
68
|
|
|
} |
|
69
|
|
|
} |
|
70
|
|
|
|
|
71
|
|
|
return null; |
|
72
|
|
|
} |
|
73
|
|
|
|
|
74
|
|
|
/** |
|
75
|
|
|
* The wire attachment page handler |
|
76
|
|
|
* |
|
77
|
|
|
* Supports: |
|
78
|
|
|
* Download an attachment: thewire_image/download/<guid>/<title> |
|
79
|
|
|
* |
|
80
|
|
|
* @param array $page From the page_handler function |
|
81
|
|
|
* @return bool |
|
82
|
|
|
*/ |
|
83
|
|
|
function thewire_image_page_handler($page) { |
|
84
|
|
|
gatekeeper(); |
|
85
|
|
|
$pages = dirname(__FILE__) . '/pages/thewire_image'; |
|
86
|
|
|
$section = elgg_extract(0, $page); |
|
87
|
|
|
|
|
88
|
|
|
switch($section) { |
|
89
|
|
|
case 'download': |
|
90
|
|
|
$guid = elgg_extract(1, $page); |
|
91
|
|
|
set_input('guid', $guid); |
|
92
|
|
|
require "$pages/download.php"; |
|
93
|
|
|
break; |
|
94
|
|
|
|
|
95
|
|
|
default: |
|
96
|
|
|
// in the future we'll be able to register this as a 404 |
|
97
|
|
|
// for now, act like an action and forward away. |
|
98
|
|
|
register_error(elgg_echo('thewire_image:invalid_section')); |
|
99
|
|
|
forward(REFERRER); |
|
100
|
|
|
} |
|
101
|
|
|
} |
|
102
|
|
|
|
|
103
|
|
|
/** |
|
104
|
|
|
* Deletes any attachments when wire posts are deleted. |
|
105
|
|
|
* |
|
106
|
|
|
* @param type $event |
|
107
|
|
|
* @param type $type |
|
108
|
|
|
* @param type $object |
|
109
|
|
|
* @return null |
|
110
|
|
|
*/ |
|
111
|
|
|
function thewire_image_delete_attached_files($event, $type, $object) { |
|
112
|
|
|
|
|
113
|
|
|
if (!elgg_instanceof($object, 'object', 'thewire')) { |
|
114
|
|
|
return null; |
|
115
|
|
|
} |
|
116
|
|
|
|
|
117
|
|
|
// we want to use the thewire_image_get_attachments() function, |
|
118
|
|
|
// so load the library. |
|
119
|
|
|
elgg_load_library('thewire_image'); |
|
120
|
|
|
|
|
121
|
|
|
$attachment = thewire_image_get_attachments($object->getGUID()); |
|
122
|
|
|
|
|
123
|
|
|
if ($attachment && !$attachment->delete()) { |
|
124
|
|
|
register_error(elgg_echo('thewire_image:could_not_delete')); |
|
125
|
|
|
} |
|
126
|
|
|
} |
Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable: