1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/hubzilla_ynh.git synced 2024-09-03 19:26:21 +02:00
hubzilla_ynh/sources/addons/visage/visage.php

182 lines
4.5 KiB
PHP
Executable file

<?php
/**
* Name: Visage
* Description: Who viewed my channel/profile
* Version: 1.0
* Author: Mike Macgirvin <mike@zothub.com>
*
*/
/**
* Visit $yoursite/visage
* Lots of room for improvement, turning into a widget, etc.
* The time of visit can be seen by hovering over the name (not the photo). This way I could re-use an existing template.
*/
function visage_load() {
register_hook('magic_auth_success', 'addon/visage/visage.php', 'visage_magic_auth');
register_hook('feature_settings', 'addon/visage/visage.php', 'visage_settings');
register_hook('feature_settings_post', 'addon/visage/visage.php', 'visage_settings_post');
}
function visage_unload() {
unregister_hook('magic_auth_success', 'addon/visage/visage.php', 'visage_magic_auth');
unregister_hook('feature_settings', 'addon/visage/visage.php', 'visage_settings');
unregister_hook('feature_settings_post', 'addon/visage/visage.php', 'visage_settings_post');
}
function visage_magic_auth($a, &$b) {
// logger('visage: ' . print_r($b,true));
if((! strstr($b['url'],'/channel/')) && (! strstr($b['url'],'/profile/'))) {
// logger('visage: exiting: ' . $b['url']);
return;
}
$p = preg_match('/http(.*?)(channel|profile)\/(.*?)($|[\/\?\&])/',$b['url'],$matches);
if(! $p) {
// logger('visage: no matching pattern');
return;
}
// logger('visage: matches ' . print_r($matches,true));
$nick = $matches[3];
if($_SERVER['HTTP_DNT'] === '1' || intval($_SESSION['DNT']))
return;
$c = q("select channel_id, channel_hash from channel where channel_address = '%s' limit 1",
dbesc($nick)
);
if(! $c)
return;
$x = get_pconfig($c[0]['channel_id'],'visage','visitors');
if(! is_array($x))
$n = array(array($b['xchan']['xchan_hash'],datetime_convert()));
else {
$n = array();
for($z = ((count($x) > 24) ? count($x) - 24 : 0); $z < count($x); $z ++)
if($x[$z][0] != $b['xchan']['xchan_hash'])
$n[] = $x[$z];
$n[] = array($b['xchan']['xchan_hash'],datetime_convert());
}
// logger('visage set: ' . print_r($n,true));
set_pconfig($c[0]['channel_id'],'visage','visitors',$n);
return;
}
function visage_module() {}
function visage_content(&$a) {
if(! local_channel())
return;
$o = '<h3>' . t('Recent Channel/Profile Viewers') . '</h3>';
$enabled = get_pconfig(local_channel(),'visage','enabled');
if(! $enabled) {
$o .= t('This plugin/addon has not been configured.') . EOL;
$o .= sprintf( t('Please visit the Visage settings on %s'), '<a href="settings/featured">' . t('your feature settings page') . '</a>');
return $o;
}
// let's play fair.
require_once('include/identity.php');
if(! is_public_profile())
return $o;
$x = get_pconfig(local_channel(),'visage','visitors');
if((! $x) || (! is_array($x))) {
$o .= t('No entries.');
return $o;
}
$chans = '';
for($n = 0; $n < count($x); $n ++) {
if($chans)
$chans .= ',';
$chans .= "'" . dbesc($x[$n][0]) . "'";
}
if($chans) {
$r = q("select * from xchan where xchan_hash in ( $chans )");
}
if($r) {
$tpl = get_markup_template('common_friends.tpl');
for($g = count($x) - 1; $g >= 0; $g --) {
foreach($r as $rr) {
if($x[$g][0] == $rr['xchan_hash'])
break;
}
$o .= replace_macros($tpl,array(
'$url' => (($rr['xchan_flags'] & XCHAN_FLAGS_HIDDEN) ? z_root() : chanlink_url($rr['xchan_url'])),
'$name' => $rr['xchan_name'],
'$photo' => $rr['xchan_photo_m'],
'$tags' => (($rr['xchan_flags'] & XCHAN_FLAGS_HIDDEN) ? z_root() : chanlink_url($rr['xchan_url'])),
'$note' => relative_date($x[$g][1])
));
}
$o .= cleardiv();
}
return $o;
}
function visage_settings(&$a,&$s) {
if(! local_channel())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
//head_add_css('/addon/visage/visage.css');
/* Get the current state of our config variables */
$enabled = get_pconfig(local_channel(),'visage','enabled');
$checked = (($enabled) ? 1 : false);
$css = (($enabled) ? '' : '-disabled');
$sc .= replace_macros(get_markup_template('field_checkbox.tpl'), array(
'$field' => array('visage', t('Enable Visage Visitor Logging'), $checked, '', array(t('No'),t('Yes'))),
));
$s .= replace_macros(get_markup_template('generic_addon_settings.tpl'), array(
'$addon' => array('visage', t('Visage Settings'), '', t('Submit')),
'$content' => $sc
));
}
function visage_settings_post(&$a,&$b) {
if(x($_POST,'visage-submit')) {
set_pconfig(local_channel(),'visage','enabled',intval($_POST['visage']));
}
}