This repository has been archived by the owner on Sep 15, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.php
96 lines (94 loc) · 2.11 KB
/
index.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
<?php
function like($page, $action) {
$actions = ['add','remove','toggle'];
$result = false;
if(page($page) && in_array($action, $actions)) {
kirby()->impersonate('kirby');
$page = page($page);
$visitor = md5('v-' . kirby()->visitor()->ip());
if(strpos($page->likes(), $visitor) !== false) {
if($action == 'remove' OR $action == 'toggle') {
if(strpos($page->likes(), $visitor) !== false) {
$page = $page->update(['likes' => str_replace($visitor . ';', '', $page->likes()->value())]);
$result = [
'page' => $page,
'hasLiked' => false,
'likeCount' => $page->likeCount()
];
}
}
}
else {
if($action == 'add' OR $action == 'toggle') {
if(strpos($page->likes(), $visitor) === false) {
$page = $page->update(['likes' => $page->likes()->value() . $visitor . ';']);
$result = [
'page' => $page,
'hasLiked' => true,
'likeCount' => $page->likeCount()
];
}
}
}
}
return $result;
}
Kirby::plugin('medienbaecker/likes', [
'fields' => [
'likes' => [
'computed' => [
'likeCount' => function () {
return $this->model()->likeCount();
}
]
]
],
'routes' => [
[
'pattern' => '(:all)/like/(:any)',
'method' => 'GET|POST',
'action' => function($page, $action) {
$result = like($page, $action);
if($result) {
if($this->method() == 'POST') {
return response::json($result);
}
else {
go($result['page']);
}
}
else {
go(site()->errorPage());
}
}
],
[
'pattern' => 'like/(:any)',
'method' => 'GET|POST',
'action' => function($action) {
$result = like(site()->homePage(), $action);
if($result) {
if($this->method() == 'POST') {
return response::json($result);
}
else {
go($result['page']);
}
}
else {
go(site()->errorPage());
}
}
]
],
'pageMethods' => [
'likeCount' => function() {
$likes = $this->likes()->split(';');
return count($likes);
},
'hasLiked' => function() {
$likes = $this->likes()->split(';');
return in_array(md5('v-' . kirby()->visitor()->ip()), $likes);
},
],
]);