Move App to src

- Add `use Friendica\App;` wherever needed
This commit is contained in:
Hypolite Petovan 2017-04-30 00:07:00 -04:00
commit 20043914e6
197 changed files with 1321 additions and 996 deletions

983
boot.php
View file

@ -19,6 +19,7 @@
require_once(__DIR__ . DIRECTORY_SEPARATOR. 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'); require_once(__DIR__ . DIRECTORY_SEPARATOR. 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/config.php'); require_once('include/config.php');
@ -502,988 +503,6 @@ function startup() {
} }
/**
*
* class: App
*
* @brief Our main application structure for the life of this page.
*
* Primarily deals with the URL that got us here
* and tries to make some sense of it, and
* stores our page contents and config storage
* and anything else that might need to be passed around
* before we spit the page out.
*
*/
class App {
/// @TODO decide indending as a colorful mixure is ahead ...
public $module_loaded = false;
public $query_string;
public $config;
public $page;
public $profile;
public $profile_uid;
public $user;
public $cid;
public $contact;
public $contacts;
public $page_contact;
public $content;
public $data = array();
public $error = false;
public $cmd;
public $argv;
public $argc;
public $module;
public $pager;
public $strings;
public $path;
public $hooks;
public $timezone;
public $interactive = true;
public $plugins;
public $apps = array();
public $identities;
public $is_mobile = false;
public $is_tablet = false;
public $is_friendica_app;
public $performance = array();
public $callstack = array();
public $theme_info = array();
public $backend = true;
public $nav_sel;
public $category;
// Allow themes to control internal parameters
// by changing App values in theme.php
public $sourcename = '';
public $videowidth = 425;
public $videoheight = 350;
public $force_max_items = 0;
public $theme_thread_allow = true;
public $theme_events_in_profile = true;
/**
* @brief An array for all theme-controllable parameters
*
* Mostly unimplemented yet. Only options 'template_engine' and
* beyond are used.
*/
public $theme = array(
'sourcename' => '',
'videowidth' => 425,
'videoheight' => 350,
'force_max_items' => 0,
'thread_allow' => true,
'stylesheet' => '',
'template_engine' => 'smarty3',
);
/**
* @brief An array of registered template engines ('name'=>'class name')
*/
public $template_engines = array();
/**
* @brief An array of instanced template engines ('name'=>'instance')
*/
public $template_engine_instance = array();
public $process_id;
private $ldelim = array(
'internal' => '',
'smarty3' => '{{'
);
private $rdelim = array(
'internal' => '',
'smarty3' => '}}'
);
private $scheme;
private $hostname;
private $db;
private $curl_code;
private $curl_content_type;
private $curl_headers;
private $cached_profile_image;
private $cached_profile_picdate;
private static $a;
/**
* @brief App constructor.
*/
function __construct() {
global $default_timezone;
$hostname = "";
if (file_exists(".htpreconfig.php")) {
include ".htpreconfig.php";
}
$this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
date_default_timezone_set($this->timezone);
$this->performance["start"] = microtime(true);
$this->performance["database"] = 0;
$this->performance["database_write"] = 0;
$this->performance["network"] = 0;
$this->performance["file"] = 0;
$this->performance["rendering"] = 0;
$this->performance["parser"] = 0;
$this->performance["marktime"] = 0;
$this->performance["markstart"] = microtime(true);
$this->callstack["database"] = array();
$this->callstack["database_write"] = array();
$this->callstack["network"] = array();
$this->callstack["file"] = array();
$this->callstack["rendering"] = array();
$this->callstack["parser"] = array();
$this->config = array();
$this->page = array();
$this->pager= array();
$this->query_string = '';
$this->process_id = uniqid("log", true);
startup();
set_include_path(
get_include_path() . PATH_SEPARATOR
. 'include' . PATH_SEPARATOR
. 'library' . PATH_SEPARATOR
. 'library/langdet' . PATH_SEPARATOR
. '.' );
$this->scheme = 'http';
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'];
if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
}
/*
* Figure out if we are running at the top of a domain
* or in a sub-directory and adjust accordingly
*/
/// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander)
$path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
if (isset($path) && strlen($path) && ($path != $this->path)) {
$this->path = $path;
}
}
if ($hostname != "") {
$this->hostname = $hostname;
}
if (is_array($_SERVER["argv"]) && $_SERVER["argc"] > 1 && substr(end($_SERVER["argv"]), 0, 4) == "http" ) {
$this->set_baseurl(array_pop($_SERVER["argv"]));
$_SERVER["argc"] --;
}
if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === "pagename=") {
$this->query_string = substr($_SERVER['QUERY_STRING'], 9);
// removing trailing / - maybe a nginx problem
$this->query_string = ltrim($this->query_string, '/');
} elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") {
$this->query_string = substr($_SERVER['QUERY_STRING'], 2);
// removing trailing / - maybe a nginx problem
$this->query_string = ltrim($this->query_string, '/');
}
if (x($_GET, 'pagename')) {
$this->cmd = trim($_GET['pagename'], '/\\');
} elseif (x($_GET, 'q')) {
$this->cmd = trim($_GET['q'], '/\\');
}
// fix query_string
$this->query_string = str_replace($this->cmd . "&", $this->cmd . "?", $this->query_string);
// unix style "homedir"
if (substr($this->cmd, 0, 1) === '~') {
$this->cmd = 'profile/' . substr($this->cmd, 1);
}
// Diaspora style profile url
if (substr($this->cmd, 0, 2) === 'u/') {
$this->cmd = 'profile/' . substr($this->cmd, 2);
}
/*
* Break the URL path into C style argc/argv style arguments for our
* modules. Given "http://example.com/module/arg1/arg2", $this->argc
* will be 3 (integer) and $this->argv will contain:
* [0] => 'module'
* [1] => 'arg1'
* [2] => 'arg2'
*
*
* There will always be one argument. If provided a naked domain
* URL, $this->argv[0] is set to "home".
*/
$this->argv = explode('/', $this->cmd);
$this->argc = count($this->argv);
if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) {
$this->module = str_replace(".", "_", $this->argv[0]);
$this->module = str_replace("-", "_", $this->module);
} else {
$this->argc = 1;
$this->argv = array('home');
$this->module = 'home';
}
/*
* See if there is any page number information, and initialise
* pagination
*/
$this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1);
$this->pager['itemspage'] = 50;
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
if ($this->pager['start'] < 0) {
$this->pager['start'] = 0;
}
$this->pager['total'] = 0;
/*
* Detect mobile devices
*/
$mobile_detect = new Mobile_Detect();
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
// Friendica-Client
$this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)");
/*
* register template engines
*/
$dc = get_declared_classes();
foreach ($dc as $k) {
if (in_array("ITemplateEngine", class_implements($k))){
$this->register_template_engine($k);
}
}
self::$a = $this;
}
public static function get_basepath() {
$basepath = get_config("system", "basepath");
if ($basepath == "") {
$basepath = dirname(__FILE__);
}
if ($basepath == "") {
$basepath = $_SERVER["DOCUMENT_ROOT"];
}
if ($basepath == "") {
$basepath = $_SERVER["PWD"];
}
return $basepath;
}
function get_scheme() {
return $this->scheme;
}
/**
* @brief Retrieves the Friendica instance base URL
*
* This function assembles the base URL from multiple parts:
* - Protocol is determined either by the request or a combination of
* system.ssl_policy and the $ssl parameter.
* - Host name is determined either by system.hostname or inferred from request
* - Path is inferred from SCRIPT_NAME
*
* Note: $ssl parameter value doesn't directly correlate with the resulting protocol
*
* @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN
* @return string Friendica server base URL
*/
function get_baseurl($ssl = false) {
// Is the function called statically?
if (!(isset($this) && get_class($this) == __CLASS__)) {
return self::$a->get_baseurl($ssl);
}
$scheme = $this->scheme;
if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) {
$scheme = 'https';
}
// Basically, we have $ssl = true on any links which can only be seen by a logged in user
// (and also the login link). Anything seen by an outsider will have it turned off.
if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) {
if ($ssl) {
$scheme = 'https';
} else {
$scheme = 'http';
}
}
if (Config::get('config', 'hostname') != '') {
$this->hostname = Config::get('config', 'hostname');
}
return $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
}
/**
* @brief Initializes the baseurl components
*
* Clears the baseurl cache to prevent inconstistencies
*
* @param string $url
*/
function set_baseurl($url) {
$parsed = @parse_url($url);
if ($parsed) {
$this->scheme = $parsed['scheme'];
$hostname = $parsed['host'];
if (x($parsed, 'port')) {
$hostname .= ':' . $parsed['port'];
}
if (x($parsed, 'path')) {
$this->path = trim($parsed['path'], '\\/');
}
if (file_exists(".htpreconfig.php")) {
include ".htpreconfig.php";
}
if (get_config('config', 'hostname') != '') {
$this->hostname = get_config('config', 'hostname');
}
if (!isset($this->hostname) OR ($this->hostname == '')) {
$this->hostname = $hostname;
}
}
}
function get_hostname() {
if (get_config('config', 'hostname') != "") {
$this->hostname = get_config('config', 'hostname');
}
return $this->hostname;
}
function set_hostname($h) {
$this->hostname = $h;
}
function set_path($p) {
$this->path = trim(trim($p), '/');
}
function get_path() {
return $this->path;
}
function set_pager_total($n) {
$this->pager['total'] = intval($n);
}
function set_pager_itemspage($n) {
$this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
}
function set_pager_page($n) {
$this->pager['page'] = $n;
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
}
function init_pagehead() {
$interval = ((local_user()) ? get_pconfig(local_user(),'system','update_interval') : 40000);
// If the update is "deactivated" set it to the highest integer number (~24 days)
if ($interval < 0) {
$interval = 2147483647;
}
if ($interval < 10000) {
$interval = 40000;
}
// compose the page title from the sitename and the
// current module called
if (!$this->module == '') {
$this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')';
} else {
$this->page['title'] = $this->config['sitename'];
}
/* put the head template at the beginning of page['htmlhead']
* since the code added by the modules frequently depends on it
* being first
*/
if (!isset($this->page['htmlhead'])) {
$this->page['htmlhead'] = '';
}
// If we're using Smarty, then doing replace_macros() will replace
// any unrecognized variables with a blank string. Since we delay
// replacing $stylesheet until later, we need to replace it now
// with another variable name
if ($this->theme['template_engine'] === 'smarty3') {
$stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
} else {
$stylesheet = '$stylesheet';
}
$shortcut_icon = get_config("system", "shortcut_icon");
if ($shortcut_icon == "") {
$shortcut_icon = "images/friendica-32.png";
}
$touch_icon = get_config("system", "touch_icon");
if ($touch_icon == "") {
$touch_icon = "images/friendica-128.png";
}
// get data wich is needed for infinite scroll on the network page
$invinite_scroll = infinite_scroll_data($this->module);
$tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
'$local_user' => local_user(),
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
'$delitem' => t('Delete this item?'),
'$showmore' => t('show more'),
'$showfewer' => t('show fewer'),
'$update_interval' => $interval,
'$shortcut_icon' => $shortcut_icon,
'$touch_icon' => $touch_icon,
'$stylesheet' => $stylesheet,
'$infinite_scroll' => $invinite_scroll,
)) . $this->page['htmlhead'];
}
function init_page_end() {
if (!isset($this->page['end'])) {
$this->page['end'] = '';
}
$tpl = get_markup_template('end.tpl');
$this->page['end'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
)) . $this->page['end'];
}
function set_curl_code($code) {
$this->curl_code = $code;
}
function get_curl_code() {
return $this->curl_code;
}
function set_curl_content_type($content_type) {
$this->curl_content_type = $content_type;
}
function get_curl_content_type() {
return $this->curl_content_type;
}
function set_curl_headers($headers) {
$this->curl_headers = $headers;
}
function get_curl_headers() {
return $this->curl_headers;
}
function get_cached_avatar_image($avatar_image){
return $avatar_image;
}
/**
* @brief Removes the baseurl from an url. This avoids some mixed content problems.
*
* @param string $orig_url
*
* @return string The cleaned url
*/
function remove_baseurl($orig_url){
// Is the function called statically?
if (!(isset($this) && get_class($this) == __CLASS__)) {
return self::$a->remove_baseurl($orig_url);
}
// Remove the hostname from the url if it is an internal link
$nurl = normalise_link($orig_url);
$base = normalise_link($this->get_baseurl());
$url = str_replace($base."/", "", $nurl);
// if it is an external link return the orignal value
if ($url == normalise_link($orig_url)) {
return $orig_url;
} else {
return $url;
}
}
/**
* @brief Register template engine class
*
* If $name is "", is used class static property $class::$name
*
* @param string $class
* @param string $name
*/
function register_template_engine($class, $name = '') {
/// @TODO Really === and not just == ?
if ($name === "") {
$v = get_class_vars( $class );
if (x($v,"name")) $name = $v['name'];
}
if ($name === "") {
echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
killme();
}
$this->template_engines[$name] = $class;
}
/**
* @brief Return template engine instance.
*
* If $name is not defined, return engine defined by theme,
* or default
*
* @param strin $name Template engine name
* @return object Template Engine instance
*/
function template_engine($name = '') {
/// @TODO really type-check included?
if ($name !== "") {
$template_engine = $name;
} else {
$template_engine = 'smarty3';
if (x($this->theme, 'template_engine')) {
$template_engine = $this->theme['template_engine'];
}
}
if (isset($this->template_engines[$template_engine])){
if (isset($this->template_engine_instance[$template_engine])){
return $this->template_engine_instance[$template_engine];
} else {
$class = $this->template_engines[$template_engine];
$obj = new $class;
$this->template_engine_instance[$template_engine] = $obj;
return $obj;
}
}
echo "template engine <tt>$template_engine</tt> is not registered!\n"; killme();
}
/**
* @brief Returns the active template engine.
*
* @return string
*/
function get_template_engine() {
return $this->theme['template_engine'];
}
function set_template_engine($engine = 'smarty3') {
$this->theme['template_engine'] = $engine;
}
function get_template_ldelim($engine = 'smarty3') {
return $this->ldelim[$engine];
}
function get_template_rdelim($engine = 'smarty3') {
return $this->rdelim[$engine];
}
function save_timestamp($stamp, $value) {
if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) {
return;
}
$duration = (float)(microtime(true)-$stamp);
if (!isset($this->performance[$value])) {
// Prevent ugly E_NOTICE
$this->performance[$value] = 0;
}
$this->performance[$value] += (float)$duration;
$this->performance["marktime"] += (float)$duration;
$callstack = $this->callstack();
if (!isset($this->callstack[$value][$callstack])) {
// Prevent ugly E_NOTICE
$this->callstack[$value][$callstack] = 0;
}
$this->callstack[$value][$callstack] += (float)$duration;
}
/**
* @brief Log active processes into the "process" table
*/
function start_process() {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$command = basename($trace[0]["file"]);
$this->remove_inactive_processes();
q("START TRANSACTION");
$r = q("SELECT `pid` FROM `process` WHERE `pid` = %d", intval(getmypid()));
if (!dbm::is_result($r)) {
q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')",
intval(getmypid()),
dbesc($command),
dbesc(datetime_convert()));
}
q("COMMIT");
}
/**
* @brief Remove inactive processes
*/
function remove_inactive_processes() {
q("START TRANSACTION");
$r = q("SELECT `pid` FROM `process`");
if (dbm::is_result($r)) {
foreach ($r AS $process) {
if (!posix_kill($process["pid"], 0)) {
q("DELETE FROM `process` WHERE `pid` = %d", intval($process["pid"]));
}
}
}
q("COMMIT");
}
/**
* @brief Remove the active process from the "process" table
*/
function end_process() {
q("DELETE FROM `process` WHERE `pid` = %d", intval(getmypid()));
}
/**
* @brief Returns a string with a callstack. Can be used for logging.
*
* @return string
*/
function callstack() {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6);
// We remove the first two items from the list since they contain data that we don't need.
array_shift($trace);
array_shift($trace);
$callstack = array();
foreach ($trace AS $func) {
$callstack[] = $func["function"];
}
return implode(", ", $callstack);
}
function get_useragent() {
return
FRIENDICA_PLATFORM . " '" .
FRIENDICA_CODENAME . "' " .
FRIENDICA_VERSION . "-" .
DB_UPDATE_VERSION . "; " .
$this->get_baseurl();
}
function is_friendica_app() {
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() {
static $backends = array();
$backends[] = "_well_known";
$backends[] = "api";
$backends[] = "dfrn_notify";
$backends[] = "fetch";
$backends[] = "hcard";
$backends[] = "hostxrd";
$backends[] = "nodeinfo";
$backends[] = "noscrape";
$backends[] = "p";
$backends[] = "poco";
$backends[] = "post";
$backends[] = "proxy";
$backends[] = "pubsub";
$backends[] = "pubsubhubbub";
$backends[] = "receive";
$backends[] = "rsd_xml";
$backends[] = "salmon";
$backends[] = "statistics_json";
$backends[] = "xrd";
// Check if current module is in backend or backend flag is set
return (in_array($this->module, $backends) || $this->backend);
}
/**
* @brief Checks if the maximum number of database processes is reached
*
* @return bool Is the limit reached?
*/
function 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 minimal memory is reached
*
* @return bool Is the memory limit reached?
*/
public function min_memory_reached() {
$min_memory = Config::get('system', 'min_memory', 0);
if ($min_memory == 0) {
return false;
}
if (!is_readable("/proc/meminfo")) {
return false;
}
$memdata = explode("\n", file_get_contents('/proc/meminfo'));
$meminfo = array();
foreach ($memdata as $line) {
list($key, $val) = explode(":", $line);
$meminfo[$key] = (int)trim(str_replace("kB", "", $val));
$meminfo[$key] = (int)($meminfo[$key] / 1024);
}
if (!isset($meminfo['MemAvailable']) OR !isset($meminfo['MemFree'])) {
return false;
}
$free = $meminfo['MemAvailable'] + $meminfo['MemFree'];
$reached = ($free < $min_memory);
if ($reached) {
logger('Minimal memory reached: '.$free.'/'.$meminfo['MemTotal'].' - limit '.$min_memory, LOGGER_DEBUG);
}
return $reached;
}
/**
* @brief Checks if the maximum load is reached
*
* @return bool Is the load reached?
*/
function 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.' for '.$process.' tasks ('.$maxsysload.') too high.');
return true;
}
}
return false;
}
function proc_run($args) {
if (!function_exists("proc_open")) {
return;
}
// If the last worker fork was less than 10 seconds before then don't fork another one.
// This should prevent the forking of masses of workers.
$cachekey = "app:proc_run:started";
$result = Cache::get($cachekey);
if (!is_null($result) AND (time() - $result) < 10) {
return;
}
// Set the timestamp of the last proc_run
Cache::set($cachekey, time(), CACHE_MINUTE);
array_unshift($args, ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'));
// add baseurl to args. cli scripts can't construct it
$args[] = $this->get_baseurl();
for ($x = 0; $x < count($args); $x ++) {
$args[$x] = escapeshellarg($args[$x]);
}
$cmdline = implode($args, " ");
if ($this->min_memory_reached()) {
return;
}
if (get_config('system', 'proc_windows')) {
$resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__));
} else {
$resource = proc_open($cmdline . " &", array(), $foo, dirname(__FILE__));
}
if (!is_resource($resource)) {
logger('We got no resource for command '.$cmdline, LOGGER_DEBUG);
return;
}
proc_close($resource);
}
/**
* @brief Returns the system user that is executing the script
*
* This mostly returns something like "www-data".
*
* @return string system username
*/
static function systemuser() {
if (!function_exists('posix_getpwuid') OR !function_exists('posix_geteuid')) {
return '';
}
$processUser = posix_getpwuid(posix_geteuid());
return $processUser['name'];
}
/**
* @brief Checks if a given directory is usable for the system
*
* @return boolean the directory is usable
*/
static function directory_usable($directory) {
if ($directory == '') {
logger("Directory is empty. This shouldn't happen.", LOGGER_DEBUG);
return false;
}
if (!file_exists($directory)) {
logger('Path "'.$directory.'" does not exist for user '.self::systemuser(), LOGGER_DEBUG);
return false;
}
if (is_file($directory)) {
logger('Path "'.$directory.'" is a file for user '.self::systemuser(), LOGGER_DEBUG);
return false;
}
if (!is_dir($directory)) {
logger('Path "'.$directory.'" is not a directory for user '.self::systemuser(), LOGGER_DEBUG);
return false;
}
if (!is_writable($directory)) {
logger('Path "'.$directory.'" is not writable for user '.self::systemuser(), LOGGER_DEBUG);
return false;
}
return true;
}
}
/** /**
* @brief Retrieve the App structure * @brief Retrieve the App structure
* *

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
// Included here for completeness, but this is a very dangerous operation. // Included here for completeness, but this is a very dangerous operation.
// It is the caller's responsibility to confirm the requestor's intent and // It is the caller's responsibility to confirm the requestor's intent and
// authorisation to do this. // authorisation to do this.

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
/** /**
* @file include/ForumManager.php * @file include/ForumManager.php
* @brief ForumManager class with its methods related to forum functionality * * @brief ForumManager class with its methods related to forum functionality *

View file

@ -4,6 +4,8 @@
* @brief This file contains the Photo class for image processing * @brief This file contains the Photo class for image processing
*/ */
use Friendica\App;
require_once("include/photos.php"); require_once("include/photos.php");
class Photo { class Photo {

View file

@ -5,6 +5,7 @@
* *
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Core\PConfig; use Friendica\Core\PConfig;

View file

@ -4,6 +4,8 @@
* @file include/acl_selectors.php * @file include/acl_selectors.php
*/ */
use Friendica\App;
require_once "include/contact_selectors.php"; require_once "include/contact_selectors.php";
require_once "include/contact_widgets.php"; require_once "include/contact_widgets.php";
require_once "include/DirSearch.php"; require_once "include/DirSearch.php";

View file

@ -6,6 +6,7 @@
* @todo Automatically detect if incoming data is HTML or BBCode * @todo Automatically detect if incoming data is HTML or BBCode
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/HTTPExceptions.php'; require_once 'include/HTTPExceptions.php';

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/security.php'); require_once('include/security.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/oembed.php'; require_once 'include/oembed.php';

View file

@ -1,5 +1,6 @@
<?php /** @file */ <?php /** @file */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('boot.php'); require_once('boot.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function follow_widget($value = "") { function follow_widget($value = "") {
return replace_macros(get_markup_template('follow.tpl'), array( return replace_macros(get_markup_template('follow.tpl'), array(

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once "include/bbcode.php"; require_once "include/bbcode.php";
require_once "include/acl_selectors.php"; require_once "include/acl_selectors.php";

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
function cronjobs_run(&$argv, &$argc){ function cronjobs_run(&$argv, &$argc){

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("boot.php"); require_once("boot.php");

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');

View file

@ -7,6 +7,8 @@
* https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf * https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
*/ */
use Friendica\App;
require_once("include/Contact.php"); require_once("include/Contact.php");
require_once("include/ostatus.php"); require_once("include/ostatus.php");
require_once("include/enotify.php"); require_once("include/enotify.php");

View file

@ -8,6 +8,7 @@
* This will change in the future. * This will change in the future.
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/items.php'; require_once 'include/items.php';

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Emailer.php'); require_once('include/Emailer.php');
require_once('include/email.php'); require_once('include/email.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');

View file

@ -4,6 +4,8 @@
* @brief functions specific to event handling * @brief functions specific to event handling
*/ */
use Friendica\App;
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
require_once 'include/map.php'; require_once 'include/map.php';
require_once 'include/datetime.php'; require_once 'include/datetime.php';

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/Scrape.php"); require_once("include/Scrape.php");
require_once("include/socgraph.php"); require_once("include/socgraph.php");
require_once('include/group.php'); require_once('include/group.php');

View file

@ -3,6 +3,8 @@
* @file include/identity.php * @file include/identity.php
*/ */
use Friendica\App;
require_once('include/ForumManager.php'); require_once('include/ForumManager.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once("mod/proxy.php"); require_once("mod/proxy.php");

View file

@ -4,6 +4,7 @@
* @file include/items.php * @file include/items.php
*/ */
use Friendica\App;
use Friendica\ParseUrl; use Friendica\ParseUrl;
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/diaspora.php"); require_once("include/diaspora.php");
/** /**

View file

@ -2,6 +2,7 @@
// send a private message // send a private message
use Friendica\App;
function send_message($recipient=0, $body='', $subject='', $replyto=''){ function send_message($recipient=0, $body='', $subject='', $replyto=''){

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function nav(App $a) { function nav(App $a) {
/* /*

View file

@ -4,6 +4,7 @@
* @file include/network.php * @file include/network.php
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("include/xml.php"); require_once("include/xml.php");

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');

View file

@ -5,6 +5,8 @@
* *
*/ */
use Friendica\App;
define('REQUEST_TOKEN_DURATION', 300); define('REQUEST_TOKEN_DURATION', 300);
define('ACCESS_TOKEN_DURATION', 31536000); define('ACCESS_TOKEN_DURATION', 31536000);

View file

@ -4,6 +4,7 @@
* @file include/oembed.php * @file include/oembed.php
*/ */
use Friendica\App;
use Friendica\ParseUrl; use Friendica\ParseUrl;
use Friendica\Core\Config; use Friendica\Core\Config;

View file

@ -3,6 +3,8 @@
* @file include/ostatus.php * @file include/ostatus.php
*/ */
use Friendica\App;
require_once("include/Contact.php"); require_once("include/Contact.php");
require_once("include/threads.php"); require_once("include/threads.php");
require_once("include/html2bbcode.php"); require_once("include/html2bbcode.php");

View file

@ -4,6 +4,7 @@
* @file include/plaintext.php * @file include/plaintext.php
*/ */
use Friendica\App;
use Friendica\ParseUrl; use Friendica\ParseUrl;
require_once("include/Photo.php"); require_once("include/Photo.php");

View file

@ -5,6 +5,7 @@
* @brief Some functions to handle addons and themes. * @brief Some functions to handle addons and themes.
*/ */
use Friendica\App;
/** /**
* @brief uninstalls an addon. * @brief uninstalls an addon.

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
if (!file_exists("boot.php") AND (sizeof($_SERVER["argv"]) != 0)) { if (!file_exists("boot.php") AND (sizeof($_SERVER["argv"]) != 0)) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function auto_redir(App $a, $contact_nick) { function auto_redir(App $a, $contact_nick) {
// prevent looping // prevent looping

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
/** /**
* @brief Calculate the hash that is needed for the "Friendica" cookie * @brief Calculate the hash that is needed for the "Friendica" cookie
* *

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("boot.php"); require_once("boot.php");

View file

@ -7,6 +7,7 @@
* @todo Detect if it is a forum * @todo Detect if it is a forum
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/datetime.php'); require_once('include/datetime.php');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
function create_tags_from_item($itemid) { function create_tags_from_item($itemid) {
$profile_base = App::get_baseurl(); $profile_base = App::get_baseurl();
$profile_data = parse_url($profile_base); $profile_data = parse_url($profile_base);

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/template_processor.php"); require_once("include/template_processor.php");
require_once("include/friendica_smarty.php"); require_once("include/friendica_smarty.php");
require_once("include/Smilies.php"); require_once("include/Smilies.php");

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
function add_thread($itemid, $onlyshadow = false) { function add_thread($itemid, $onlyshadow = false) {
$items = q("SELECT `uid`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, $items = q("SELECT `uid`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`,
`moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `gcontact-id`, `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `gcontact-id`,

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/Photo.php"); require_once("include/Photo.php");
define("IMPORT_DEBUG", False); define("IMPORT_DEBUG", False);

View file

@ -13,6 +13,7 @@
* *
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('boot.php'); require_once('boot.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("mod/hostxrd.php"); require_once("mod/hostxrd.php");

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Scrape.php'); require_once('include/Scrape.php');
function acctlink_init(App $a) { function acctlink_init(App $a) {

View file

@ -1,6 +1,8 @@
<?php <?php
/* ACL selector json backend */ /* ACL selector json backend */
use Friendica\App;
require_once 'include/acl_selectors.php'; require_once 'include/acl_selectors.php';
function acl_init(App $a) { function acl_init(App $a) {

View file

@ -6,6 +6,7 @@
* @brief Friendica admin * @brief Friendica admin
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("include/enotify.php"); require_once("include/enotify.php");

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/Contact.php'); require_once('include/Contact.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function amcd_content(App $a) { function amcd_content(App $a) {
echo <<< JSON echo <<< JSON
{ {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/api.php'); require_once('include/api.php');
function oauth_get_client($request){ function oauth_get_client($request){

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function apps_content(App $a) { function apps_content(App $a) {
$privateaddons = get_config('config', 'private_addons'); $privateaddons = get_config('config', 'private_addons');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
function attach_init(App $a) { function attach_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
require_once 'library/markdown.php'; require_once 'library/markdown.php';
require_once 'include/bb2diaspora.php'; require_once 'include/bb2diaspora.php';

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/conversation.php'); require_once('include/conversation.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -6,6 +6,8 @@
* of the profile owner * of the profile owner
*/ */
use Friendica\App;
require_once('include/event.php'); require_once('include/event.php');
require_once('include/redir.php'); require_once('include/redir.php');

View file

@ -4,6 +4,7 @@
* General purpose landing page for plugins/addons * General purpose landing page for plugins/addons
*/ */
use Friendica\App;
function cb_init(App $a) { function cb_init(App $a) {
call_hooks('cb_init'); call_hooks('cb_init');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/Contact.php'); require_once('include/Contact.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
function community_init(App $a) { function community_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/group.php'); require_once('include/group.php');
function contactgroup_content(App $a) { function contactgroup_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Contact.php'); require_once('include/Contact.php');
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');

View file

@ -15,6 +15,7 @@
// fast - e.g. one or two milliseconds to fetch parent items for the current content, // fast - e.g. one or two milliseconds to fetch parent items for the current content,
// and 10-20 milliseconds to fetch all the child items. // and 10-20 milliseconds to fetch all the child items.
use Friendica\App;
function content_content(App $a, $update = 0) { function content_content(App $a, $update = 0) {

View file

@ -6,6 +6,7 @@
* addons repository will be listed though ATM) * addons repository will be listed though ATM)
*/ */
use Friendica\App;
function credits_content(App $a) { function credits_content(App $a) {
/* fill the page with credits */ /* fill the page with credits */

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/contact_selectors.php"); require_once("include/contact_selectors.php");
require_once("mod/contacts.php"); require_once("mod/contacts.php");

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('mod/settings.php'); require_once('mod/settings.php');
function delegate_init(App $a) { function delegate_init(App $a) {

View file

@ -18,6 +18,8 @@
* https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_confirmation.png * https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_confirmation.png
*/ */
use Friendica\App;
require_once('include/enotify.php'); require_once('include/enotify.php');
require_once('include/group.php'); require_once('include/group.php');
require_once('include/Probe.php'); require_once('include/Probe.php');

View file

@ -5,6 +5,9 @@
* @brief The dfrn notify endpoint * @brief The dfrn notify endpoint
* @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf * @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
*/ */
use Friendica\App;
require_once('include/items.php'); require_once('include/items.php');
require_once('include/dfrn.php'); require_once('include/dfrn.php');
require_once('include/event.php'); require_once('include/event.php');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/items.php'); require_once('include/items.php');
require_once('include/auth.php'); require_once('include/auth.php');
require_once('include/dfrn.php'); require_once('include/dfrn.php');

View file

@ -12,6 +12,8 @@
* https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_request.png * https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_request.png
*/ */
use Friendica\App;
require_once('include/enotify.php'); require_once('include/enotify.php');
require_once('include/Scrape.php'); require_once('include/Scrape.php');
require_once('include/Probe.php'); require_once('include/Probe.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function directory_init(App $a) { function directory_init(App $a) {
$a->set_pager_itemspage(60); $a->set_pager_itemspage(60);

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/Contact.php'); require_once('include/Contact.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function display_init(App $a) { function display_init(App $a) {
if ((get_config('system','block_public')) && (! local_user()) && (! remote_user())) { if ((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
function editpost_content(App $a) { function editpost_content(App $a) {

View file

@ -3,6 +3,9 @@
* @file mod/events.php * @file mod/events.php
* @brief The events module * @brief The events module
*/ */
use Friendica\App;
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
require_once 'include/datetime.php'; require_once 'include/datetime.php';
require_once 'include/event.php'; require_once 'include/event.php';

View file

@ -5,6 +5,8 @@
* @author Fabio Comuni <fabrixxm@kirgroup.com> * @author Fabio Comuni <fabrixxm@kirgroup.com>
*/ */
use Friendica\App;
require_once('include/Photo.php'); require_once('include/Photo.php');
/** /**

View file

@ -2,6 +2,9 @@
/* /*
This file is part of the Diaspora protocol. It is used for fetching single public posts. This file is part of the Diaspora protocol. It is used for fetching single public posts.
*/ */
use Friendica\App;
require_once("include/crypto.php"); require_once("include/crypto.php");
require_once("include/diaspora.php"); require_once("include/diaspora.php");
require_once("include/xml.php"); require_once("include/xml.php");

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function filerm_content(App $a) { function filerm_content(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Scrape.php'); require_once('include/Scrape.php');
require_once('include/follow.php'); require_once('include/follow.php');
require_once('include/Contact.php'); require_once('include/Contact.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
function friendica_init(App $a) { function friendica_init(App $a) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function fsuggest_post(App $a) { function fsuggest_post(App $a) {

View file

@ -5,6 +5,7 @@
* remove contacts to the contact groups * remove contacts to the contact groups
*/ */
use Friendica\App;
function group_init(App $a) { function group_init(App $a) {
if (local_user()) { if (local_user()) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function hcard_init(App $a) { function hcard_init(App $a) {
$blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false); $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('library/markdown.php'); require_once('library/markdown.php');
if (!function_exists('load_doc_file')) { if (!function_exists('load_doc_file')) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
if(! function_exists('home_init')) { if(! function_exists('home_init')) {
function home_init(App $a) { function home_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/crypto.php'); require_once('include/crypto.php');
function hostxrd_init(App $a) { function hostxrd_init(App $a) {

View file

@ -8,6 +8,8 @@
* License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3) * License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3)
*/ */
use Friendica\App;
require_once("include/socgraph.php"); require_once("include/socgraph.php");
require_once("include/Contact.php"); require_once("include/Contact.php");

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function ignored_init(App $a) { function ignored_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once "include/Photo.php"; require_once "include/Photo.php";
$install_wizard_pass = 1; $install_wizard_pass = 1;

View file

@ -7,6 +7,8 @@
* *
*/ */
use Friendica\App;
require_once('include/email.php'); require_once('include/email.php');
function invite_post(App $a) { function invite_post(App $a) {

View file

@ -15,6 +15,8 @@
* posting categories go through item_store() instead of this function. * posting categories go through item_store() instead of this function.
*/ */
use Friendica\App;
require_once 'include/crypto.php'; require_once 'include/crypto.php';
require_once 'include/enotify.php'; require_once 'include/enotify.php';
require_once 'include/email.php'; require_once 'include/email.php';

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,7 +1,8 @@
<?php <?php
require_once('include/datetime.php'); use Friendica\App;
require_once('include/datetime.php');
function localtime_post(App $a) { function localtime_post(App $a) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function lockview_content(App $a) { function lockview_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function login_content(App $a) { function login_content(App $a) {
if (x($_SESSION, 'theme')) { if (x($_SESSION, 'theme')) {
unset($_SESSION['theme']); unset($_SESSION['theme']);

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/email.php'); require_once('include/email.php');
require_once('include/enotify.php'); require_once('include/enotify.php');
require_once('include/text.php'); require_once('include/text.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
function maintenance_content(App $a) { function maintenance_content(App $a) {

View file

@ -1,7 +1,8 @@
<?php <?php
require_once("include/text.php"); use Friendica\App;
require_once("include/text.php");
function manage_post(App $a) { function manage_post(App $a) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
function manifest_content(App $a) { function manifest_content(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/text.php'); require_once('include/text.php');
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
require_once('include/message.php'); require_once('include/message.php');
require_once('include/Smilies.php'); require_once('include/Smilies.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('library/asn1.php'); require_once('library/asn1.php');
function modexp_init(App $a) { function modexp_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function msearch_post(App $a) { function msearch_post(App $a) {
$perpage = (($_POST['n']) ? $_POST['n'] : 80); $perpage = (($_POST['n']) ? $_POST['n'] : 80);

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/nav.php"); require_once("include/nav.php");
function navigation_content(App $a) { function navigation_content(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
function network_init(App $a) { function network_init(App $a) {
if (! local_user()) { if (! local_user()) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function newmember_content(App $a) { function newmember_content(App $a) {

View file

@ -5,6 +5,7 @@
* Documentation: http://nodeinfo.diaspora.software/schema.html * Documentation: http://nodeinfo.diaspora.software/schema.html
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/plugin.php'; require_once 'include/plugin.php';

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Contact.php'); require_once('include/Contact.php');
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function noscrape_init(App $a) { function noscrape_init(App $a) {
if($a->argc > 1) if($a->argc > 1)

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function notes_init(App $a) { function notes_init(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -2,6 +2,7 @@
/* identi.ca -> friendica items permanent-url compatibility */ /* identi.ca -> friendica items permanent-url compatibility */
use Friendica\App;
function notice_init(App $a) { function notice_init(App $a) {

View file

@ -5,6 +5,8 @@
* @brief The notifications module * @brief The notifications module
*/ */
use Friendica\App;
require_once("include/NotificationsManager.php"); require_once("include/NotificationsManager.php");
require_once("include/contact_selectors.php"); require_once("include/contact_selectors.php");
require_once("include/network.php"); require_once("include/network.php");

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/NotificationsManager.php'); require_once('include/NotificationsManager.php');
function notify_init(App $a) { function notify_init(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/oembed.php"); require_once("include/oembed.php");
function oembed_content(App $a) { function oembed_content(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
function oexchange_init(App $a) { function oexchange_init(App $a) {
if (($a->argc > 1) && ($a->argv[1] === 'xrd')) { if (($a->argc > 1) && ($a->argv[1] === 'xrd')) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
require_once('library/openid.php'); require_once('library/openid.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function opensearch_content(App $a) { function opensearch_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Scrape.php'); require_once('include/Scrape.php');
require_once('include/follow.php'); require_once('include/follow.php');

View file

@ -2,6 +2,9 @@
/* /*
This file is part of the Diaspora protocol. It is used for fetching single public posts. This file is part of the Diaspora protocol. It is used for fetching single public posts.
*/ */
use Friendica\App;
require_once("include/diaspora.php"); require_once("include/diaspora.php");
function p_init($a){ function p_init($a){

View file

@ -10,6 +10,7 @@
* @see ParseUrl::getSiteinfo() for more information about scraping embeddable content * @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
*/ */
use Friendica\App;
use Friendica\ParseUrl; use Friendica\ParseUrl;
require_once("include/items.php"); require_once("include/items.php");

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/Photo.php'); require_once('include/Photo.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/Photo.php'; require_once 'include/Photo.php';

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/ForumManager.php'); require_once('include/ForumManager.php');

View file

@ -2,6 +2,8 @@
// See here for a documentation for portable contacts: // See here for a documentation for portable contacts:
// https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html // https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html
use Friendica\App;
function poco_init(App $a) { function poco_init(App $a) {
require_once("include/bbcode.php"); require_once("include/bbcode.php");

View file

@ -11,13 +11,15 @@
* *
* private creates a private conversation with the recipient. Otherwise your profile's default post privacy is used. * private creates a private conversation with the recipient. Otherwise your profile's default post privacy is used.
* *
*/
* @file mod/poke.php * @file mod/poke.php
*/
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');
function poke_init(App $a) { function poke_init(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -4,6 +4,7 @@
* Zot endpoint * Zot endpoint
*/ */
use Friendica\App;
require_once('include/salmon.php'); require_once('include/salmon.php');
require_once('include/crypto.php'); require_once('include/crypto.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function pretheme_init(App $a) { function pretheme_init(App $a) {
if ($_REQUEST['theme']) { if ($_REQUEST['theme']) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Scrape.php'); require_once('include/Scrape.php');
function probe_content(App $a) { function probe_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');
require_once('include/redir.php'); require_once('include/redir.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/Photo.php"); require_once("include/Photo.php");
function profile_photo_init(App $a) { function profile_photo_init(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/Contact.php"); require_once("include/Contact.php");
require_once('include/Probe.php'); require_once('include/Probe.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function profperm_init(App $a) { function profperm_init(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -1,6 +1,8 @@
<?php <?php
// Based upon "Privacy Image Cache" by Tobias Hößl <https://github.com/CatoTH/> // Based upon "Privacy Image Cache" by Tobias Hößl <https://github.com/CatoTH/>
use Friendica\App;
define('PROXY_DEFAULT_TIME', 86400); // 1 Day define('PROXY_DEFAULT_TIME', 86400); // 1 Day
define('PROXY_SIZE_MICRO', 'micro'); define('PROXY_SIZE_MICRO', 'micro');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function hub_return($valid,$body) { function hub_return($valid,$body) {
if($valid) { if($valid) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function post_var($name) { function post_var($name) {
return (x($_POST, $name)) ? notags(trim($_POST[$name])) : ''; return (x($_POST, $name)) ? notags(trim($_POST[$name])) : '';
} }

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function qsearch_init(App $a) { function qsearch_init(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function randprof_init(App $a) { function randprof_init(App $a) {
require_once('include/Contact.php'); require_once('include/Contact.php');

View file

@ -4,6 +4,7 @@
* Diaspora endpoint * Diaspora endpoint
*/ */
use Friendica\App;
require_once('include/salmon.php'); require_once('include/salmon.php');
require_once('include/crypto.php'); require_once('include/crypto.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function redir_init(App $a) { function redir_init(App $a) {
$url = ((x($_GET,'url')) ? $_GET['url'] : ''); $url = ((x($_GET,'url')) ? $_GET['url'] : '');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/enotify.php'); require_once('include/enotify.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/user.php'); require_once('include/user.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/enotify.php'); require_once('include/enotify.php');
require_once('include/user.php'); require_once('include/user.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function removeme_post(App $a) { function removeme_post(App $a) {
if (! local_user()) { if (! local_user()) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Scrape.php'); require_once('include/Scrape.php');
require_once('include/follow.php'); require_once('include/follow.php');

View file

@ -6,6 +6,7 @@
* @version 0.1.2 * @version 0.1.2
*/ */
use Friendica\App;
/** /**
* @brief Return default robots.txt when init * @brief Return default robots.txt when init

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function rsd_xml_content(App $a) function rsd_xml_content(App $a)
{ {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/salmon.php'); require_once('include/salmon.php');
require_once('include/ostatus.php'); require_once('include/ostatus.php');
require_once('include/crypto.php'); require_once('include/crypto.php');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/bbcode.php"); require_once("include/bbcode.php");
require_once('include/security.php'); require_once('include/security.php');
require_once('include/conversation.php'); require_once('include/conversation.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function session_content(App $a) { function session_content(App $a) {
} }

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/group.php'); require_once('include/group.php');
require_once('include/socgraph.php'); require_once('include/socgraph.php');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
function share_init(App $a) { function share_init(App $a) {
$post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0); $post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);

View file

@ -3,6 +3,7 @@
/** /**
* @file mod/smilies.php * @file mod/smilies.php
*/ */
use Friendica\App;
require_once("include/Smilies.php"); require_once("include/Smilies.php");

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function starred_init(App $a) { function starred_init(App $a) {

View file

@ -4,6 +4,8 @@
* @file mod/statistics_json.php * @file mod/statistics_json.php
*/ */
use Friendica\App;
require_once("include/plugin.php"); require_once("include/plugin.php");
function statistics_json_init(App $a) { function statistics_json_init(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/socgraph.php'); require_once('include/socgraph.php');
require_once('include/contact_widgets.php'); require_once('include/contact_widgets.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/security.php'); require_once('include/security.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/bbcode.php'); require_once('include/bbcode.php');
function tagrm_post(App $a) { function tagrm_post(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function toggle_mobile_init(App $a) { function toggle_mobile_init(App $a) {
if (isset($_GET['off'])) { if (isset($_GET['off'])) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function uexport_init(App $a) { function uexport_init(App $a) {
if (!local_user()) { if (!local_user()) {
killme(); killme();

View file

@ -4,6 +4,8 @@
* View for user import * View for user import
*/ */
use Friendica\App;
require_once("include/uimport.php"); require_once("include/uimport.php");
function uimport_post(App $a) { function uimport_post(App $a) {

View file

@ -2,6 +2,8 @@
// See update_profile.php for documentation // See update_profile.php for documentation
use Friendica\App;
require_once("mod/community.php"); require_once("mod/community.php");
function update_community_content(App $a) { function update_community_content(App $a) {

View file

@ -2,6 +2,8 @@
// See update_profile.php for documentation // See update_profile.php for documentation
use Friendica\App;
require_once("mod/display.php"); require_once("mod/display.php");
require_once("include/group.php"); require_once("include/group.php");

View file

@ -2,6 +2,8 @@
// See update_profile.php for documentation // See update_profile.php for documentation
use Friendica\App;
require_once("mod/network.php"); require_once("mod/network.php");
require_once("include/group.php"); require_once("include/group.php");

View file

@ -5,6 +5,8 @@
* Purpose: AJAX synchronisation of notes page * Purpose: AJAX synchronisation of notes page
*/ */
use Friendica\App;
require_once("mod/notes.php"); require_once("mod/notes.php");
function update_notes_content(App $a) { function update_notes_content(App $a) {

View file

@ -5,6 +5,8 @@
* Purpose: AJAX synchronisation of profile page * Purpose: AJAX synchronisation of profile page
*/ */
use Friendica\App;
require_once("mod/profile.php"); require_once("mod/profile.php");
function update_profile_content(App $a) { function update_profile_content(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/items.php'); require_once('include/items.php');
require_once('include/acl_selectors.php'); require_once('include/acl_selectors.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/Contact.php'); require_once('include/Contact.php');
require_once('include/contact_selectors.php'); require_once('include/contact_selectors.php');

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
function viewsrc_content(App $a) { function viewsrc_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/attach.php'); require_once('include/attach.php');
require_once('include/datetime.php'); require_once('include/datetime.php');

View file

@ -9,6 +9,7 @@
* to the url * to the url
*/ */
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once 'include/Photo.php'; require_once 'include/Photo.php';

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/message.php'); require_once('include/message.php');
function wallmessage_post(App $a) { function wallmessage_post(App $a) {

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once("include/Probe.php"); require_once("include/Probe.php");
function webfinger_content(App $a) { function webfinger_content(App $a) {

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
require_once('include/crypto.php'); require_once('include/crypto.php');
function xrd_init(App $a) { function xrd_init(App $a) {

961
src/App.php Normal file
View file

@ -0,0 +1,961 @@
<?php
namespace Friendica;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
/**
*
* class: App
*
* @brief Our main application structure for the life of this page.
*
* Primarily deals with the URL that got us here
* and tries to make some sense of it, and
* stores our page contents and config storage
* and anything else that might need to be passed around
* before we spit the page out.
*
*/
class App {
public $module_loaded = false;
public $query_string;
public $config;
public $page;
public $profile;
public $profile_uid;
public $user;
public $cid;
public $contact;
public $contacts;
public $page_contact;
public $content;
public $data = array();
public $error = false;
public $cmd;
public $argv;
public $argc;
public $module;
public $pager;
public $strings;
public $path;
public $hooks;
public $timezone;
public $interactive = true;
public $plugins;
public $apps = array();
public $identities;
public $is_mobile = false;
public $is_tablet = false;
public $is_friendica_app;
public $performance = array();
public $callstack = array();
public $theme_info = array();
public $backend = true;
public $nav_sel;
public $category;
// Allow themes to control internal parameters
// by changing App values in theme.php
public $sourcename = '';
public $videowidth = 425;
public $videoheight = 350;
public $force_max_items = 0;
public $theme_thread_allow = true;
public $theme_events_in_profile = true;
/**
* @brief An array for all theme-controllable parameters
*
* Mostly unimplemented yet. Only options 'template_engine' and
* beyond are used.
*/
public $theme = array(
'sourcename' => '',
'videowidth' => 425,
'videoheight' => 350,
'force_max_items' => 0,
'thread_allow' => true,
'stylesheet' => '',
'template_engine' => 'smarty3',
);
/**
* @brief An array of registered template engines ('name'=>'class name')
*/
public $template_engines = array();
/**
* @brief An array of instanced template engines ('name'=>'instance')
*/
public $template_engine_instance = array();
public $process_id;
private $ldelim = array(
'internal' => '',
'smarty3' => '{{'
);
private $rdelim = array(
'internal' => '',
'smarty3' => '}}'
);
private $scheme;
private $hostname;
private $db;
private $curl_code;
private $curl_content_type;
private $curl_headers;
private $cached_profile_image;
private $cached_profile_picdate;
private static $a;
/**
* @brief App constructor.
*/
function __construct() {
global $default_timezone;
$hostname = '';
if (file_exists('.htpreconfig.php')) {
include '.htpreconfig.php';
}
$this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
date_default_timezone_set($this->timezone);
$this->performance['start'] = microtime(true);
$this->performance['database'] = 0;
$this->performance['database_write'] = 0;
$this->performance['network'] = 0;
$this->performance['file'] = 0;
$this->performance['rendering'] = 0;
$this->performance['parser'] = 0;
$this->performance['marktime'] = 0;
$this->performance['markstart'] = microtime(true);
$this->callstack['database'] = array();
$this->callstack['database_write'] = array();
$this->callstack['network'] = array();
$this->callstack['file'] = array();
$this->callstack['rendering'] = array();
$this->callstack['parser'] = array();
$this->config = array();
$this->page = array();
$this->pager = array();
$this->query_string = '';
$this->process_id = uniqid('log', true);
startup();
set_include_path(
get_include_path() . PATH_SEPARATOR
. 'include' . PATH_SEPARATOR
. 'library' . PATH_SEPARATOR
. 'library/langdet' . PATH_SEPARATOR
. '.');
$this->scheme = 'http';
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'];
if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
}
/*
* Figure out if we are running at the top of a domain
* or in a sub-directory and adjust accordingly
*/
/// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander)
$path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
if (isset($path) && strlen($path) && ($path != $this->path)) {
$this->path = $path;
}
}
if ($hostname != '') {
$this->hostname = $hostname;
}
if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') {
$this->set_baseurl(array_pop($_SERVER['argv']));
$_SERVER['argc'] --;
}
if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') {
$this->query_string = substr($_SERVER['QUERY_STRING'], 9);
// removing trailing / - maybe a nginx problem
$this->query_string = ltrim($this->query_string, '/');
} elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === 'q=') {
$this->query_string = substr($_SERVER['QUERY_STRING'], 2);
// removing trailing / - maybe a nginx problem
$this->query_string = ltrim($this->query_string, '/');
}
if (x($_GET, 'pagename')) {
$this->cmd = trim($_GET['pagename'], '/\\');
} elseif (x($_GET, 'q')) {
$this->cmd = trim($_GET['q'], '/\\');
}
// fix query_string
$this->query_string = str_replace($this->cmd . '&', $this->cmd . '?', $this->query_string);
// unix style "homedir"
if (substr($this->cmd, 0, 1) === '~') {
$this->cmd = 'profile/' . substr($this->cmd, 1);
}
// Diaspora style profile url
if (substr($this->cmd, 0, 2) === 'u/') {
$this->cmd = 'profile/' . substr($this->cmd, 2);
}
/*
* Break the URL path into C style argc/argv style arguments for our
* modules. Given "http://example.com/module/arg1/arg2", $this->argc
* will be 3 (integer) and $this->argv will contain:
* [0] => 'module'
* [1] => 'arg1'
* [2] => 'arg2'
*
*
* There will always be one argument. If provided a naked domain
* URL, $this->argv[0] is set to "home".
*/
$this->argv = explode('/', $this->cmd);
$this->argc = count($this->argv);
if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) {
$this->module = str_replace('.', '_', $this->argv[0]);
$this->module = str_replace('-', '_', $this->module);
} else {
$this->argc = 1;
$this->argv = array('home');
$this->module = 'home';
}
// See if there is any page number information, and initialise pagination
$this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1);
$this->pager['itemspage'] = 50;
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
if ($this->pager['start'] < 0) {
$this->pager['start'] = 0;
}
$this->pager['total'] = 0;
// Detect mobile devices
$mobile_detect = new \Mobile_Detect();
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
// Friendica-Client
$this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == 'Apache-HttpClient/UNAVAILABLE (java 1.4)');
// Register template engines
$dc = get_declared_classes();
foreach ($dc as $k) {
if (in_array('ITemplateEngine', class_implements($k))) {
$this->register_template_engine($k);
}
}
self::$a = $this;
}
public static function get_basepath() {
$basepath = get_config('system', 'basepath');
if ($basepath == '') {
$basepath = dirname(__FILE__);
}
if ($basepath == '') {
$basepath = $_SERVER['DOCUMENT_ROOT'];
}
if ($basepath == '') {
$basepath = $_SERVER['PWD'];
}
return $basepath;
}
function get_scheme() {
return $this->scheme;
}
/**
* @brief Retrieves the Friendica instance base URL
*
* This function assembles the base URL from multiple parts:
* - Protocol is determined either by the request or a combination of
* system.ssl_policy and the $ssl parameter.
* - Host name is determined either by system.hostname or inferred from request
* - Path is inferred from SCRIPT_NAME
*
* Note: $ssl parameter value doesn't directly correlate with the resulting protocol
*
* @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN
* @return string Friendica server base URL
*/
function get_baseurl($ssl = false) {
// Is the function called statically?
if (!(isset($this) && get_class($this) == __CLASS__)) {
return self::$a->get_baseurl($ssl);
}
$scheme = $this->scheme;
if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) {
$scheme = 'https';
}
// Basically, we have $ssl = true on any links which can only be seen by a logged in user
// (and also the login link). Anything seen by an outsider will have it turned off.
if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) {
if ($ssl) {
$scheme = 'https';
} else {
$scheme = 'http';
}
}
if (Config::get('config', 'hostname') != '') {
$this->hostname = Config::get('config', 'hostname');
}
return $scheme . '://' . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
}
/**
* @brief Initializes the baseurl components
*
* Clears the baseurl cache to prevent inconstistencies
*
* @param string $url
*/
function set_baseurl($url) {
$parsed = @parse_url($url);
if ($parsed) {
$this->scheme = $parsed['scheme'];
$hostname = $parsed['host'];
if (x($parsed, 'port')) {
$hostname .= ':' . $parsed['port'];
}
if (x($parsed, 'path')) {
$this->path = trim($parsed['path'], '\\/');
}
if (file_exists('.htpreconfig.php')) {
include '.htpreconfig.php';
}
if (get_config('config', 'hostname') != '') {
$this->hostname = get_config('config', 'hostname');
}
if (!isset($this->hostname) OR ( $this->hostname == '')) {
$this->hostname = $hostname;
}
}
}
function get_hostname() {
if (get_config('config', 'hostname') != '') {
$this->hostname = get_config('config', 'hostname');
}
return $this->hostname;
}
function set_hostname($h) {
$this->hostname = $h;
}
function set_path($p) {
$this->path = trim(trim($p), '/');
}
function get_path() {
return $this->path;
}
function set_pager_total($n) {
$this->pager['total'] = intval($n);
}
function set_pager_itemspage($n) {
$this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
}
function set_pager_page($n) {
$this->pager['page'] = $n;
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
}
function init_pagehead() {
$interval = ((local_user()) ? get_pconfig(local_user(), 'system', 'update_interval') : 40000);
// If the update is 'deactivated' set it to the highest integer number (~24 days)
if ($interval < 0) {
$interval = 2147483647;
}
if ($interval < 10000) {
$interval = 40000;
}
// compose the page title from the sitename and the
// current module called
if (!$this->module == '') {
$this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')';
} else {
$this->page['title'] = $this->config['sitename'];
}
/* put the head template at the beginning of page['htmlhead']
* since the code added by the modules frequently depends on it
* being first
*/
if (!isset($this->page['htmlhead'])) {
$this->page['htmlhead'] = '';
}
// If we're using Smarty, then doing replace_macros() will replace
// any unrecognized variables with a blank string. Since we delay
// replacing $stylesheet until later, we need to replace it now
// with another variable name
if ($this->theme['template_engine'] === 'smarty3') {
$stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
} else {
$stylesheet = '$stylesheet';
}
$shortcut_icon = get_config('system', 'shortcut_icon');
if ($shortcut_icon == '') {
$shortcut_icon = 'images/friendica-32.png';
}
$touch_icon = get_config('system', 'touch_icon');
if ($touch_icon == '') {
$touch_icon = 'images/friendica-128.png';
}
// get data wich is needed for infinite scroll on the network page
$invinite_scroll = infinite_scroll_data($this->module);
$tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl, array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
'$local_user' => local_user(),
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
'$delitem' => t('Delete this item?'),
'$showmore' => t('show more'),
'$showfewer' => t('show fewer'),
'$update_interval' => $interval,
'$shortcut_icon' => $shortcut_icon,
'$touch_icon' => $touch_icon,
'$stylesheet' => $stylesheet,
'$infinite_scroll' => $invinite_scroll,
)) . $this->page['htmlhead'];
}
function init_page_end() {
if (!isset($this->page['end'])) {
$this->page['end'] = '';
}
$tpl = get_markup_template('end.tpl');
$this->page['end'] = replace_macros($tpl, array(
'$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
)) . $this->page['end'];
}
function set_curl_code($code) {
$this->curl_code = $code;
}
function get_curl_code() {
return $this->curl_code;
}
function set_curl_content_type($content_type) {
$this->curl_content_type = $content_type;
}
function get_curl_content_type() {
return $this->curl_content_type;
}
function set_curl_headers($headers) {
$this->curl_headers = $headers;
}
function get_curl_headers() {
return $this->curl_headers;
}
function get_cached_avatar_image($avatar_image) {
return $avatar_image;
}
/**
* @brief Removes the baseurl from an url. This avoids some mixed content problems.
*
* @param string $orig_url
*
* @return string The cleaned url
*/
function remove_baseurl($orig_url) {
// Is the function called statically?
if (!(isset($this) && get_class($this) == __CLASS__)) {
return self::$a->remove_baseurl($orig_url);
}
// Remove the hostname from the url if it is an internal link
$nurl = normalise_link($orig_url);
$base = normalise_link($this->get_baseurl());
$url = str_replace($base . '/', '', $nurl);
// if it is an external link return the orignal value
if ($url == normalise_link($orig_url)) {
return $orig_url;
} else {
return $url;
}
}
/**
* @brief Register template engine class
*
* If $name is '', is used class static property $class::$name
*
* @param string $class
* @param string $name
*/
function register_template_engine($class, $name = '') {
/// @TODO Really === and not just == ?
if ($name === '') {
$v = get_class_vars($class);
if (x($v, 'name'))
$name = $v['name'];
}
if ($name === '') {
echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
killme();
}
$this->template_engines[$name] = $class;
}
/**
* @brief Return template engine instance.
*
* If $name is not defined, return engine defined by theme,
* or default
*
* @param strin $name Template engine name
* @return object Template Engine instance
*/
function template_engine($name = '') {
/// @TODO really type-check included?
if ($name !== '') {
$template_engine = $name;
} else {
$template_engine = 'smarty3';
if (x($this->theme, 'template_engine')) {
$template_engine = $this->theme['template_engine'];
}
}
if (isset($this->template_engines[$template_engine])) {
if (isset($this->template_engine_instance[$template_engine])) {
return $this->template_engine_instance[$template_engine];
} else {
$class = $this->template_engines[$template_engine];
$obj = new $class;
$this->template_engine_instance[$template_engine] = $obj;
return $obj;
}
}
echo "template engine <tt>$template_engine</tt> is not registered!\n";
killme();
}
/**
* @brief Returns the active template engine.
*
* @return string
*/
function get_template_engine() {
return $this->theme['template_engine'];
}
function set_template_engine($engine = 'smarty3') {
$this->theme['template_engine'] = $engine;
}
function get_template_ldelim($engine = 'smarty3') {
return $this->ldelim[$engine];
}
function get_template_rdelim($engine = 'smarty3') {
return $this->rdelim[$engine];
}
function save_timestamp($stamp, $value) {
if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) {
return;
}
$duration = (float) (microtime(true) - $stamp);
if (!isset($this->performance[$value])) {
// Prevent ugly E_NOTICE
$this->performance[$value] = 0;
}
$this->performance[$value] += (float) $duration;
$this->performance['marktime'] += (float) $duration;
$callstack = $this->callstack();
if (!isset($this->callstack[$value][$callstack])) {
// Prevent ugly E_NOTICE
$this->callstack[$value][$callstack] = 0;
}
$this->callstack[$value][$callstack] += (float) $duration;
}
/**
* @brief Log active processes into the "process" table
*/
function start_process() {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$command = basename($trace[0]['file']);
$this->remove_inactive_processes();
q('START TRANSACTION');
$r = q('SELECT `pid` FROM `process` WHERE `pid` = %d', intval(getmypid()));
if (!dbm::is_result($r)) {
q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')", intval(getmypid()), dbesc($command), dbesc(datetime_convert()));
}
q('COMMIT');
}
/**
* @brief Remove inactive processes
*/
function remove_inactive_processes() {
q('START TRANSACTION');
$r = q('SELECT `pid` FROM `process`');
if (dbm::is_result($r)) {
foreach ($r AS $process) {
if (!posix_kill($process['pid'], 0)) {
q('DELETE FROM `process` WHERE `pid` = %d', intval($process['pid']));
}
}
}
q('COMMIT');
}
/**
* @brief Remove the active process from the "process" table
*/
function end_process() {
q('DELETE FROM `process` WHERE `pid` = %d', intval(getmypid()));
}
/**
* @brief Returns a string with a callstack. Can be used for logging.
*
* @return string
*/
function callstack() {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6);
// We remove the first two items from the list since they contain data that we don't need.
array_shift($trace);
array_shift($trace);
$callstack = array();
foreach ($trace AS $func) {
$callstack[] = $func['function'];
}
return implode(', ', $callstack);
}
function get_useragent() {
return
FRIENDICA_PLATFORM . " '" .
FRIENDICA_CODENAME . "' " .
FRIENDICA_VERSION . '-' .
DB_UPDATE_VERSION . '; ' .
$this->get_baseurl();
}
function is_friendica_app() {
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() {
static $backends = array();
$backends[] = '_well_known';
$backends[] = 'api';
$backends[] = 'dfrn_notify';
$backends[] = 'fetch';
$backends[] = 'hcard';
$backends[] = 'hostxrd';
$backends[] = 'nodeinfo';
$backends[] = 'noscrape';
$backends[] = 'p';
$backends[] = 'poco';
$backends[] = 'post';
$backends[] = 'proxy';
$backends[] = 'pubsub';
$backends[] = 'pubsubhubbub';
$backends[] = 'receive';
$backends[] = 'rsd_xml';
$backends[] = 'salmon';
$backends[] = 'statistics_json';
$backends[] = 'xrd';
// Check if current module is in backend or backend flag is set
return (in_array($this->module, $backends) || $this->backend);
}
/**
* @brief Checks if the maximum number of database processes is reached
*
* @return bool Is the limit reached?
*/
function 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 minimal memory is reached
*
* @return bool Is the memory limit reached?
*/
public function min_memory_reached() {
$min_memory = Config::get('system', 'min_memory', 0);
if ($min_memory == 0) {
return false;
}
if (!is_readable('/proc/meminfo')) {
return false;
}
$memdata = explode("\n", file_get_contents('/proc/meminfo'));
$meminfo = array();
foreach ($memdata as $line) {
list($key, $val) = explode(':', $line);
$meminfo[$key] = (int) trim(str_replace('kB', '', $val));
$meminfo[$key] = (int) ($meminfo[$key] / 1024);
}
if (!isset($meminfo['MemAvailable']) OR ! isset($meminfo['MemFree'])) {
return false;
}
$free = $meminfo['MemAvailable'] + $meminfo['MemFree'];
$reached = ($free < $min_memory);
if ($reached) {
logger('Minimal memory reached: ' . $free . '/' . $meminfo['MemTotal'] . ' - limit ' . $min_memory, LOGGER_DEBUG);
}
return $reached;
}
/**
* @brief Checks if the maximum load is reached
*
* @return bool Is the load reached?
*/
function 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 . ' for ' . $process . ' tasks (' . $maxsysload . ') too high.');
return true;
}
}
return false;
}
function proc_run($args) {
if (!function_exists('proc_open')) {
return;
}
// If the last worker fork was less than 10 seconds before then don't fork another one.
// This should prevent the forking of masses of workers.
$cachekey = 'app:proc_run:started';
$result = Cache::get($cachekey);
if (!is_null($result) AND ( time() - $result) < 10) {
return;
}
// Set the timestamp of the last proc_run
Cache::set($cachekey, time(), CACHE_MINUTE);
array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'));
// add baseurl to args. cli scripts can't construct it
$args[] = $this->get_baseurl();
for ($x = 0; $x < count($args); $x ++) {
$args[$x] = escapeshellarg($args[$x]);
}
$cmdline = implode($args, ' ');
if ($this->min_memory_reached()) {
return;
}
if (get_config('system', 'proc_windows')) {
$resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__));
} else {
$resource = proc_open($cmdline . ' &', array(), $foo, dirname(__FILE__));
}
if (!is_resource($resource)) {
logger('We got no resource for command ' . $cmdline, LOGGER_DEBUG);
return;
}
proc_close($resource);
}
/**
* @brief Returns the system user that is executing the script
*
* This mostly returns something like "www-data".
*
* @return string system username
*/
static function systemuser() {
if (!function_exists('posix_getpwuid') OR ! function_exists('posix_geteuid')) {
return '';
}
$processUser = posix_getpwuid(posix_geteuid());
return $processUser['name'];
}
/**
* @brief Checks if a given directory is usable for the system
*
* @return boolean the directory is usable
*/
static function directory_usable($directory) {
if ($directory == '') {
logger('Directory is empty. This shouldn\'t happen.', LOGGER_DEBUG);
return false;
}
if (!file_exists($directory)) {
logger('Path "' . $directory . '" does not exist for user ' . self::systemuser(), LOGGER_DEBUG);
return false;
}
if (is_file($directory)) {
logger('Path "' . $directory . '" is a file for user ' . self::systemuser(), LOGGER_DEBUG);
return false;
}
if (!is_dir($directory)) {
logger('Path "' . $directory . '" is not a directory for user ' . self::systemuser(), LOGGER_DEBUG);
return false;
}
if (!is_writable($directory)) {
logger('Path "' . $directory . '" is not writable for user ' . self::systemuser(), LOGGER_DEBUG);
return false;
}
return true;
}
}

View file

@ -3,6 +3,8 @@
* @package util * @package util
*/ */
use Friendica\App;
/* /*
* require boot.php * require boot.php
*/ */

View file

@ -1,5 +1,6 @@
<?php <?php
use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("boot.php"); require_once("boot.php");

View file

@ -7,6 +7,7 @@
* Output to <path/to/messages.po> * Output to <path/to/messages.po>
*/ */
use Friendica\App;
DEFINE("NORM_REGEXP", "|[\\\]|"); DEFINE("NORM_REGEXP", "|[\\\]|");

View file

@ -3,6 +3,7 @@
// Run this from cmdline in basedir and quickly see if we've // Run this from cmdline in basedir and quickly see if we've
// got any parse errors in our application files. // got any parse errors in our application files.
use Friendica\App;
error_reporting(E_ERROR | E_WARNING | E_PARSE ); error_reporting(E_ERROR | E_WARNING | E_PARSE );
ini_set('display_errors', '1'); ini_set('display_errors', '1');

View file

@ -2,7 +2,7 @@
<html itemscope itemtype="http://schema.org/Blog" lang="<?php echo $lang; ?>"> <html itemscope itemtype="http://schema.org/Blog" lang="<?php echo $lang; ?>">
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head> </head>
<body> <body>

View file

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head> </head>
<body> <body>

View file

@ -4,6 +4,8 @@
* Theme settings * Theme settings
*/ */
use Friendica\App;
function theme_content(App $a) { function theme_content(App $a) {
if (!local_user()) { if (!local_user()) {
return; return;

View file

@ -1,5 +1,7 @@
<?php <?php
use Friendica\App;
function duepuntozero_init(App $a) { function duepuntozero_init(App $a) {
set_template_engine($a, 'smarty3'); set_template_engine($a, 'smarty3');

View file

@ -1,4 +1,7 @@
<?php <?php
use Friendica\App;
require_once('view/theme/frio/php/Image.php'); require_once('view/theme/frio/php/Image.php');
function theme_content(App $a) { function theme_content(App $a) {

View file

@ -15,9 +15,9 @@
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>"> <meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>">
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<script>var frio="<?php echo "view/theme/frio"; ?>";</script> <script>var frio="<?php echo "view/theme/frio"; ?>";</script>
<?php $baseurl = App::get_baseurl(); ?> <?php $baseurl = Friendica\App::get_baseurl(); ?>
<?php $frio = "view/theme/frio"; ?> <?php $frio = "view/theme/frio"; ?>
<?php <?php
// Because we use minimal for modals the header and the included js stuff should be only loaded // Because we use minimal for modals the header and the included js stuff should be only loaded

View file

@ -7,6 +7,7 @@
* *
*/ */
use Friendica\App;
/** /**
* @brief Load page template in dependence of the template mode * @brief Load page template in dependence of the template mode

View file

@ -10,9 +10,9 @@
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<meta name="viewport" content="initial-scale=1.0"> <meta name="viewport" content="initial-scale=1.0">
<meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>"> <meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>">
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<script>var frio="<?php echo "view/theme/frio"; ?>";</script> <script>var frio="<?php echo "view/theme/frio"; ?>";</script>
<?php $baseurl = App::get_baseurl(); ?> <?php $baseurl = Friendica\App::get_baseurl(); ?>
<?php $frio = "view/theme/frio"; ?> <?php $frio = "view/theme/frio"; ?>
<?php if(x($page,'htmlhead')) echo $page['htmlhead']; ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead']; ?>
</head> </head>

View file

@ -7,6 +7,8 @@
* *
*/ */
use Friendica\App;
$frio = "view/theme/frio"; $frio = "view/theme/frio";
global $frio; global $frio;

View file

@ -2,7 +2,7 @@
<html lang="<?php echo $lang; ?>"> <html lang="<?php echo $lang; ?>">
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head> </head>
<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>> <body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>

View file

@ -9,6 +9,8 @@
* Maintainer: Zach P <techcity@f.shmuz.in> * Maintainer: Zach P <techcity@f.shmuz.in>
*/ */
use Friendica\App;
function frost_mobile_init(App $a) { function frost_mobile_init(App $a) {
$a->sourcename = 'Friendica mobile web'; $a->sourcename = 'Friendica mobile web';
$a->videowidth = 250; $a->videowidth = 250;

View file

@ -2,7 +2,7 @@
<html lang="<?php echo $lang; ?>"> <html lang="<?php echo $lang; ?>">
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?> <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head> </head>
<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>> <body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>

View file

@ -9,6 +9,8 @@
* Maintainer: Zach P <techcity@f.shmuz.in> * Maintainer: Zach P <techcity@f.shmuz.in>
*/ */
use Friendica\App;
function frost_init(App $a) { function frost_init(App $a) {
$a->videowidth = 400; $a->videowidth = 400;
$a->videoheight = 330; $a->videoheight = 330;

View file

@ -4,6 +4,8 @@
* Theme settings * Theme settings
*/ */
use Friendica\App;
function theme_content(App $a) { function theme_content(App $a) {
if (!local_user()) { if (!local_user()) {
return; return;

View file

@ -7,6 +7,8 @@
* Maintainer: Tobias <https://diekershoff.homeunix.net/friendica/profile/tobias> * Maintainer: Tobias <https://diekershoff.homeunix.net/friendica/profile/tobias>
*/ */
use Friendica\App;
function quattro_init(App $a) { function quattro_init(App $a) {
$a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/tinycon.min.js"></script>'; $a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/tinycon.min.js"></script>';
$a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/js/quattro.js"></script>';; $a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/js/quattro.js"></script>';;

View file

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title> <title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo App::get_baseurl() ?>";</script> <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
<script type="text/javascript"> <script type="text/javascript">
function ScrollToBottom(){ function ScrollToBottom(){
window.scrollTo(0,document.body.scrollHeight); window.scrollTo(0,document.body.scrollHeight);

View file

@ -10,6 +10,8 @@
* Screenshot: <a href="screenshot.png">Screenshot</a> * Screenshot: <a href="screenshot.png">Screenshot</a>
*/ */
use Friendica\App;
function smoothly_init(App $a) { function smoothly_init(App $a) {
set_template_engine($a, 'smarty3'); set_template_engine($a, 'smarty3');

View file

@ -1,9 +1,10 @@
<?php <?php
/** /**
* Theme settings * Theme settings
*/ */
use Friendica\App;
function theme_content(App $a) { function theme_content(App $a) {
if (!local_user()) { if (!local_user()) {

View file

@ -9,6 +9,8 @@
* Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/ * Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
*/ */
use Friendica\App;
require_once "include/plugin.php"; require_once "include/plugin.php";
require_once "include/socgraph.php"; require_once "include/socgraph.php";
require_once "mod/proxy.php"; require_once "mod/proxy.php";