require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
use Friendica\App;
+use Friendica\BaseObject;
use Friendica\Core\Addon;
+use Friendica\Core\Cache;
use Friendica\Core\Config;
use Friendica\Core\L10n;
-use Friendica\Core\Network;
use Friendica\Core\PConfig;
+use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBM;
use Friendica\Database\DBStructure;
use Friendica\Model\Contact;
+use Friendica\Model\Conversation;
use Friendica\Util\DateTimeFormat;
require_once 'include/text.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-05-dev');
define('DFRN_PROTOCOL_VERSION', '2.23');
-define('DB_UPDATE_VERSION', 1248);
+define('DB_UPDATE_VERSION', 1259);
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
/**
/**
* @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);
/* @}*/
/**
*
* 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);
/**
* @}
*/
* 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 Friendica\Core\Network
+ * @see Protocol
*
* Network and protocol family types
* @{
*/
-define('NETWORK_DFRN' , Network::DFRN); // Friendica, Mistpark, other DFRN implementations
-define('NETWORK_ZOT' , Network::ZOT); // Zot! - Currently unsupported
-define('NETWORK_OSTATUS' , Network::OSTATUS); // GNU-social, Pleroma, Mastodon, other OStatus implementations
-define('NETWORK_FEED' , Network::FEED); // RSS/Atom feeds with no known "post/notify" protocol
-define('NETWORK_DIASPORA' , Network::DIASPORA); // Diaspora
-define('NETWORK_MAIL' , Network::MAIL); // IMAP/POP
-define('NETWORK_FACEBOOK' , Network::FACEBOOK); // Facebook API
-define('NETWORK_LINKEDIN' , Network::LINKEDIN); // LinkedIn
-define('NETWORK_XMPP' , Network::XMPP); // XMPP - Currently unsupported
-define('NETWORK_MYSPACE' , Network::MYSPACE); // MySpace - Currently unsupported
-define('NETWORK_GPLUS' , Network::GPLUS); // Google+
-define('NETWORK_PUMPIO' , Network::PUMPIO); // pump.io
-define('NETWORK_TWITTER' , Network::TWITTER); // Twitter
-define('NETWORK_DIASPORA2', Network::DIASPORA2); // Diaspora connector
-define('NETWORK_STATUSNET', Network::STATUSNET); // Statusnet connector
-define('NETWORK_APPNET' , Network::APPNET); // app.net - Dead protocol
-define('NETWORK_NEWS' , Network::NEWS); // Network News Transfer Protocol - Currently unsupported
-define('NETWORK_ICALENDAR', Network::ICALENDAR); // iCalendar - Currently unsupported
-define('NETWORK_PNUT' , Network::PNUT); // pnut.io - Currently unsupported
-define('NETWORK_PHANTOM' , Network::PHANTOM); // 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
/**
* @}
*/
if (empty($a)) {
$a = new App(dirname(__DIR__));
+ BaseObject::setApp($a);
}
return $a;
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
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();
return;
}
-function get_guid($size = 16, $prefix = "")
+function get_guid($size = 16, $prefix = '')
{
- if ($prefix == "") {
+ if (is_bool($prefix) && !$prefix) {
+ $prefix = '';
+ } elseif ($prefix == '') {
$a = get_app();
- $prefix = hash("crc32", $a->get_hostname());
+ $prefix = hash('crc32', $a->get_hostname());
}
while (strlen($prefix) < ($size - 13)) {
if ($size >= 24) {
$prefix = substr($prefix, 0, $size - 22);
- return(str_replace(".", "", uniqid($prefix, true)));
+ return str_replace('.', '', uniqid($prefix, true));
} else {
$prefix = substr($prefix, 0, max($size - 13, 0));
- return(uniqid($prefix));
+ return uniqid($prefix);
}
}
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;
*/
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']);
}
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)
{
/**