X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=boot.php;h=d4c5ec093a0477656ab2ceb4d449f4f9cd4ef6e9;hb=146f386e37670b64c588c65d25c9f068a0e8e066;hp=2a11501033cbddc7f954697f180aced146b79204;hpb=cd8be48ca703b8931d7dc85a0aea1837a21e56aa;p=friendica.git
diff --git a/boot.php b/boot.php
index 2a11501033..d4c5ec093a 100644
--- a/boot.php
+++ b/boot.php
@@ -17,9 +17,9 @@ require_once('include/dbstructure.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_CODENAME', 'Lily of the valley');
-define ( 'FRIENDICA_VERSION', '3.4.1' );
+define ( 'FRIENDICA_VERSION', '3.4.3-dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1187 );
+define ( 'DB_UPDATE_VERSION', 1191 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -84,6 +84,15 @@ define ( 'LOGGER_DEBUG', 2 );
define ( 'LOGGER_DATA', 3 );
define ( 'LOGGER_ALL', 4 );
+/**
+ * cache levels
+ */
+
+define ( 'CACHE_MONTH', 0 );
+define ( 'CACHE_WEEK', 1 );
+define ( 'CACHE_DAY', 2 );
+define ( 'CACHE_HOUR', 3 );
+
/**
* registration policies
*/
@@ -154,7 +163,8 @@ define ( 'NETWORK_TWITTER', 'twit'); // Twitter
define ( 'NETWORK_DIASPORA2', 'dspc'); // Diaspora connector
define ( 'NETWORK_STATUSNET', 'stac'); // Statusnet connector
define ( 'NETWORK_APPNET', 'apdn'); // app.net
-
+define ( 'NETWORK_NEWS', 'nntp'); // Network News Transfer Protocol
+define ( 'NETWORK_ICALENDAR', 'ical'); // iCalendar
define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder
/**
@@ -180,7 +190,9 @@ $netgroup_ids = array(
NETWORK_TWITTER => (-14),
NETWORK_DIASPORA2 => (-15),
NETWORK_STATUSNET => (-16),
- NETWORK_APPNET => (-17),
+ NETWORK_APPNET => (-17),
+ NETWORK_NEWS => (-18),
+ NETWORK_ICALENDAR => (-19),
NETWORK_PHANTOM => (-127),
);
@@ -261,6 +273,10 @@ define ( 'NAMESPACE_ATOM1', 'http://www.w3.org/2005/Atom' );
define ( 'ACTIVITY_LIKE', NAMESPACE_ACTIVITY_SCHEMA . 'like' );
define ( 'ACTIVITY_DISLIKE', NAMESPACE_DFRN . '/dislike' );
+define ( 'ACTIVITY_ATTEND', NAMESPACE_ZOT . '/activity/attendyes' );
+define ( 'ACTIVITY_ATTENDNO', NAMESPACE_ZOT . '/activity/attendno' );
+define ( 'ACTIVITY_ATTENDMAYBE', NAMESPACE_ZOT . '/activity/attendmaybe' );
+
define ( 'ACTIVITY_OBJ_HEART', NAMESPACE_DFRN . '/heart' );
define ( 'ACTIVITY_FRIEND', NAMESPACE_ACTIVITY_SCHEMA . 'make-friend' );
@@ -399,6 +415,7 @@ if(! class_exists('App')) {
public $videoheight = 350;
public $force_max_items = 0;
public $theme_thread_allow = true;
+ public $theme_events_in_profile = true;
// An array for all theme-controllable parameters
// Mostly unimplemented yet. Only options 'stylesheet' and
@@ -829,7 +846,7 @@ if(! class_exists('App')) {
$v = get_class_vars( $class );
if(x($v,"name")) $name = $v['name'];
}
- if ($name===""){
+ if ($name===""){
echo "template engine $class cannot be registered without a name.\n";
killme();
}
@@ -1423,8 +1440,46 @@ if(! function_exists('proc_run')) {
if(! $arr['run_cmd'])
return;
- if(count($args) && $args[0] === 'php')
+ if(count($args) && $args[0] === 'php') {
+
+ if (get_config("system", "worker")) {
+ $argv = $args;
+ array_shift($argv);
+
+ $parameters = json_encode($argv);
+ $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'",
+ dbesc($parameters));
+
+ if (!$found)
+ q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`)
+ VALUES ('%s', '%s', %d)",
+ dbesc($parameters),
+ dbesc(datetime_convert()),
+ intval(0));
+
+ // Should we quit and wait for the poller to be called as a cronjob?
+ if (get_config("system", "worker_dont_fork"))
+ return;
+
+ // Checking number of workers
+ $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
+
+ // Get number of allowed number of worker threads
+ $queues = intval(get_config("system", "worker_queues"));
+
+ if ($queues == 0)
+ $queues = 4;
+
+ // If there are already enough workers running, don't fork another one
+ if ($workers[0]["workers"] >= $queues)
+ return;
+
+ // Now call the poller to execute the jobs that we just added to the queue
+ $args = array("php", "include/poller.php", "no_cron");
+ }
+
$args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ }
// add baseurl to args. cli scripts can't construct it
$args[] = $a->get_baseurl();
@@ -1432,9 +1487,8 @@ if(! function_exists('proc_run')) {
for($x = 0; $x < count($args); $x ++)
$args[$x] = escapeshellarg($args[$x]);
-
-
$cmdline = implode($args," ");
+
if(get_config('system','proc_windows'))
proc_close(proc_open('cmd /c start /b ' . $cmdline,array(),$foo,dirname(__FILE__)));
else
@@ -1449,7 +1503,7 @@ if(! function_exists('current_theme')) {
$a = get_app();
$page_theme = null;
-
+
// Find the theme that belongs to the user whose stuff we are looking at
if($a->profile_uid && ($a->profile_uid != local_user())) {
@@ -1488,7 +1542,7 @@ if(! function_exists('current_theme')) {
// user has selected to have the mobile theme be the same as the normal one
$system_theme = $standard_system_theme;
$theme_name = $standard_theme_name;
-
+
if($page_theme)
$theme_name = $page_theme;
}
@@ -1533,7 +1587,7 @@ if(! function_exists('current_theme_url')) {
$opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
if (file_exists('view/theme/' . $t . '/style.php'))
return($a->get_baseurl() . '/view/theme/' . $t . '/style.pcss' . $opts);
-
+
return($a->get_baseurl() . '/view/theme/' . $t . '/style.css');
}
}
@@ -1611,7 +1665,7 @@ if(! function_exists('load_contact_links')) {
if(! $uid || x($a->contacts,'empty'))
return;
- $r = q("SELECT `id`,`network`,`url`,`thumb` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `thumb` != ''",
+ $r = q("SELECT `id`,`network`,`url`,`thumb`, `rel` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `thumb` != ''",
intval($uid)
);
if(count($r)) {
@@ -1619,9 +1673,9 @@ if(! function_exists('load_contact_links')) {
$url = normalise_link($rr['url']);
$ret[$url] = $rr;
}
- }
- else
+ } else
$ret['empty'] = true;
+
$a->contacts = $ret;
return;
}
@@ -1634,24 +1688,24 @@ if(! function_exists('load_contact_links')) {
* @return string
*/
function build_querystring($params, $name=null) {
- $ret = "";
- foreach($params as $key=>$val) {
- if(is_array($val)) {
- if($name==null) {
- $ret .= build_querystring($val, $key);
- } else {
- $ret .= build_querystring($val, $name."[$key]");
- }
- } else {
- $val = urlencode($val);
- if($name!=null) {
- $ret.=$name."[$key]"."=$val&";
- } else {
- $ret.= "$key=$val&";
- }
- }
- }
- return $ret;
+ $ret = "";
+ foreach($params as $key=>$val) {
+ if(is_array($val)) {
+ if($name==null) {
+ $ret .= build_querystring($val, $key);
+ } else {
+ $ret .= build_querystring($val, $name."[$key]");
+ }
+ } else {
+ $val = urlencode($val);
+ if($name!=null) {
+ $ret.=$name."[$key]"."=$val&";
+ } else {
+ $ret.= "$key=$val&";
+ }
+ }
+ }
+ return $ret;
}
function explode_querystring($query) {
@@ -1659,8 +1713,7 @@ function explode_querystring($query) {
if($arg_st !== false) {
$base = substr($query, 0, $arg_st);
$arg_st += 1;
- }
- else {
+ } else {
$base = '';
$arg_st = 0;
}
@@ -1709,6 +1762,15 @@ function random_digits($digits) {
return $rn;
}
+function get_server() {
+ $server = get_config("system", "directory");
+
+ if ($server == "")
+ $server = "http://dir.friendi.ca";
+
+ return($server);
+}
+
function get_cachefile($file, $writemode = true) {
$cache = get_itemcachepath();
@@ -1746,16 +1808,16 @@ function clear_cache($basepath = "", $path = "") {
$cachetime = 86400;
if (is_writable($path)){
- if ($dh = opendir($path)) {
- while (($file = readdir($dh)) !== false) {
- $fullpath = $path."/".$file;
- if ((filetype($fullpath) == "dir") and ($file != ".") and ($file != ".."))
- clear_cache($basepath, $fullpath);
- if ((filetype($fullpath) == "file") and (filectime($fullpath) < (time() - $cachetime)))
- unlink($fullpath);
+ if ($dh = opendir($path)) {
+ while (($file = readdir($dh)) !== false) {
+ $fullpath = $path."/".$file;
+ if ((filetype($fullpath) == "dir") and ($file != ".") and ($file != ".."))
+ clear_cache($basepath, $fullpath);
+ if ((filetype($fullpath) == "file") and (filectime($fullpath) < (time() - $cachetime)))
+ unlink($fullpath);
+ }
+ closedir($dh);
}
- closedir($dh);
- }
}
}
@@ -1794,7 +1856,11 @@ function get_lockpath() {
if ($temppath != "") {
$lockpath = $temppath."/lock";
- mkdir($lockpath);
+
+ if (!is_dir($lockpath))
+ mkdir($lockpath);
+ elseif (!is_writable($lockpath))
+ $lockpath = $temppath;
if (is_dir($lockpath) AND is_writable($lockpath)) {
set_config("system", "lockpath", $lockpath);
@@ -1805,14 +1871,22 @@ function get_lockpath() {
}
function get_temppath() {
+ $a = get_app();
+
$temppath = get_config("system","temppath");
if (($temppath != "") AND is_dir($temppath) AND is_writable($temppath))
return($temppath);
$temppath = sys_get_temp_dir();
if (($temppath != "") AND is_dir($temppath) AND is_writable($temppath)) {
- set_config("system", "temppath", $temppath);
- return($temppath);
+ $temppath .= "/".$a->get_hostname();
+ if (!is_dir($temppath))
+ mkdir($temppath);
+
+ if (is_dir($temppath) AND is_writable($temppath)) {
+ set_config("system", "temppath", $temppath);
+ return($temppath);
+ }
}
return("");
@@ -1831,3 +1905,31 @@ if(!function_exists('exif_imagetype')) {
return($size[2]);
}
}
+
+function validate_include(&$file) {
+ $orig_file = $file;
+
+ $file = realpath($file);
+
+ if (strpos($file, getcwd()) !== 0)
+ return false;
+
+ $file = str_replace(getcwd()."/", "", $file, $count);
+ if ($count != 1)
+ return false;
+
+ if ($orig_file !== $file)
+ return false;
+
+ $valid = false;
+ if (strpos($file, "include/") === 0)
+ $valid = true;
+
+ if (strpos($file, "addon/") === 0)
+ $valid = true;
+
+ if (!$valid)
+ return false;
+
+ return true;
+}