define ( 'FRIENDICA_CODENAME', 'Asparagus');
define ( 'FRIENDICA_VERSION', '3.5-dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1195 );
+define ( 'DB_UPDATE_VERSION', 1200 );
/**
* @brief Constant with a HTML line break.
public $performance = array();
public $callstack = array();
public $theme_info = array();
+ public $backend = true;
public $nav_sel;
*/
public $template_engine_instance = array();
+ public $process_id;
+
private $ldelim = array(
'internal' => '',
'smarty3' => '{{'
$this->query_string = '';
+ $this->process_id = uniqid("log", true);
+
startup();
set_include_path(
$this->scheme = 'http';
- if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS'])
- $this->scheme = 'https';
- elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443))
+ if((x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) ||
+ (x($_SERVER['HTTP_FORWARDED']) && preg_match("/proto=https/", $_SERVER['HTTP_FORWARDED'])) ||
+ (x($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
+ (x($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') ||
+ (x($_SERVER['FRONT_END_HTTPS']) && $_SERVER['FRONT_END_HTTPS'] == 'on') ||
+ (x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) // XXX: reasonable assumption, but isn't this hardcoding too much?
+ ) {
$this->scheme = 'https';
+ }
if(x($_SERVER,'SERVER_NAME')) {
$this->hostname = $_SERVER['SERVER_NAME'];
} else {
$r = q("SELECT `contact`.`avatar-date` AS picdate FROM `contact` WHERE `contact`.`thumb` like '%%/%s'",
$common_filename);
- if(! count($r)){
+ if(! dbm::is_result($r)){
$this->cached_profile_image[$avatar_image] = $avatar_image;
} else {
$this->cached_profile_picdate[$common_filename] = "?rev=".urlencode($r[0]['picdate']);
return($this->is_friendica_app);
}
+ /**
+ * @brief Checks if the site is called via a backend process
+ *
+ * This isn't a perfect solution. But we need this check very early.
+ * So we cannot wait until the modules are loaded.
+ *
+ * @return bool Is it a known backend?
+ */
+ function is_backend() {
+ $backend = array();
+ $backend[] = "_well_known";
+ $backend[] = "api";
+ $backend[] = "dfrn_notify";
+ $backend[] = "fetch";
+ $backend[] = "hcard";
+ $backend[] = "hostxrd";
+ $backend[] = "nodeinfo";
+ $backend[] = "noscrape";
+ $backend[] = "p";
+ $backend[] = "poco";
+ $backend[] = "post";
+ $backend[] = "proxy";
+ $backend[] = "pubsub";
+ $backend[] = "pubsubhubbub";
+ $backend[] = "receive";
+ $backend[] = "rsd_xml";
+ $backend[] = "salmon";
+ $backend[] = "statistics_json";
+ $backend[] = "xrd";
+
+ if (in_array($this->module, $backend))
+ return(true);
+ else
+ return($this->backend);
+ }
+
+ /**
+ * @brief Checks if the maximum number of database processes is reached
+ *
+ * @return bool Is the limit reached?
+ */
+ function max_processes_reached() {
+
+ // Is the function called statically?
+ if (!is_object($this))
+ return(self::$a->max_processes_reached());
+
+ if ($this->is_backend()) {
+ $process = "backend";
+ $max_processes = get_config('system', 'max_processes_backend');
+ if (intval($max_processes) == 0)
+ $max_processes = 5;
+ } else {
+ $process = "frontend";
+ $max_processes = get_config('system', 'max_processes_frontend');
+ if (intval($max_processes) == 0)
+ $max_processes = 20;
+ }
+
+ $processlist = dbm::processlist();
+ if ($processlist["list"] != "") {
+ logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG);
+
+ if ($processlist["amount"] > $max_processes) {
+ logger("Processcheck: Maximum number of processes for ".$process." tasks (".$max_processes.") reached.", LOGGER_DEBUG);
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* @brief Checks if the maximum load is reached
*
*/
function maxload_reached() {
- $maxsysload = intval(get_config('system', 'maxloadavg'));
- if ($maxsysload < 1)
- $maxsysload = 50;
+ // Is the function called statically?
+ if (!is_object($this))
+ return(self::$a->maxload_reached());
+
+ if ($this->is_backend()) {
+ $process = "backend";
+ $maxsysload = intval(get_config('system', 'maxloadavg'));
+ if ($maxsysload < 1)
+ $maxsysload = 50;
+ } else {
+ $process = "frontend";
+ $maxsysload = intval(get_config('system','maxloadavg_frontend'));
+ if ($maxsysload < 1)
+ $maxsysload = 50;
+ }
$load = current_load();
if ($load) {
if (intval($load) > $maxsysload) {
- logger('system: load '.$load.' too high.');
+ logger('system: load '.$load.' for '.$process.' tasks ('.$maxsysload.') too high.');
return true;
}
}
function check_plugins(&$a) {
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
- if(count($r))
+ if(dbm::is_result($r))
$installed = $r;
else
$installed = array();
$o .= replace_macros($tpl, array(
- '$dest_url' => $dest_url,
- '$logout' => t('Logout'),
- '$login' => t('Login'),
+ '$dest_url' => $dest_url,
+ '$logout' => t('Logout'),
+ '$login' => t('Login'),
- '$lname' => array('username', t('Nickname or Email address: ') , '', ''),
+ '$lname' => array('username', t('Nickname or Email: ') , '', ''),
'$lpassword' => array('password', t('Password: '), '', ''),
'$lremember' => array('remember', t('Remember me'), 0, ''),
- '$openid' => !$noid,
- '$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''),
+ '$openid' => !$noid,
+ '$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''),
- '$hiddens' => $hiddens,
+ '$hiddens' => $hiddens,
- '$register' => $reg,
+ '$register' => $reg,
'$lostpass' => t('Forgot your password?'),
'$lostlink' => t('Password Reset'),
$found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'",
dbesc($parameters));
+ $funcname = str_replace(".php", "", basename($argv[0]))."_run";
+
+ // Define the processes that have priority over any other process
+ /// @todo Better check for priority processes
+ $high_priority = array("delivery_run", "notifier_run", "pubsubpublish_run");
+ $low_priority = array("queue_run", "gprobe_run", "discover_poco_run");
+
+ if (in_array($funcname, $high_priority))
+ $priority = 1;
+ elseif (in_array($funcname, $low_priority))
+ $priority = 3;
+ else
+ $priority = 2;
+
if (!$found)
+ // quickfix for the delivery problems, 2106-07-28
+ /// @todo find better solution
+ //q("INSERT INTO `workerqueue` (`function`, `parameter`, `created`, `priority`)
+ // VALUES ('%s', '%s', '%s', %d)",
+ // dbesc($funcname),
q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`)
VALUES ('%s', '%s', %d)",
dbesc($parameters),
dbesc(datetime_convert()),
- intval(0));
+ intval($priority));
// Should we quit and wait for the poller to be called as a cronjob?
if (get_config("system", "worker_dont_fork"))
$r = q("select theme from user where uid = %d limit 1",
intval($a->profile_uid)
);
- if($r)
+ if(dbm::is_result($r))
$page_theme = $r[0]['theme'];
}
intval($uid)
);
- if($p && count($p)) {
+ if(dbm::is_result($p)) {
$tmp_dob = substr($p[0]['dob'],5);
if(intval($tmp_dob)) {
$y = datetime_convert($tz,$tz,'now','Y');