]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
moved get_guid to System::createGUID
[friendica.git] / boot.php
index 732816d1b9354f28010bdbfa67a85f2055060809..b45bc57670cde628999decffbaf90ebd8212cd54 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -1,6 +1,6 @@
 <?php
-/** @file boot.php
- *
+/**
+ * @file boot.php
  * This file defines some global constants and includes the central App class.
  */
 
 require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
 
 use Friendica\App;
+use Friendica\BaseObject;
 use Friendica\Core\Addon;
-use Friendica\Core\System;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
-use Friendida\Core\L10n;
+use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
+use Friendica\Core\Protocol;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Model\Contact;
 use Friendica\Database\DBStructure;
-use Friendica\Module\Login;
+use Friendica\Model\Contact;
+use Friendica\Model\Conversation;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/text.php';
-require_once 'include/datetime.php';
 
 define('FRIENDICA_PLATFORM',     'Friendica');
-define('FRIENDICA_CODENAME',     'Asparagus');
-define('FRIENDICA_VERSION',      '3.6-dev');
+define('FRIENDICA_CODENAME',     'The Tazmans Flax-lily');
+define('FRIENDICA_VERSION',      '2018.08-dev');
 define('DFRN_PROTOCOL_VERSION',  '2.23');
-define('DB_UPDATE_VERSION',      1248);
+define('DB_UPDATE_VERSION',      1276);
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
 /**
@@ -57,7 +59,6 @@ const DB_UPDATE_FAILED = 2;      // Database check failed
  * This can be used in HTML and JavaScript where needed a line break.
  */
 define('EOL',                    "<br />\r\n");
-define('ATOM_TIME',              'Y-m-d\TH:i:s\Z');
 
 /**
  * @brief Image storage quality.
@@ -122,18 +123,20 @@ define('LOGGER_ALL',             4);
 
 /**
  * @name Cache
+ * @deprecated since version 3.6
+ * @see Cache
  *
  * Cache levels
  * @{
  */
-define('CACHE_MONTH',            0);
-define('CACHE_WEEK',             1);
-define('CACHE_DAY',              2);
-define('CACHE_HOUR',             3);
-define('CACHE_HALF_HOUR',        4);
-define('CACHE_QUARTER_HOUR',     5);
-define('CACHE_FIVE_MINUTES',     6);
-define('CACHE_MINUTE',           7);
+define('CACHE_MONTH',            Cache::MONTH);
+define('CACHE_WEEK',             Cache::WEEK);
+define('CACHE_DAY',              Cache::DAY);
+define('CACHE_HOUR',             Cache::HOUR);
+define('CACHE_HALF_HOUR',        Cache::HALF_HOUR);
+define('CACHE_QUARTER_HOUR',     Cache::QUARTER_HOUR);
+define('CACHE_FIVE_MINUTES',     Cache::FIVE_MINUTES);
+define('CACHE_MINUTE',           Cache::MINUTE);
 /* @}*/
 
 /**
@@ -209,12 +212,16 @@ define('PAGE_PRVGROUP',          5);
  *
  * ACCOUNT_TYPE_COMMUNITY - the account is community forum
  *     Associated page types: PAGE_COMMUNITY, PAGE_PRVGROUP
+ *
+ * ACCOUNT_TYPE_RELAY - the account is a relay
+ *      This will only be assigned to contacts, not to user accounts
  * @{
  */
 define('ACCOUNT_TYPE_PERSON',      0);
 define('ACCOUNT_TYPE_ORGANISATION', 1);
 define('ACCOUNT_TYPE_NEWS',        2);
 define('ACCOUNT_TYPE_COMMUNITY',   3);
+define('ACCOUNT_TYPE_RELAY',       4);
 /**
  * @}
  */
