X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=boot.php;h=2242ba476d85f06e811eb872b4f435f5c2625ec0;hb=f4a65cf6ca3d4ea69ac5e9d3a11c75f484b0dda1;hp=ffbe34a8e0249a2e33e61400a5f442120340753e;hpb=e42bbcd6c43d373e34d373b5a330b3ba7d9950ca;p=friendica.git diff --git a/boot.php b/boot.php index ffbe34a8e0..2242ba476d 100644 --- a/boot.php +++ b/boot.php @@ -36,14 +36,23 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_CODENAME', 'Asparagus'); define ( 'FRIENDICA_VERSION', '3.5-dev' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1191 ); +define ( 'DB_UPDATE_VERSION', 1193 ); + +/** + * @brief Constant with a HTML line break. + * + * Contains a HTML line break (br) element and a real carriage return with line + * feed for the source. + * This can be used in HTML and JavaScript where needed a line break. + */ define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); /** - * - * Image storage quality. Lower numbers save space at cost of image detail. + * @brief Image storage quality. + * + * Lower numbers save space at cost of image detail. * For ease of upgrade, please do not change here. Change jpeg quality with * $a->config['system']['jpeg_quality'] = n; * in .htconfig.php, where n is netween 1 and 100, and with very poor results @@ -83,61 +92,76 @@ define ( 'MAX_IMAGE_LENGTH', -1 ); define ( 'DEFAULT_DB_ENGINE', 'MyISAM' ); /** + * @name SSL Policy + * * SSL redirection policies + * @{ */ - define ( 'SSL_POLICY_NONE', 0 ); define ( 'SSL_POLICY_FULL', 1 ); define ( 'SSL_POLICY_SELFSIGN', 2 ); - +/* @}*/ /** + * @name Logger + * * log levels + * @{ */ - define ( 'LOGGER_NORMAL', 0 ); define ( 'LOGGER_TRACE', 1 ); define ( 'LOGGER_DEBUG', 2 ); define ( 'LOGGER_DATA', 3 ); define ( 'LOGGER_ALL', 4 ); +/* @}*/ /** - * cache levels + * @name Cache + * + * Cache levels + * @{ */ - define ( 'CACHE_MONTH', 0 ); define ( 'CACHE_WEEK', 1 ); define ( 'CACHE_DAY', 2 ); define ( 'CACHE_HOUR', 3 ); +/* @}*/ /** - * registration policies + * @name Register + * + * Registration policies + * @{ */ - define ( 'REGISTER_CLOSED', 0 ); define ( 'REGISTER_APPROVE', 1 ); define ( 'REGISTER_OPEN', 2 ); +/** @}*/ /** - * relationship types + * @name Contact_is + * + * Relationship types + * @{ */ - define ( 'CONTACT_IS_FOLLOWER', 1); define ( 'CONTACT_IS_SHARING', 2); define ( 'CONTACT_IS_FRIEND', 3); - +/** @}*/ /** + * @name Update + * * DB update return values + * @{ */ - define ( 'UPDATE_SUCCESS', 0); define ( 'UPDATE_FAILED', 1); +/** @}*/ /** - * - * page/profile types + * @name page/profile types * * PAGE_NORMAL is a typical personal profile account * PAGE_SOAPBOX automatically approves all friend requests as CONTACT_IS_SHARING, (readonly) @@ -145,24 +169,33 @@ define ( 'UPDATE_FAILED', 1); * write access to wall and comments (no email and not included in page owner's ACL lists) * PAGE_FREELOVE automatically approves all friend requests as full friends (CONTACT_IS_FRIEND). * + * @{ */ - define ( 'PAGE_NORMAL', 0 ); define ( 'PAGE_SOAPBOX', 1 ); define ( 'PAGE_COMMUNITY', 2 ); define ( 'PAGE_FREELOVE', 3 ); define ( 'PAGE_BLOG', 4 ); define ( 'PAGE_PRVGROUP', 5 ); +/** @}*/ -// Type of the community page +/** + * @name CP + * + * Type of the community page + * @{ + */ define ( 'CP_NO_COMMUNITY_PAGE', -1 ); define ( 'CP_USERS_ON_SERVER', 0 ); define ( 'CP_GLOBAL_COMMUNITY', 1 ); +/** @}*/ /** + * @name Network + * * Network and protocol family types + * @{ */ - define ( 'NETWORK_DFRN', 'dfrn'); // Friendica, Mistpark, other DFRN implementations define ( 'NETWORK_ZOT', 'zot!'); // Zot! define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations @@ -183,6 +216,7 @@ define ( 'NETWORK_APPNET', 'apdn'); // app.net define ( 'NETWORK_NEWS', 'nntp'); // Network News Transfer Protocol define ( 'NETWORK_ICALENDAR', 'ical'); // iCalendar define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder +/** @}*/ /** * These numbers are used in stored permissions @@ -229,9 +263,11 @@ define ( 'ZCURL_TIMEOUT' , (-1)); /** - * email notification options + * @name Notify + * + * Email notification options + * @{ */ - define ( 'NOTIFY_INTRO', 0x0001 ); define ( 'NOTIFY_CONFIRM', 0x0002 ); define ( 'NOTIFY_WALL', 0x0004 ); @@ -245,12 +281,15 @@ define ( 'NOTIFY_POKE', 0x0200 ); define ( 'NOTIFY_SHARE', 0x0400 ); define ( 'NOTIFY_SYSTEM', 0x8000 ); +/* @}*/ /** + * @name Term + * * Tag/term types + * @{ */ - define ( 'TERM_UNKNOWN', 0 ); define ( 'TERM_HASHTAG', 1 ); define ( 'TERM_MENTION', 2 ); @@ -266,9 +305,11 @@ define ( 'TERM_OBJ_PHOTO', 2 ); /** - * various namespaces we may need to parse + * @name Namespaces + * + * Various namespaces we may need to parse + * @{ */ - define ( 'NAMESPACE_ZOT', 'http://purl.org/zot' ); define ( 'NAMESPACE_DFRN' , 'http://purl.org/macgirvin/dfrn/1.0' ); define ( 'NAMESPACE_THREAD' , 'http://purl.org/syndication/thread/1.0' ); @@ -284,10 +325,14 @@ define ( 'NAMESPACE_FEED', 'http://schemas.google.com/g/2010#updates- define ( 'NAMESPACE_OSTATUS', 'http://ostatus.org/schema/1.0' ); define ( 'NAMESPACE_STATUSNET', 'http://status.net/schema/api/1/' ); define ( 'NAMESPACE_ATOM1', 'http://www.w3.org/2005/Atom' ); +/* @}*/ + /** - * activity stream defines + * @name Activity + * + * Activity stream defines + * @{ */ - define ( 'ACTIVITY_LIKE', NAMESPACE_ACTIVITY_SCHEMA . 'like' ); define ( 'ACTIVITY_DISLIKE', NAMESPACE_DFRN . '/dislike' ); define ( 'ACTIVITY_ATTEND', NAMESPACE_ZOT . '/activity/attendyes' ); @@ -326,14 +371,19 @@ define ( 'ACTIVITY_OBJ_GROUP', NAMESPACE_ACTIVITY_SCHEMA . 'group' ); define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_DFRN . '/tagterm' ); define ( 'ACTIVITY_OBJ_PROFILE', NAMESPACE_DFRN . '/profile' ); define ( 'ACTIVITY_OBJ_QUESTION', 'http://activityschema.org/object/question' ); +/* @}*/ /** - * item weight for query ordering + * @name Gravity + * + * Item weight for query ordering + * @{ */ - define ( 'GRAVITY_PARENT', 0); define ( 'GRAVITY_LIKE', 3); define ( 'GRAVITY_COMMENT', 6); +/* @}*/ + /** * @@ -417,6 +467,7 @@ class App { public $is_tablet; public $is_friendica_app; public $performance = array(); + public $callstack = array(); public $nav_sel; @@ -480,7 +531,7 @@ class App { private $cached_profile_picdate; /** - * App constructor. + * @brief App constructor. */ function __construct() { @@ -504,6 +555,12 @@ class App { $this->performance["marktime"] = 0; $this->performance["markstart"] = microtime(true); + $this->callstack["database"] = 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(); @@ -540,7 +597,7 @@ class App { 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 */ @@ -593,7 +650,7 @@ class App { $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 @@ -620,7 +677,7 @@ class App { $this->module = 'home'; } - /** + /* * See if there is any page number information, and initialise * pagination */ @@ -632,7 +689,7 @@ class App { $this->pager['start'] = 0; $this->pager['total'] = 0; - /** + /* * Detect mobile devices */ @@ -643,7 +700,7 @@ class App { // Friendica-Client $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)"); - /** + /* * register template engines */ $dc = get_declared_classes(); @@ -853,6 +910,10 @@ class App { } function get_cached_avatar_image($avatar_image){ + return $avatar_image; + + // The following code is deactivated. It doesn't seem to make any sense and it slows down the system. + /* if($this->cached_profile_image[$avatar_image]) return $this->cached_profile_image[$avatar_image]; @@ -872,6 +933,7 @@ class App { } } return $this->cached_profile_image[$avatar_image]; + */ } @@ -966,6 +1028,20 @@ class App { $this->performance[$value] += (float)$duration; $this->performance["marktime"] += (float)$duration; + + // Trace the different functions with their timestamps + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5); + + array_shift($trace); + + $function = array(); + foreach ($trace AS $func) + $function[] = $func["function"]; + + $function = implode(", ", $function); + + $this->callstack[$value][$function] += (float)$duration; + } function mark_timestamp($mark) { @@ -1229,22 +1305,21 @@ function run_update_function($x) { return true; } - -function check_plugins(&$a) { - - /** - * - * Synchronise plugins: - * - * $a->config['system']['addon'] contains a comma-separated list of names - * of plugins/addons which are used on this system. - * Go through the database list of already installed addons, and if we have - * an entry, but it isn't in the config list, call the uninstall procedure - * and mark it uninstalled in the database (for now we'll remove it). - * Then go through the config list and if we have a plugin that isn't installed, - * call the install procedure and add it to the database. - * +/** + * @brief Synchronise plugins: + * + * $a->config['system']['addon'] contains a comma-separated list of names + * of plugins/addons which are used on this system. + * Go through the database list of already installed addons, and if we have + * an entry, but it isn't in the config list, call the uninstall procedure + * and mark it uninstalled in the database (for now we'll remove it). + * Then go through the config list and if we have a plugin that isn't installed, + * call the install procedure and add it to the database. + * + * @param App $a + * */ +function check_plugins(&$a) { $r = q("SELECT * FROM `addon` WHERE `installed` = 1"); if(count($r)) @@ -1301,7 +1376,7 @@ function get_guid($size=16, $prefix = "") { $prefix = substr($prefix, 0, $size - 22); return(str_replace(".", "", uniqid($prefix, true))); } else { - $prefix = substr($prefix, 0, $size - 13); + $prefix = substr($prefix, 0, max($size - 13, 0)); return(uniqid($prefix)); } } @@ -1316,6 +1391,9 @@ function get_guid($size=16, $prefix = "") { * * @return string * Returns the complete html for inserting into the page + * + * @hooks 'login_hook' + * string $o */ function login($register = false, $hiddens=false) { $a = get_app(); @@ -1461,17 +1539,18 @@ function get_max_import_size() { } /** + * @brief Wrap calls to proc_close(proc_open()) and call hook + * so plugins can take part in process :) * - * Wrap calls to proc_close(proc_open()) and call hook - * so plugins can take part in process :) - * - * args: - * $cmd program to run - * next args are passed as $cmd command line - * + * @param string $cmd program to run + * + * next args are passed as $cmd command line * e.g.: proc_run("ls","-la","/tmp"); * - * $cmd and string args are surrounded with "" + * @note $cmd and string args are surrounded with "" + * + * @hooks 'proc_run' + * array $arr */ function proc_run($cmd){ @@ -1955,8 +2034,8 @@ function get_temppath() { } function set_template_engine(&$a, $engine = 'internal') { -// This function is no longer necessary, but keep it as a wrapper to the class method -// to avoid breaking themes again unnecessarily +/// @note This function is no longer necessary, but keep it as a wrapper to the class method +/// to avoid breaking themes again unnecessarily $a->set_template_engine($engine); } @@ -2007,3 +2086,25 @@ function current_load() { return max($load_arr); } + +/** + * @brief get c-style args + * + * @return int + */ +function argc() { + return get_app()->argc; +} + +/** + * @brief Returns the value of a argv key + * + * @param int $x argv key + * @return string Value of the argv key + */ +function argv($x) { + if(array_key_exists($x,get_app()->argv)) + return get_app()->argv[$x]; + + return ''; +}