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
|
<?php
/**
* Sample Friendika plugin/addon
*
* Addon Name: randplace
*
*/
/**
*
* Addons are registered with the system in the
* .htconfig.php file.
*
* $a->config['system']['addon'] = 'plugin1,plugin2,etc.';
*
* When registration is detected, the system calls the plugin
* name_install() function, located in 'addon/name/name.php',
* where 'name' is the name of the addon.
* If the addon is removed from the configuration list, the
* system will call the name_unistall() function.
*
*/
function randplace_install() {
/**
*
* Our demo plugin will attach in three places.
* The first is just prior to storing a local post.
*
*/
register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
/**
*
* Then we'll attach into the settings page, on both the
* form and post hooks so that we can create and update
* user preferences.
*
*/
register_hook('settings_form', 'addon/randplace/randplace.php', 'randplace_settings');
register_hook('settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
logger("installed randplace");
}
function randplace_uninstall() {
/**
*
* uninstall unregisters any hooks created with register_hook
* during install. It may also delete configuration settings
* and any other cleanup.
*
*/
unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
unregister_hook('settings_form', 'addon/randplace/randplace.php', 'randplace_settings');
unregister_hook('settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
logger("removed randplace");
}
function randplace_post_hook($a, &$item) {
/**
*
* An item was posted on the local system.
* We are going to look for specific items:
* - A status post by a profile owner
* - The profile owner must have allowed our plugin
*
*/
logger('randplace invoked');
if(! local_user()) /* non-zero if this is a logged in user of this system */
return;
if(local_user() != $item['uid']) /* Does this person own the post? */
return;
if($item['parent']) /* If the item has a parent, this is a comment or something else, not a status post. */
return;
/* Retrieve our personal config setting */
$active = get_pconfig(local_user(), 'randplace', 'enable');
if(! $active)
return;
/**
*
* OK, we're allowed to do our stuff.
* Here's what we are going to do:
* load the list of timezone names, and use that to generate a list of world cities.
* Then we'll pick one of those at random and put it in the "location" field for the post.
*
*/
$cities = array();
$zones = timezone_identifiers_list();
foreach($zones as $zone) {
if(strpos($zone,'/'))
$cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1));
}
if(! count($cities))
return;
$city = array_rand($cities,1);
$item['location'] = $cities[$city];
return;
}
/**
*
* Callback from the settings post function.
* $post contains the $_POST array.
* We will make sure we've got a valid user account
* and if so set our configuration setting for this person.
*
*/
function randplace_settings_post($a,$post) {
if(! local_user())
return;
set_pconfig(local_user(),'randplace','enable',intval($_POST['randplace']));
}
/*
* Called from the end of the settings form.
* Add our own settings info to the page.
*
*/
function randplace_settings(&$a,&$s) {
if(! local_user())
return;
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/randplace/randplace.css' . '" media="all" />' . "\r\n";
$enabled = get_pconfig(local_user(),'randplace','enable');
$checked = (($enabled) ? ' checked="checked" ' : '');
$s .= '<h3>' . t('Randplace Settings') . '</h3>';
$s .= '<div id="randplace-enable-wrapper">';
$s .= '<label id="randplace-enable-label" for="randplace-enable">' . t('Enable Randplace Plugin') . '</label>';
$s .= '<input id="randplace-checkbox" type="checkbox" name="randplace" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
// provide another submit button
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
}
|