@@ -225,57 +232,62 @@ define('ACCOUNT_TYPE_COMMUNITY',   3);
  * Type of the community page
  * @{
  */
-define('CP_NO_COMMUNITY_PAGE',  -1);
-define('CP_USERS_ON_SERVER',     0);
-define('CP_GLOBAL_COMMUNITY',    1);
-define('CP_USERS_AND_GLOBAL',    2);
+define('CP_NO_INTERNAL_COMMUNITY', -2);
+define('CP_NO_COMMUNITY_PAGE',     -1);
+define('CP_USERS_ON_SERVER',        0);
+define('CP_GLOBAL_COMMUNITY',       1);
+define('CP_USERS_AND_GLOBAL',       2);
 /**
  * @}
  */
 
 /**
  * @name Protocols
+ * @deprecated since version 3.6
+ * @see Conversation
  *
  * Different protocols that we are storing
  * @{
  */
-define('PROTOCOL_UNKNOWN',         0);
-define('PROTOCOL_DFRN',            1);
-define('PROTOCOL_DIASPORA',        2);
-define('PROTOCOL_OSTATUS_SALMON',  3);
-define('PROTOCOL_OSTATUS_FEED',    4); // Deprecated
-define('PROTOCOL_GS_CONVERSATION', 5); // Deprecated
-define('PROTOCOL_SPLITTED_CONV',   6);
+define('PROTOCOL_UNKNOWN'        , Conversation::PROTOCOL_UNKNOWN);
+define('PROTOCOL_DFRN'           , Conversation::PROTOCOL_DFRN);
+define('PROTOCOL_DIASPORA'       , Conversation::PROTOCOL_DIASPORA);
+define('PROTOCOL_OSTATUS_SALMON' , Conversation::PROTOCOL_OSTATUS_SALMON);
+define('PROTOCOL_OSTATUS_FEED'   , Conversation::PROTOCOL_OSTATUS_FEED);    // Deprecated
+define('PROTOCOL_GS_CONVERSATION', Conversation::PROTOCOL_GS_CONVERSATION); // Deprecated
+define('PROTOCOL_SPLITTED_CONV'  , Conversation::PROTOCOL_SPLITTED_CONV);
 /**
  * @}
  */
 
 /**
- * @name Network
+ * @name Network constants
+ * @deprecated since version 3.6
+ * @see Protocol
  *
  * Network and protocol family types
  * @{
  */
-define('NETWORK_DFRN',             'dfrn');    // Friendica, Mistpark, other DFRN implementations
-define('NETWORK_ZOT',              'zot!');    // Zot! - Currently unsupported
-define('NETWORK_OSTATUS',          'stat');    // GNU-social, Pleroma, Mastodon, other OStatus implementations
-define('NETWORK_FEED',             'feed');    // RSS/Atom feeds with no known "post/notify" protocol
-define('NETWORK_DIASPORA',         'dspr');    // Diaspora
-define('NETWORK_MAIL',             'mail');    // IMAP/POP
-define('NETWORK_FACEBOOK',         'face');    // Facebook API
-define('NETWORK_LINKEDIN',         'lnkd');    // LinkedIn
-define('NETWORK_XMPP',             'xmpp');    // XMPP - Currently unsupported
-define('NETWORK_MYSPACE',          'mysp');    // MySpace - Currently unsupported
-define('NETWORK_GPLUS',            'goog');    // Google+
-define('NETWORK_PUMPIO',           'pump');    // pump.io
-define('NETWORK_TWITTER',          'twit');    // Twitter
-define('NETWORK_DIASPORA2',        'dspc');    // Diaspora connector
-define('NETWORK_STATUSNET',        'stac');    // Statusnet connector
-define('NETWORK_APPNET',           'apdn');    // app.net - Dead protocol
-define('NETWORK_NEWS',             'nntp');    // Network News Transfer Protocol - Currently unsupported
-define('NETWORK_ICALENDAR',        'ical');    // iCalendar - Currently unsupported
-define('NETWORK_PNUT',             'pnut');    // pnut.io - Currently unsupported
-define('NETWORK_PHANTOM',          'unkn');    // Place holder
+define('NETWORK_DFRN'     , Protocol::DFRN);      // Friendica, Mistpark, other DFRN implementations
+define('NETWORK_ZOT'      , Protocol::ZOT);       // Zot! - Currently unsupported
+define('NETWORK_OSTATUS'  , Protocol::OSTATUS);   // GNU-social, Pleroma, Mastodon, other OStatus implementations
+define('NETWORK_FEED'     , Protocol::FEED);      // RSS/Atom feeds with no known "post/notify" protocol
+define('NETWORK_DIASPORA' , Protocol::DIASPORA);  // Diaspora
+define('NETWORK_MAIL'     , Protocol::MAIL);      // IMAP/POP
+define('NETWORK_FACEBOOK' , Protocol::FACEBOOK);  // Facebook API
+define('NETWORK_LINKEDIN' , Protocol::LINKEDIN);  // LinkedIn
+define('NETWORK_XMPP'     , Protocol::XMPP);      // XMPP - Currently unsupported
+define('NETWORK_MYSPACE'  , Protocol::MYSPACE);   // MySpace - Currently unsupported
+define('NETWORK_GPLUS'    , Protocol::GPLUS);     // Google+
+define('NETWORK_PUMPIO'   , Protocol::PUMPIO);    // pump.io
+define('NETWORK_TWITTER'  , Protocol::TWITTER);   // Twitter
+define('NETWORK_DIASPORA2', Protocol::DIASPORA2); // Diaspora connector
+define('NETWORK_STATUSNET', Protocol::STATUSNET); // Statusnet connector
+define('NETWORK_APPNET'   , Protocol::APPNET);    // app.net - Dead protocol
+define('NETWORK_NEWS'     , Protocol::NEWS);      // Network News Transfer Protocol - Currently unsupported
+define('NETWORK_ICALENDAR', Protocol::ICALENDAR); // iCalendar - Currently unsupported
+define('NETWORK_PNUT'     , Protocol::PNUT);      // pnut.io - Currently unsupported
+define('NETWORK_PHANTOM'  , Protocol::PHANTOM);   // Place holder
 /**
  * @}
  */
@@ -439,8 +451,9 @@ define('ACTIVITY_OBJ_QUESTION', 'http://activityschema.org/object/question');
  * @{
  */
 define('GRAVITY_PARENT',       0);
-define('GRAVITY_LIKE',         3);
+define('GRAVITY_ACTIVITY',     3);
 define('GRAVITY_COMMENT',      6);
+define('GRAVITY_UNKNOWN',      9);
 /* @}*/
 
 /**
@@ -486,36 +499,6 @@ if (!defined("SIGTERM")) {
 if (!defined('CURLE_OPERATION_TIMEDOUT')) {
        define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED);
 }
-/**
- * Reverse the effect of magic_quotes_gpc if it is enabled.
- * Please disable magic_quotes_gpc so we don't have to do this.
- * See http://php.net/manual/en/security.magicquotes.disabling.php
- */
-function startup()
-{
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       set_time_limit(0);
-
-       // This has to be quite large to deal with embedded private photos
-       ini_set('pcre.backtrack_limit', 500000);
-
-       if (get_magic_quotes_gpc()) {
-               $process = [&$_GET, &$_POST, &$_COOKIE, &$_REQUEST];
-               while (list($key, $val) = each($process)) {
-                       foreach ($val as $k => $v) {
-                               unset($process[$key][$k]);
-                               if (is_array($v)) {
-                                       $process[$key][stripslashes($k)] = $v;
-                                       $process[] = &$process[$key][stripslashes($k)];
-                               } else {
-                                       $process[$key][stripslashes($k)] = stripslashes($v);
-                               }
-                       }
-               }
-               unset($process);
-       }
-}
 
 /**
  * @brief Retrieve the App structure
@@ -530,6 +513,7 @@ function get_app()
 
        if (empty($a)) {
                $a = new App(dirname(__DIR__));
+               BaseObject::setApp($a);
        }
 
        return $a;
@@ -661,7 +645,7 @@ function check_db($via_worker)
 
        if (empty($build)) {
                Config::set('system', 'build', DB_UPDATE_VERSION - 1);
-               $build = DB_UPDATE_VERSION;
+               $build = DB_UPDATE_VERSION - 1;
        }
 
        // We don't support upgrading from very old versions anymore
@@ -669,7 +653,7 @@ function check_db($via_worker)
                die('You try to update from a version prior to database version 1170. The direct upgrade path is not supported. Please update to version 3.5.4 before updating to this version.');
        }
 
-       if ($build != DB_UPDATE_VERSION) {
+       if ($build < DB_UPDATE_VERSION) {
                // When we cannot execute the database update via the worker, we will do it directly
                if (!Worker::add(PRIORITY_CRITICAL, 'DBUpdate') && $via_worker) {
                        update_db();
@@ -851,35 +835,12 @@ function check_addons(App $a)
        return;
 }
 
-function get_guid($size = 16, $prefix = "")
-{
-       if ($prefix == "") {
-               $a = get_app();
-               $prefix = hash("crc32", $a->get_hostname());
-       }
-
-       while (strlen($prefix) < ($size - 13)) {
-               $prefix .= mt_rand();
-       }
-
-       if ($size >= 24) {
-               $prefix = substr($prefix, 0, $size - 22);
-               return(str_replace(".", "", uniqid($prefix, true)));
-       } else {
-               $prefix = substr($prefix, 0, max($size - 13, 0));
-               return(uniqid($prefix));
-       }
-}
-
 /**
  * @brief Used to end the current process, after saving session state.
+ * @deprecated
  */
 function killme()
 {
-       if (!get_app()->is_backend()) {
-               session_write_close();
-       }
-
        exit();
 }
 
@@ -923,10 +884,10 @@ function public_contact()
        if (!$public_contact_id && x($_SESSION, 'authenticated')) {
                if (x($_SESSION, 'my_address')) {
                        // Local user
-                       $public_contact_id = intval(Contact::getIdForURL($_SESSION['my_address'], 0));
+                       $public_contact_id = intval(Contact::getIdForURL($_SESSION['my_address'], 0, true));
                } elseif (x($_SESSION, 'visitor_home')) {
                        // Remote user
-                       $public_contact_id = intval(Contact::getIdForURL($_SESSION['visitor_home'], 0));
+                       $public_contact_id = intval(Contact::getIdForURL($_SESSION['visitor_home'], 0, true));
                }
        } elseif (!x($_SESSION, 'authenticated')) {
                $public_contact_id = false;
@@ -942,10 +903,12 @@ function public_contact()
  */
 function remote_user()
 {
-       // You cannot be both local and remote
-       if (local_user()) {
-               return false;
-       }
+       // You cannot be both local and remote.
+       // Unncommented by rabuzarus because remote authentication to local
+       // profiles wasn't possible anymore (2018-04-12).
+//     if (local_user()) {
+//             return false;
+//     }
        if (x($_SESSION, 'authenticated') && x($_SESSION, 'visitor_id')) {
                return intval($_SESSION['visitor_id']);
        }
@@ -1004,114 +967,6 @@ function get_max_import_size()
        return (x($a->config, 'max_import_size') ? $a->config['max_import_size'] : 0);
 }
 
-
-function current_theme()
-{
-       $app_base_themes = ['duepuntozero', 'dispy', 'quattro'];
-
-       $a = get_app();
-
-       $page_theme = null;
-
-       // Find the theme that belongs to the user whose stuff we are looking at
-
-       if ($a->profile_uid && ($a->profile_uid != local_user())) {
-               $r = q(
-                       "select theme from user where uid = %d limit 1",
-                       intval($a->profile_uid)
-               );
-               if (DBM::is_result($r)) {
-                       $page_theme = $r[0]['theme'];
-               }
-       }
-
-       // Allow folks to over-rule user themes and always use their own on their own site.
-       // This works only if the user is on the same server
-
-       if ($page_theme && local_user() && (local_user() != $a->profile_uid)) {
-               if (PConfig::get(local_user(), 'system', 'always_my_theme')) {
-                       $page_theme = null;
-               }
-       }
-
-//             $mobile_detect = new Mobile_Detect();
-//             $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
-       $is_mobile = $a->is_mobile || $a->is_tablet;
-
-       $standard_system_theme = Config::get('system', 'theme', '');
-       $standard_theme_name = ((isset($_SESSION) && x($_SESSION, 'theme')) ? $_SESSION['theme'] : $standard_system_theme);
-
-       if ($is_mobile) {
-               if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
-                       $theme_name = $standard_theme_name;
-               } else {
-                       $system_theme = Config::get('system', 'mobile-theme', '');
-                       if ($system_theme == '') {
-                               $system_theme = $standard_system_theme;
-                       }
-                       $theme_name = ((isset($_SESSION) && x($_SESSION, 'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme);
-
-                       if ($theme_name === '---') {
-                               // user has selected to have the mobile theme be the same as the normal one
-                               $theme_name = $standard_theme_name;
-
-                               if ($page_theme) {
-                                       $theme_name = $page_theme;
-                               }
-                       }
-               }
-       } else {
-               $theme_name = $standard_theme_name;
-
-               if ($page_theme) {
-                       $theme_name = $page_theme;
-               }
-       }
-
-       if ($theme_name
-               && (file_exists('view/theme/' . $theme_name . '/style.css')
-               || file_exists('view/theme/' . $theme_name . '/style.php'))
-       ) {
-               return($theme_name);
-       }
-
-       foreach ($app_base_themes as $t) {
-               if (file_exists('view/theme/' . $t . '/style.css')
-                       || file_exists('view/theme/' . $t . '/style.php')
-               ) {
-                       return($t);
-               }
-       }
-
-       $fallback = array_merge(glob('view/theme/*/style.css'), glob('view/theme/*/style.php'));
-       if (count($fallback)) {
-               return (str_replace('view/theme/', '', substr($fallback[0], 0, -10)));
-       }
-
-       /// @TODO No final return statement?
-}
-
-/**
- * @brief Return full URL to theme which is currently in effect.
- *
- * Provide a sane default if nothing is chosen or the specified theme does not exist.
- *
- * @return string
- */
-function current_theme_url()
-{
-       $a = get_app();
-
-       $t = current_theme();
-
-       $opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
-       if (file_exists('view/theme/' . $t . '/style.php')) {
-               return('view/theme/' . $t . '/style.pcss' . $opts);
-       }
-
-       return('view/theme/' . $t . '/style.css');
-}
-
 function feed_birthday($uid, $tz)
 {
        /**
@@ -1144,14 +999,14 @@ function feed_birthday($uid, $tz)
        if (DBM::is_result($p)) {
                $tmp_dob = substr($p[0]['dob'], 5);
                if (intval($tmp_dob)) {
-                       $y = datetime_convert($tz, $tz, 'now', 'Y');
+                       $y = DateTimeFormat::timezoneNow($tz, 'Y');
                        $bd = $y . '-' . $tmp_dob . ' 00:00';
                        $t_dob = strtotime($bd);
-                       $now = strtotime(datetime_convert($tz, $tz, 'now'));
+                       $now = strtotime(DateTimeFormat::timezoneNow($tz));
                        if ($t_dob < $now) {
                                $bd = $y + 1 . '-' . $tmp_dob . ' 00:00';
                        }
-                       $birthday = datetime_convert($tz, 'UTC', $bd, ATOM_TIME);
+                       $birthday = DateTimeFormat::convert($bd, 'UTC', $tz, DateTimeFormat::ATOM);
                }
        }
 
@@ -1170,6 +1025,7 @@ function is_site_admin()
        $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
 
        //if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email']))
+       /// @TODO This if() + 2 returns can be shrinked into one return
        if (local_user() && x($a->user, 'email') && x($a->config, 'admin_email') && in_array($a->user['email'], $adminlist)) {
                return true;
        }
@@ -1267,7 +1123,7 @@ function random_digits($digits)
 {
        $rn = '';
        for ($i = 0; $i < $digits; $i++) {
-               /// @TODO rand() is different to mt_rand() and maybe lesser "random"
+               /// @TODO Avoid rand/mt_rand, when it comes to cryptography, they are generating predictable (seedable) numbers.
                $rn .= rand(0, 9);
        }
        return $rn;
@@ -1278,10 +1134,10 @@ function get_server()
        $server = Config::get("system", "directory");
 
        if ($server == "") {
-               $server = "http://dir.friendica.social";
+               $server = "https://dir.friendica.social";
        }
 
-       return($server);
+       return $server;
 }
 
 function get_temppath()
@@ -1330,7 +1186,7 @@ function get_cachefile($file, $writemode = true)
        $cache = get_itemcachepath();
 
        if ((!$cache) || (!is_dir($cache))) {
-               return("");
+               return "";
        }
 
        $subfolder = $cache . "/" . substr($file, 0, 2);
@@ -1344,7 +1200,6 @@ function get_cachefile($file, $writemode = true)
                }
        }
 
-       /// @TODO no need to put braces here
        return $cachepath;
 }
 
@@ -1451,7 +1306,6 @@ function get_spoolpath()
        return "";
 }
 
-
 if (!function_exists('exif_imagetype')) {
        function exif_imagetype($file)
        {
@@ -1489,7 +1343,7 @@ function validate_include(&$file)
        }
 
        // Simply return flag
-       return ($valid);
+       return $valid;
 }
 
 function current_load()