X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=boot.php;h=6cbb4f07c7200da51d3305c42e4d85e10cf427c6;hb=3eefe8b50003c858d4930c03cc06d2679a14347c;hp=1870e059e9eb36cf3ba9f7ff8b7d245cc143f9c1;hpb=f6ee615a79eaab03adc540704ab17b8a44a3d9e8;p=friendica.git
diff --git a/boot.php b/boot.php
index 1870e059e9..6cbb4f07c7 100644
--- a/boot.php
+++ b/boot.php
@@ -2,13 +2,24 @@
set_time_limit(0);
-define ( 'BUILD_ID', 1024 );
+define ( 'BUILD_ID', 1033 );
+define ( 'FRIENDIKA_VERSION', '2.10.0902' );
define ( 'DFRN_PROTOCOL_VERSION', '2.0' );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
define ( 'DOWN_ARROW', '⇩' );
+
+/**
+ * SSL redirection policies
+ */
+
+define ( 'SSL_POLICY_NONE', 0 );
+define ( 'SSL_POLICY_FULL', 1 );
+define ( 'SSL_POLICY_SELFSIGN', 2 );
+
+
/**
* log levels
*/
@@ -35,6 +46,13 @@ define ( 'REL_VIP', 1);
define ( 'REL_FAN', 2);
define ( 'REL_BUD', 3);
+/**
+ * Hook array order
+ */
+
+define ( 'HOOK_HOOK', 0);
+define ( 'HOOK_FILE', 1);
+define ( 'HOOK_FUNCTION', 2);
/**
*
@@ -95,7 +113,7 @@ define ( 'ACTIVITY_OBJ_HEART', NAMESPACE_DFRN . '/heart' );
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' );
@@ -174,8 +192,11 @@ class App {
public $pager;
public $strings;
public $path;
+ public $hooks;
+ public $timezone;
public $interactive = true;
+
private $scheme;
private $hostname;
private $baseurl;
@@ -202,14 +223,14 @@ class App {
if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=")
$this->query_string = substr($_SERVER['QUERY_STRING'],2);
if(x($_GET,'q'))
- $this->cmd = trim($_GET['q'],'/');
+ $this->cmd = trim($_GET['q'],'/\\');
/**
* Figure out if we are running at the top of a domain
* or in a sub-directory and adjust accordingly
*/
- $path = trim(dirname($_SERVER['SCRIPT_NAME']),'/');
+ $path = trim(dirname($_SERVER['SCRIPT_NAME']),'/\\');
if(isset($path) && strlen($path) && ($path != $this->path))
$this->path = $path;
@@ -259,10 +280,17 @@ class App {
}
function get_baseurl($ssl = false) {
- if(strlen($this->baseurl))
- return $this->baseurl;
- $this->baseurl = (($ssl) ? 'https' : $this->scheme) . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
+ $scheme = $this->scheme;
+
+ if(x($this->config,'ssl_policy')) {
+ if(($ssl) || ($this->config['ssl_policy'] == SSL_POLICY_FULL))
+ $scheme = 'https';
+ if(($this->config['ssl_policy'] == SSL_POLICY_SELFSIGN) && (local_user() || x($_POST,'auth-params')))
+ $scheme = 'https';
+ }
+
+ $this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
return $this->baseurl;
}
@@ -298,9 +326,11 @@ class App {
}
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
));
}
@@ -370,7 +400,8 @@ function system_unavailable() {
// Primarily involved with database upgrade, but also sets the
// base url for use in cmdline programs which don't have
-// $_SERVER variables.
+// $_SERVER variables, and synchronising the state of installed plugins.
+
if(! function_exists('check_config')) {
function check_config(&$a) {
@@ -402,6 +433,70 @@ function check_config(&$a) {
set_config('system','build', BUILD_ID);
}
}
+
+ /**
+ *
+ * Synchronise plugins:
+ *
+ * $a->config['system']['addon'] contains a comma-separated list of names
+ * of plugins/addons which are used on this system.
+ * Go through the database list of already installed addons, and if we have
+ * an entry, but it isn't in the config list, call the uninstall procedure
+ * and mark it uninstalled in the database (for now we'll remove it).
+ * Then go through the config list and if we have a plugin that isn't installed,
+ * call the install procedure and add it to the database.
+ *
+ */
+
+ $r = q("SELECT * FROM `addon` WHERE `installed` = 1");
+ if(count($r))
+ $installed = $r;
+ else
+ $installed = array();
+
+ $plugins = get_config('system','addon');
+ $plugins_arr = array();
+
+ if($plugins)
+ $plugins_arr = explode(',',str_replace(' ', '',$plugins));
+
+ $installed_arr = array();
+
+ if(count($installed)) {
+ foreach($installed as $i) {
+ if(! in_array($i['name'],$plugins_arr)) {
+ logger("Addons: uninstalling " . $i['name']);
+ q("DELETE FROM `addon` WHERE `id` = %d LIMIT 1",
+ intval($i['id'])
+ );
+
+ @include_once('addon/' . $i['name'] . '/' . $i['name'] . '.php');
+ if(function_exists($i['name'] . '_uninstall')) {
+ $func = $i['name'] . '_uninstall';
+ $func();
+ }
+ }
+ else
+ $installed_arr[] = $i['name'];
+ }
+ }
+
+ if(count($plugins_arr)) {
+ foreach($plugins_arr as $p) {
+ if(! in_array($p,$installed_arr)) {
+ logger("Addons: installing " . $p);
+ @include_once('addon/' . $p . '/' . $p . '.php');
+ if(function_exists($p . '_install')) {
+ $func = $p . '_install';
+ $func();
+ $r = q("INSERT INTO `addon` (`name`, `installed`) VALUES ( '%s', 1 ) ",
+ dbesc($p)
+ );
+ }
+ }
+ }
+ }
+
return;
}}
@@ -832,7 +927,6 @@ function xmlify($str) {
case "'" :
$buffer .= ''';
break;
-
case "\"" :
$buffer .= '"';
break;
@@ -868,6 +962,11 @@ function unxmlify($s) {
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));
}}
@@ -1021,7 +1120,6 @@ if(! function_exists('set_config')) {
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' ) ",
@@ -1038,12 +1136,32 @@ function set_config($family,$key,$value) {
dbesc($family),
dbesc($key)
);
+
+ $a->config[$family][$key] = $value;
+
if($ret)
return $value;
return $ret;
}}
+if(! function_exists('load_pconfig')) {
+function load_pconfig($uid,$family) {
+ global $a;
+ $r = q("SELECT * FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d",
+ dbesc($family),
+ intval($uid)
+ );
+ if(count($r)) {
+ foreach($r as $rr) {
+ $k = $rr['k'];
+ $a->config[$uid][$family][$k] = $rr['v'];
+ }
+ }
+}}
+
+
+
if(! function_exists('get_pconfig')) {
function get_pconfig($uid,$family, $key, $instore = false) {
@@ -1057,11 +1175,13 @@ function get_pconfig($uid,$family, $key, $instore = false) {
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'];
@@ -1094,7 +1214,6 @@ if(! function_exists('set_pconfig')) {
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' ) ",
@@ -1108,11 +1227,14 @@ function set_pconfig($uid,$family,$key,$value) {
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;
@@ -1389,7 +1511,7 @@ function validate_url(&$url) {
$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;
@@ -1404,7 +1526,7 @@ function validate_email($addr) {
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;
@@ -1550,7 +1672,6 @@ function attribute_contains($attr,$s) {
if(! function_exists('logger')) {
function logger($msg,$level = 0) {
-
$debugging = get_config('system','debugging');
$loglevel = intval(get_config('system','loglevel'));
$logfile = get_config('system','logfile');
@@ -1582,7 +1703,12 @@ function activity_match($haystack,$needle) {
if(! function_exists('get_tags')) {
function get_tags($s) {
$ret = array();
- if(preg_match_all('/([@#][^ \x0D\x0A,:?]*)([ \x0D\x0A,:?]|$)/',$s,$match)) {
+
+ // ignore anything in a code block
+
+ $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s);
+
+ if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) {
foreach($match[1] as $match) {
if(strstr($match,"]")) {
// we might be inside a bbcode color tag - leave it alone
@@ -1650,6 +1776,11 @@ if(! function_exists('contact_block')) {
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",
@@ -1662,8 +1793,9 @@ function contact_block() {
$o .= '