minor tweak on #136 patch, use @init_get and init_get_bool
[elgg.git] / mod / explodeping / lib.php
blobda34709555a9765b6b5b9aacb7d79cda8964a575
1 <?php
3 /*
4 * Explode pinger
5 * This periodically lets the Explode service know that this site exists,
6 * but will refuse to run if walled garden restrictions are enabled.
7 * You can delete this module with no ill effects, simply by removing
8 * the whole /mod/explodeping/ directory.
9 */
11 function explodeping_pagesetup() {
15 * Checks to see if we've pinged Explode yet; if not, sends information
16 * about the URL and so on, and gets a service number and key back.
17 * If it has, sends another ping every two weeks with the most active
18 * user and the key, in order to instigate crawling.
19 * @uses $CFG;
21 function explodeping_init() {
22 global $CFG, $messages;
24 // FIXME: workaround to annoying warning when is enabled open_basedir
25 // restriction
26 if (@ini_get('open_basedir') || !ini_get_bool('allow_url_fopen')) { return;}
28 if (!$explodeservice = get_record('datalists', 'name', 'explodeservice')) {
30 ini_set('default_socket_timeout', 20);
32 $pingvars = "pingtype=registernew";
33 $pingvars .= "&url=" . urlencode($CFG->wwwroot);
34 $pingvars .= "&profileurl=" . urlencode($CFG->wwwroot . "%username%");
35 $pingvars .= "&name=" . urlencode($CFG->sitename);
36 $pingvars .= "&rssurl=" . urlencode($CFG->wwwroot . "%username%/rss");
37 $pingvars .= "&foafurl=" . urlencode($CFG->wwwroot . "%username%/foaf");
38 $pingresponse = file_get_contents("http://ex.plode.us/mod/searchping/elggping.php?{$pingvars}");
40 if (user_flag_get("admin",$_SESSION['userid'])) {
41 $messages[] = str_replace("&","<br />",$pingvars);
42 $messages[] = $pingresponse;
45 if (!empty($pingresponse)) {
46 if ($uspingresponse = unserialize($pingresponse)) {
47 $datalist = new stdClass;
48 $datalist->name = 'explodeservice';
49 $datalist->value = $pingresponse;
50 insert_record('datalists',$datalist);
54 } else {
56 $explodelastpinged = get_record('datalists', 'name', 'explodelastpinged');
57 $triggertime = time() - (86400* 7);
58 if (!$explodelastpinged || $explodelastpinged->value < $triggertime) {
60 //reduce likelihood of concurrent pings on a stall
61 delete_records('datalists','name','explodelastpinged');
62 $datalist = new stdClass;
63 $datalist->name = 'explodelastpinged';
64 $datalist->value = $triggertime + 600;
65 insert_record('datalists',$datalist);
66 ini_set('default_socket_timeout', 20);
68 //don't do anything if initial connect doesn't work
69 $testresponse = file_get_contents("http://ex.plode.us/mod/searchping/elggping.php");
70 if ($testresponse !== false) {
72 $search_sql = "SELECT u.ident, u.username, COUNT(m.ident) AS members FROM `".$CFG->prefix."users` u JOIN ".$CFG->prefix."friends m ON m.owner = u.ident WHERE u.user_type = 'person' GROUP BY u.ident ORDER BY members DESC LIMIT 1";
73 if ($users = get_records_sql($search_sql)) {
75 foreach($users as $user) {
76 $username = $user->username;
78 $explodeservice = get_record_sql("select * from {$CFG->prefix}datalists where name = 'explodeservice'"); // ('datalists', 'name', 'explodeservice');
79 $explodeservice = unserialize($explodeservice->value);
80 $crypt_reping = sha1($explodeservice->ident . ":" . $username . ":" . $explodeservice->secretkey);
82 $pingvars = "pingtype=reping";
83 $pingvars .= "&service=" . urlencode($explodeservice->ident);
84 $pingvars .= "&crypt=" . urlencode($crypt_reping);
85 $pingvars .= "&username=" . urlencode($username);
87 $response = file_get_contents("http://ex.plode.us/mod/searchping/elggping.php?{$pingvars}");
92 delete_records('datalists','name','explodelastpinged');
93 $datalist = new stdClass;
94 $datalist->name = 'explodelastpinged';
95 $datalist->value = time();
96 insert_record('datalists',$datalist);