*/ function dirstats_load() { register_hook('cron_daily', 'addon/dirstats/dirstats.php', 'dirstats_cron'); } function dirstats_unload() { unregister_hook('cron_daily', 'addon/dirstats/dirstats.php', 'dirstats_cron'); } function dirstats_module() {} function dirstats_init() { if(! get_config('dirstats','hubcount')) dirstats_cron($a,$b); } function dirstats_content(&$a) { $hubcount = get_config('dirstats','hubcount'); $zotcount = get_config('dirstats','zotcount'); $friendicacount = get_config('dirstats','friendicacount'); $diasporacount = get_config('dirstats','diasporacount'); $channelcount = get_config('dirstats','channelcount'); $friendicachannelcount = get_config('dirstats','friendicachannelcount'); $diasporachannelcount = get_config('dirstats','diasporachannelcount'); $over35s = get_config('dirstats','over35s'); $under35s = get_config('dirstats','under35s'); $average = get_config('dirstats','averageage'); $chatrooms = get_config('dirstats','chatrooms'); $tags = get_config('dirstats','tags'); $ob = $a->get_observer(); $observer = $ob['xchan_hash']; // Requested by Martin $fountainofyouth = get_xconfig($observer, 'dirstats', 'averageage'); if (intval($fountainofyouth)) $average = $fountainofyouth; if (argv(1) == 'json') { $dirstats = array ( 'hubcount' => $hubcount, 'zotcount' => $zotcount, 'friendicacount' => $friendicacount, 'diasporacount' => $diasporacount, 'channelcount' => $channelcount, 'friendicachannelcount' => $friendicachannelcount, 'diasporachannelcount' => $diasporachannelcount, 'over35s' => $over35s, 'under35s' => $under35s, 'average' => $average, 'chatrooms' => $chatrooms, 'tags' => $tags ); echo json_return_and_die($dirstats); } // Used by Hubzilla News elseif (argv(1) == 'genpost' && get_config('dirstats','allowfiledump')) { $result = '[b]Hub count[/b] : ' . $hubcount . "\xA" . '[b]Hubzilla Hubs[/b] : ' . $zotcount . "\xA" . '[b]Friendica Hubs[/b] : ' . $friendicacount . "\xA" . '[b]Diaspora Pods[/b] : ' . $diasporacount . "\xA" . '[b]Hubzilla Channels[/b] : ' . $channelcount . "\xA" . '[b]Friendica Profiles[/b] : ' . $friendicachannelcount . "\xA" . '[b]Diaspora Profiles[/b] : ' . $diasporachannelcount . "\xA" . '[b]People aged 35 and above[/b] : ' . $over35s . "\xA" . '[b]People aged 34 and below[/b] : ' . $under35s . "\xA" . '[b]Average Age[/b] : ' . $average . "\xA" . '[b]Known Chatrooms[/b] : ' . $chatrooms . "\xA" . '[b]Unique Profile Tags[/b] : ' . $tags . "\xA"; file_put_contents('genpost', $result); } else { $tpl = get_markup_template( "dirstats.tpl", "addon/dirstats/" ); return replace_macros($tpl, array( '$title' => t('Hubzilla Directory Stats'), '$hubtitle' => t('Total Hubs'), '$hubcount' => $hubcount, '$zotlabel' => t('Hubzilla Hubs'), '$zotcount' => $zotcount, '$friendicalabel' => t('Friendica Hubs'), '$friendicacount' => $friendicacount, '$diasporalabel' => t('Diaspora Pods'), '$diasporacount' => $diasporacount, '$zotchanlabel' => t('Hubzilla Channels'), '$channelcount' => $channelcount, '$friendicachanlabel' => t('Friendica Channels'), '$friendicachannelcount' => $friendicachannelcount, '$diasporachanlabel' => t('Diaspora Channels'), '$diasporachannelcount' => $diasporachannelcount, '$over35label' => t('Aged 35 and above'), '$over35s' => $over35s, '$under35label' => t('Aged 34 and under'), '$under35s' => $under35s, '$averageagelabel' => t('Average Age'), '$average' => $average, '$chatlabel' => t('Known Chatrooms'), '$chatrooms' => $chatrooms, '$tagslabel' => t('Known Tags'), '$tags' => $tags, '$disclaimer' => t('Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,') )); } } function dirstats_cron(&$a, $b) { // Some hublocs are immortal and won't ever die - they all have null date for hubloc_connected and hubloc_updated $r = q("SELECT count(distinct hubloc_host) as total FROM `hubloc` where not (hubloc_flags & %d) > 0 and not (hubloc_connected = %d and hubloc_updated = %d)", intval(HUBLOC_FLAGS_DELETED), dbesc(NULL_DATE), dbesc(NULL_DATE) ); if ($r) { $hubcount = $r[0]['total']; set_config('dirstats','hubcount',$hubcount); } $r = q("SELECT count(distinct hubloc_host) as total FROM `hubloc` where hubloc_network = 'zot' and not (hubloc_flags & %d) > 0 and not (hubloc_connected = %d and hubloc_updated = %d)", intval(HUBLOC_FLAGS_DELETED), dbesc(NULL_DATE), dbesc(NULL_DATE) ); if ($r) { $zotcount = $r[0]['total']; set_config('dirstats','zotcount',$zotcount); } $r = q("SELECT count(distinct hubloc_host) as total FROM `hubloc` where hubloc_network = 'friendica-over-diaspora'"); if ($r){ $friendicacount = $r[0]['total']; set_config('dirstats','friendicacount',$friendicacount); } $r = q("SELECT count(distinct hubloc_host) as total FROM `hubloc` where hubloc_network = 'diaspora'"); if ($r) { $diasporacount = $r[0]['total']; set_config('dirstats','diasporacount',$diasporacount); } $r = q("SELECT count(distinct xchan_hash) as total FROM `xchan` where xchan_network = 'zot' and not (xchan_flags & %d) > 0", intval(XCHAN_FLAGS_DELETED) ); if ($r) { $channelcount = $r[0]['total']; set_config('dirstats','channelcount',$channelcount); } $r = q("SELECT count(distinct xchan_hash) as total FROM `xchan` where xchan_network = 'friendica-over-diaspora'"); if ($r) { $friendicachannelcount = $r[0]['total']; set_config('dirstats','friendicachannelcount',$friendicachannelcount); } $r = q("SELECT count(distinct xchan_hash) as total FROM `xchan` where xchan_network = 'diaspora'"); if ($r) { $diasporachannelcount = $r[0]['total']; set_config('dirstats','diasporachannelcount',$diasporachannelcount); } $r = q("select count(xprof_hash) as total from `xprof` where xprof_age >=35"); if ($r) { $over35s = $r[0]['total']; set_config('dirstats','over35s',$over35s); } $r = q("select count(xprof_hash) as total from `xprof` where xprof_age <=34 and xprof_age >=1"); if ($r) { $under35s = $r[0]['total']; set_config('dirstats','under35s',$under35s); } $r = q("select sum(xprof_age) as sum from xprof"); if ($r) { $rr = q("select count(xprof_hash) as total from `xprof` where xprof_age >=1"); $total = $r[0]['sum']; $number = $rr[0]['total']; if($number) $average = $total / $number; else $average = 0; set_config('dirstats','averageage',$average); } $r = q("select count(distinct xchat_url) as total from `xchat`"); if ($r) { $chatrooms = $r[0]['total']; set_config('dirstats','chatrooms',$chatrooms); } $r = q("select count(distinct xtag_term) as total from xtag where xtag_flags = 0"); if ($r) { $tags = $r[0]['total']; set_config('dirstats','tags',$tags); } }