set_time_limit(0);
-define ( 'BUILD_ID', 1029 );
+define ( 'BUILD_ID', 1033 );
+define ( 'FRIENDIKA_VERSION', '2.01.1005' );
define ( 'DFRN_PROTOCOL_VERSION', '2.0' );
define ( 'EOL', "<br />\r\n" );
define ( 'ACTIVITY_FRIEND', NAMESPACE_ACTIVITY_SCHEMA . 'make-friend' );
define ( 'ACTIVITY_FOLLOW', NAMESPACE_ACTIVITY_SCHEMA . 'follow' );
-define ( 'ACTIVITY_UNFOLLOW', NAMESPACE_ACTIVITY_SCHEMA . 'unfollow' );
+define ( 'ACTIVITY_UNFOLLOW', NAMESPACE_ACTIVITY_SCHEMA . 'stop-following' );
define ( 'ACTIVITY_POST', NAMESPACE_ACTIVITY_SCHEMA . 'post' );
define ( 'ACTIVITY_UPDATE', NAMESPACE_ACTIVITY_SCHEMA . 'update' );
define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
public $strings;
public $path;
public $hooks;
+ public $timezone;
public $interactive = true;
}
function init_pagehead() {
+ $this->page['title'] = $this->config['sitename'];
$tpl = load_view_file("view/head.tpl");
$this->page['htmlhead'] = replace_macros($tpl,array(
- '$baseurl' => $this->get_baseurl() . '/'
+ '$baseurl' => $this->get_baseurl() . '/',
+ '$generator' => 'Friendika' . ' ' . FRIENDIKA_VERSION
));
}
case "'" :
$buffer .= ''';
break;
-
case "\"" :
$buffer .= '"';
break;
if(! function_exists('hex2bin')) {
function hex2bin($s) {
+ if(! ctype_xdigit($s)) {
+ logger('hex2bin: illegal input: ' . print_r(debug_backtrace(), true));
+ return($s);
+ }
+
return(pack("H*",$s));
}}
function set_config($family,$key,$value) {
global $a;
- $a->config[$family][$key] = $value;
if(get_config($family,$key,true) === false) {
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
dbesc($family),
dbesc($key)
);
+
+ $a->config[$family][$key] = $value;
+
if($ret)
return $value;
return $ret;
return $a->config[$uid][$family][$key];
}
}
+
$ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
intval($uid),
dbesc($family),
dbesc($key)
);
+
if(count($ret)) {
$a->config[$uid][$family][$key] = $ret[0]['v'];
return $ret[0]['v'];
function set_pconfig($uid,$family,$key,$value) {
global $a;
- $a->config[$uid][$family][$key] = $value;
if(get_pconfig($uid,$family,$key,true) === false) {
$ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
return $ret;
}
$ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
- intval($uid),
dbesc($value),
+ intval($uid),
dbesc($family),
dbesc($key)
);
+
+ $a->config[$uid][$family][$key] = $value;
+
if($ret)
return $value;
return $ret;
$url = 'http://' . $url;
$h = parse_url($url);
- if(($h) && (checkdnsrr($h['host'], 'ANY'))) {
+ if(($h) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR))) {
return true;
}
return false;
return false;
$h = substr($addr,strpos($addr,'@') + 1);
- if(($h) && (checkdnsrr($h, 'ANY'))) {
+ if(($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX))) {
return true;
}
return false;
function contact_block() {
$o = '';
$a = get_app();
+
+ $shown = get_pconfig($a->profile['uid'],'system','display_friend_count');
+ if(! $shown)
+ $shown = 24;
+
if((! is_array($a->profile)) || ($a->profile['hide-friends']))
return $o;
$r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0",
$o .= '<h4 class="contact-h4">' . t('No contacts') . '</h4>';
return $o;
}
- $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT 24",
- intval($a->profile['uid'])
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 ORDER BY RAND() LIMIT %d",
+ intval($a->profile['uid']),
+ intval($shown)
);
if(count($r)) {
$o .= '<h4 class="contact-h4">' . $total . ' ' . t('Contacts') . '</h4><div id="contact-block">';
}
- call_hooks('contact_block_end', $o);
+ $arr = array('contacts' => $r, 'output' => $o);
+
+ call_hooks('contact_block_end', $arr);
return $o;
}}
$a->profile = $r[0];
- $a->page['title'] = $a->profile['name'];
+ $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
$_SESSION['theme'] = $a->profile['theme'];
if(! (x($a->page,'aside')))
if((! is_array($profile)) && (! count($profile)))
return $o;
+ call_hooks('profile_sidebar_enter', $profile);
+
$fullname = '<div class="fn">' . $profile['name'] . '</div>';
+ $pdesc = '<div class="title">' . $profile['pdesc'] . '</div>';
+
$tabs = '';
$photo = '<div id="profile=photo-wrapper"><img class="photo" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
$o .= replace_macros($tpl, array(
'$fullname' => $fullname,
+ '$pdesc' => $pdesc,
'$tabs' => $tabs,
'$photo' => $photo,
'$connect' => $connect,
'$homepage' => $homepage
));
- call_hooks('profile_sidebar', $o);
+
+ $arr = array('profile' => $profile, 'entry' => $o);
+
+ call_hooks('profile_sidebar', $arr);
return $o;
}}
if(! function_exists('register_hook')) {
function register_hook($hook,$file,$function) {
+ $r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
+ dbesc($hook),
+ dbesc($file),
+ dbesc($function)
+ );
+ if(count($r))
+ return true;
+
$r = q("INSERT INTO `hook` (`hook`, `file`, `function`) VALUES ( '%s', '%s', '%s' ) ",
dbesc($hook),
dbesc($file),
if(! function_exists('call_hooks')) {
-function call_hooks($name, $data = null) {
+function call_hooks($name, &$data = null) {
$a = get_app();
if(count($a->hooks)) {
}
}}
+
+if(! function_exists('day_translate')) {
+function day_translate($s) {
+ $ret = str_replace(array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),
+ array( t('Monday'), t('Tuesday'), t('Wednesday'), t('Thursday'), t('Friday'), t('Saturday'), t('Sunday')),
+ $s);
+
+ $ret = str_replace(array('January','February','March','April','May','June','July','August','September','October','November','December'),
+ array( t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')),
+ $ret);
+
+ return $ret;
+}}
+
+if(! function_exists('get_birthdays')) {
+function get_birthdays() {
+
+ $a = get_app();
+ $o = '';
+
+ if(! local_user())
+ return $o;
+
+ $bd_format = get_config('system','birthday_format');
+ if(! $bd_format)
+ $bd_format = 'g A l F d' ; // 8 AM Friday January 18
+
+ $r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event`
+ LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid`
+ WHERE `event`.`uid` = %d AND `type` = 'birthday' AND `start` < '%s' AND `finish` > '%s'
+ ORDER BY `start` DESC ",
+ intval(local_user()),
+ dbesc(datetime_convert('UTC','UTC','now + 6 days')),
+ dbesc(datetime_convert('UTC','UTC','now'))
+ );
+
+ if($r && count($r)) {
+ $o .= '<div id="birthday-wrapper"><div id="birthday-title">' . t('Birthdays this week:') . '</div>';
+ $o .= '<div id="birthday-adjust">' . t("\x28Adjusted for local time\x29") . '</div>';
+ $o .= '<div id="birthday-title-end"></div>';
+
+ foreach($r as $rr) {
+ $now = strtotime('now');
+ $today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
+
+ $o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" href="'
+ . $a->get_baseurl() . '/redir/' . $rr['cid'] . '">' . $rr['name'] . '</a> '
+ . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '')
+ . '</div>' ;
+ }
+
+ $o .= '</div>';
+ }
+
+ return $o;
+
+}}
+
+/**
+ *
+ * Compare two URLs to see if they are the same, but ignore
+ * slight but hopefully insignificant differences such as if one
+ * is https and the other isn't, or if one is www.something and
+ * the other isn't - and also ignore case differences.
+ *
+ * Return true if the URLs match, otherwise false.
+ *
+ */
+
+if(! function_exists('link_compare')) {
+function link_compare($a,$b) {
+ $a1 = str_replace(array('https:','//www.'), array('http:','//'), $a);
+ $b1 = str_replace(array('https:','//www.'), array('http:','//'), $b);
+ if(strcasecmp($a1,$b1) === 0)
+ return true;
+ return false;
+}}