]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
Merge pull request #486 from cvogeley/master
[friendica.git] / boot.php
index a33289a2b201e1323d061b4188c2636b5c984e10..2119347ae54dc7a690424d54a93d800bd184e99a 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -8,11 +8,12 @@ require_once('include/datetime.php');
 require_once('include/pgettext.php');
 require_once('include/nav.php');
 require_once('include/cache.php');
+require_once('library/Mobile_Detect/Mobile_Detect.php');
 
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
-define ( 'FRIENDICA_VERSION',      '3.0.1405' );
+define ( 'FRIENDICA_VERSION',      '3.0.1468' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1153      );
+define ( 'DB_UPDATE_VERSION',      1156      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
@@ -191,6 +192,7 @@ define ( 'NOTIFY_SUGGEST',  0x0020 );
 define ( 'NOTIFY_PROFILE',  0x0040 );
 define ( 'NOTIFY_TAGSELF',  0x0080 );
 define ( 'NOTIFY_TAGSHARE', 0x0100 );
+define ( 'NOTIFY_POKE',     0x0200 );
 
 define ( 'NOTIFY_SYSTEM',   0x8000 );
 
@@ -215,7 +217,7 @@ define ( 'TERM_OBJ_PHOTO', 2 );
  * various namespaces we may need to parse
  */
 
-define ( 'NAMESPACE_ZOT',             'http://purl.org/macgirvin/zot' );
+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' );
 define ( 'NAMESPACE_TOMB' ,           'http://purl.org/atompub/tombstones/1.0' );
@@ -250,6 +252,9 @@ define ( 'ACTIVITY_UPDATE',      NAMESPACE_ACTIVITY_SCHEMA . 'update' );
 define ( 'ACTIVITY_TAG',         NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
 define ( 'ACTIVITY_FAVORITE',    NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
 
+define ( 'ACTIVITY_POKE',        NAMESPACE_ZOT . '/activity/poke' );
+define ( 'ACTIVITY_MOOD',        NAMESPACE_ZOT . '/activity/mood' );
+
 define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' );
 define ( 'ACTIVITY_OBJ_NOTE',    NAMESPACE_ACTIVITY_SCHEMA . 'note' );
 define ( 'ACTIVITY_OBJ_PERSON',  NAMESPACE_ACTIVITY_SCHEMA . 'person' );
@@ -350,6 +355,19 @@ if(! class_exists('App')) {
 
                public $category;
 
+               // Allow themes to control internal parameters
+               // by changing App values in theme.php
+               //
+               // Possibly should make these part of the plugin
+               // system, but it seems like overkill to invoke
+               // all the plugin machinery just to change a couple
+               // of values
+               public  $sourcename = '';
+               public  $videowidth = 425;
+               public  $videoheight = 350;
+               public  $force_max_items = 0;
+               public  $theme_thread_allow = true;
+
                private $scheme;
                private $hostname;
                private $baseurl;
@@ -454,6 +472,7 @@ if(! class_exists('App')) {
                        $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;
@@ -461,16 +480,6 @@ if(! class_exists('App')) {
                                $this->module = 'home';
                        }
 
-                       /**
-                        * Special handling for the webfinger/lrdd host XRD file
-                        */
-
-                       if($this->cmd === '.well-known/host-meta') {
-                               $this->argc = 1;
-                               $this->argv = array('hostxrd');
-                               $this->module = 'hostxrd';
-                       }
-
                        /**
                         * See if there is any page number information, and initialise
                         * pagination
@@ -556,7 +565,7 @@ if(! class_exists('App')) {
                                $interval = 40000;
 
                        $this->page['title'] = $this->config['sitename'];
-                       $tpl = file_get_contents('view/head.tpl');
+                       $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(),
@@ -569,6 +578,13 @@ if(! class_exists('App')) {
                        ));
                }
 
+               function init_page_end() {
+                       $tpl = get_markup_template('end.tpl');
+                       $this->page['end'] = replace_macros($tpl,array(
+                               '$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
+                       ));
+               }
+
                function set_curl_code($code) {
                        $this->curl_code = $code;
                }
@@ -711,9 +727,13 @@ if(! function_exists('check_config')) {
                // than the currently visited url, store the current value accordingly.
                // "Radically different" ignores common variations such as http vs https
                // and www.example.com vs example.com.
+               // We will only change the url to an ip address if there is no existing setting
 
-               if((! x($url)) || (! link_compare($url,$a->get_baseurl())))
+               if(! x($url))
                        $url = set_config('system','url',$a->get_baseurl());
+               if((! link_compare($url,$a->get_baseurl())) && (! preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$a->get_hostname)))
+                       $url = set_config('system','url',$a->get_baseurl());
+
 
                if($build != DB_UPDATE_VERSION) {
                        $stored = intval($build);
@@ -744,9 +764,10 @@ if(! function_exists('check_config')) {
                                                        // If the update fails or times-out completely you may need to
                                                        // delete the config entry to try again.
 
-                                                       if(get_config('database','update_' . $x))
+                                                       $t = get_config('database','update_' . $x);
+                                                       if($t !== false)
                                                                break;
-                                                       set_config('database','update_' . $x, '1');
+                                                       set_config('database','update_' . $x, time());
 
                                                        // call the specific update
 
@@ -769,13 +790,14 @@ if(! function_exists('check_config')) {
                                                                        . 'Content-transfer-encoding: 8bit' );
                                                                //try the logger
                                                                logger('CRITICAL: Update Failed: '. $x);
+                                                               break;
                                                        }
-                                                       else
+                                                       else {
                                                                set_config('database','update_' . $x, 'success');
-                                                               
+                                                               set_config('system','build', $x + 1);
+                                                       }                                                               
                                                }
                                        }
-                                       set_config('system','build', DB_UPDATE_VERSION);
                                }
                        }
                }
@@ -874,6 +896,10 @@ if(! function_exists('login')) {
                        $tpl = get_markup_template("logout.tpl");
                }
                else {
+                       $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"),array(
+                               '$baseurl'              => $a->get_baseurl(true)
+                       ));
+
                        $tpl = get_markup_template("login.tpl");
                        $_SESSION['return_url'] = $a->query_string;
                }
@@ -999,11 +1025,29 @@ if(! function_exists('get_max_import_size')) {
 
 if(! function_exists('profile_load')) {
        function profile_load(&$a, $nickname, $profile = 0) {
-               if(remote_user()) {
-                       $r = q("SELECT `profile-id` FROM `contact` WHERE `id` = %d LIMIT 1",
-                                       intval($_SESSION['visitor_id']));
-                       if(count($r))
-                               $profile = $r[0]['profile-id'];
+
+               $user = q("select uid from user where nickname = '%s' limit 1",
+                       dbesc($nickname)
+               );
+               
+               if(! ($user && count($user))) {
+                       logger('profile error: ' . $a->query_string, LOGGER_DEBUG);
+                       notice( t('Requested account is not available.') . EOL );
+                       $a->error = 404;
+                       return;
+               }
+
+               if(remote_user() && count($_SESSION['remote'])) {
+                       foreach($_SESSION['remote'] as $visitor) {
+                               if($visitor['uid'] == $user[0]['uid']) {
+                                       $r = q("SELECT `profile-id` FROM `contact` WHERE `id` = %d LIMIT 1",
+                                               intval($visitor['cid'])
+                                       );
+                                       if(count($r))
+                                               $profile = $r[0]['profile-id'];
+                                       break;
+                               }
+                       }
                }
 
                $r = null;
@@ -1044,9 +1088,12 @@ if(! function_exists('profile_load')) {
 
                $a->profile = $r[0];
 
+               $a->profile['mobile-theme'] = get_pconfig($profile_uid, 'system', 'mobile_theme');
+
 
                $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
                $_SESSION['theme'] = $a->profile['theme'];
+               $_SESSION['mobile-theme'] = $a->profile['mobile-theme'];
 
                /**
                 * load/reload current theme info
@@ -1118,8 +1165,14 @@ if(! function_exists('profile_sidebar')) {
 
                // don't show connect link to authenticated visitors either
 
-               if((remote_user()) && ($_SESSION['visitor_visiting'] == $profile['uid']))
-                       $connect = False;
+               if(remote_user() && count($_SESSION['remote'])) {
+                       foreach($_SESSION['remote'] as $visitor) {
+                               if($visitor['uid'] == $profile['uid']) {
+                                       $connect = false;
+                                       break;
+                               }
+                       }
+               }
 
                if(get_my_url() && $profile['unkmail'])
                        $wallmessage = t('Message');
@@ -1238,6 +1291,12 @@ if(! function_exists('get_birthdays')) {
                if(! local_user())
                        return $o;
 
+               $mobile_detect = new Mobile_Detect();
+               $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
+
+               if($is_mobile)
+                       return $o;
+
                $bd_format = t('g A l F d') ; // 8 AM Friday January 18
                $bd_short = t('F d');
 
@@ -1317,6 +1376,13 @@ if(! function_exists('get_events')) {
                if(! local_user())
                        return $o;
 
+
+               $mobile_detect = new Mobile_Detect();
+               $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
+
+               if($is_mobile)
+                       return $o;
+
                $bd_format = t('g A l F d') ; // 8 AM Friday January 18
                $bd_short = t('F d');
 
@@ -1428,7 +1494,10 @@ if(! function_exists('proc_run')) {
                        $args[$x] = escapeshellarg($args[$x]);
 
                $cmdline = implode($args," ");
-               proc_close(proc_open($cmdline." &",array(),$foo));
+               if(get_config('system','proc_windows'))
+                       proc_close(proc_open('cmd /c start /b ' . $cmdline,array(),$foo));
+               else
+                       proc_close(proc_open($cmdline." &",array(),$foo));
        }
 }
 
@@ -1438,9 +1507,30 @@ if(! function_exists('current_theme')) {
        
                $a = get_app();
        
-               $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
-               $theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+               $mobile_detect = new Mobile_Detect();
+               $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
        
+               if($is_mobile) {
+                       if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
+                               $system_theme = '';
+                               $theme_name = '';
+                       }
+                       else {
+                               $system_theme = ((isset($a->config['system']['mobile-theme'])) ? $a->config['system']['mobile-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
+                                       $system_theme = '';
+                                       $theme_name = '';
+                               }
+                       }
+               }
+               if(!$is_mobile || ($system_theme === '' && $theme_name === '')) {
+                       $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
+                       $theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+               }
+
                if($theme_name &&
                                (file_exists('view/theme/' . $theme_name . '/style.css') ||
                                                file_exists('view/theme/' . $theme_name . '/style.php')))
@@ -1576,18 +1666,21 @@ if(! function_exists('profile_tabs')){
                                'url' => $url,
                                'sel' => ((!isset($tab)&&$a->argv[0]=='profile')?'active':''),
                                'title' => t('Status Messages and Posts'),
+                               'id' => 'status-tab',
                        ),
                        array(
                                'label' => t('Profile'),
                                'url'   => $url.'/?tab=profile',
                                'sel'   => ((isset($tab) && $tab=='profile')?'active':''),
                                'title' => t('Profile Details'),
+                               'id' => 'profile-tab',
                        ),
                        array(
                                'label' => t('Photos'),
                                'url'   => $a->get_baseurl() . '/photos/' . $nickname,
                                'sel'   => ((!isset($tab)&&$a->argv[0]=='photos')?'active':''),
                                'title' => t('Photo Albums'),
+                               'id' => 'photo-tab',
                        ),
                );
        
@@ -1597,12 +1690,14 @@ if(! function_exists('profile_tabs')){
                                'url'   => $a->get_baseurl() . '/events',
                                'sel'   =>((!isset($tab)&&$a->argv[0]=='events')?'active':''),
                                'title' => t('Events and Calendar'),
+                               'id' => 'events-tab',
                        );
                        $tabs[] = array(
                                'label' => t('Personal Notes'),
                                'url'   => $a->get_baseurl() . '/notes',
                                'sel'   =>((!isset($tab)&&$a->argv[0]=='notes')?'active':''),
                                'title' => t('Only You Can See This'),
+                               'id' => 'notes-tab',
                        );
                }
 
@@ -1671,3 +1766,20 @@ function build_querystring($params, $name=null) {
     } 
     return $ret;    
 }
+
+/**
+* Returns the complete URL of the current page, e.g.: http(s)://something.com/network
+*
+* Taken from http://webcheatsheet.com/php/get_current_page_url.php
+*/
+function curPageURL() {
+       $pageURL = 'http';
+       if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
+       $pageURL .= "://";
+       if ($_SERVER["SERVER_PORT"] != "80" && $_SERVER["SERVER_PORT"] != "443") {
+               $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
+       } else {
+               $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
+       }
+       return $pageURL;
+}