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.
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.
21 function explodeping_init() {
22 global $CFG, $messages;
24 // FIXME: workaround to annoying warning when is enabled open_basedir
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);
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);