]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
Moved comment box on photos to be after the last comment, added text for the Preview...
[friendica.git] / boot.php
index 6b79274d4569196c2d2f5c27d0b80c9ee9443c15..60a255add8415a4f50e4eeec0c929e60d7b45ec3 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.1393' );
+define ( 'FRIENDICA_VERSION',      '3.0.1492' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1151      );
+define ( 'DB_UPDATE_VERSION',      1156      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
@@ -191,15 +192,32 @@ define ( 'NOTIFY_SUGGEST',  0x0020 );
 define ( 'NOTIFY_PROFILE',  0x0040 );
 define ( 'NOTIFY_TAGSELF',  0x0080 );
 define ( 'NOTIFY_TAGSHARE', 0x0100 );
+define ( 'NOTIFY_POKE',     0x0200 );
 
 define ( 'NOTIFY_SYSTEM',   0x8000 );
 
 
+/**
+ * Tag/term types
+ */
+
+define ( 'TERM_UNKNOWN',   0 );
+define ( 'TERM_HASHTAG',   1 );
+define ( 'TERM_MENTION',   2 );   
+define ( 'TERM_CATEGORY',  3 );
+define ( 'TERM_PCATEGORY', 4 );
+define ( 'TERM_FILE',      5 );
+
+define ( 'TERM_OBJ_POST',  1 );
+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' );
@@ -234,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' );
@@ -329,11 +350,26 @@ if(! class_exists('App')) {
                public  $plugins;
                public  $apps = array();
                public  $identities;
+               public  $is_mobile;
+               public  $is_tablet;
        
                public $nav_sel;
 
                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;
@@ -370,13 +406,15 @@ if(! class_exists('App')) {
 
                        if(x($_SERVER,'SERVER_NAME')) {
                                $this->hostname = $_SERVER['SERVER_NAME'];
-                               if(stristr($this->hostname,'xn--')) {
+
+                               // See bug 437 - this didn't work so disabling it
+                               //if(stristr($this->hostname,'xn--')) {
                                        // PHP or webserver may have converted idn to punycode, so
                                        // convert punycode back to utf-8
-                                       require_once('library/simplepie/idn/idna_convert.class.php');
-                                       $x = new idna_convert();
-                                       $this->hostname = $x->decode($s);
-                               }
+                               //      require_once('library/simplepie/idn/idna_convert.class.php');
+                               //      $x = new idna_convert();
+                               //      $this->hostname = $x->decode($_SERVER['SERVER_NAME']);
+                               //}
 
                                if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
                                        $this->hostname .= ':' . $_SERVER['SERVER_PORT'];
@@ -395,6 +433,7 @@ if(! class_exists('App')) {
                                        . 'include' . PATH_SEPARATOR
                                        . 'library' . PATH_SEPARATOR
                                        . 'library/phpsec' . PATH_SEPARATOR
+                                       . 'library/langdet' . PATH_SEPARATOR
                                        . '.' );
 
                        if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") {
@@ -435,6 +474,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;
@@ -442,16 +482,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
@@ -463,6 +493,14 @@ if(! class_exists('App')) {
                        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();
                }
 
                function get_baseurl($ssl = false) {
@@ -537,7 +575,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(),
@@ -550,6 +588,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;
                }
@@ -692,9 +737,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);
@@ -725,9 +774,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
 
@@ -750,13 +800,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);
                                }
                        }
                }
@@ -855,6 +906,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;
                }
@@ -980,11 +1035,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;
@@ -1025,9 +1098,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
@@ -1099,8 +1175,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');
@@ -1216,9 +1298,15 @@ if(! function_exists('get_birthdays')) {
                $a = get_app();
                $o = '';
 
-               if(! local_user())
+               if(! local_user() || $a->is_mobile || $a->is_tablet)
                        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');
 
@@ -1295,9 +1383,16 @@ if(! function_exists('get_events')) {
 
                $a = get_app();
 
-               if(! local_user())
+               if(! local_user() || $a->is_mobile || $a->is_tablet)
                        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');
 
@@ -1409,7 +1504,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));
        }
 }
 
@@ -1419,9 +1517,31 @@ 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();
+               $is_mobile = $a->is_mobile || $a->is_tablet;
        
+               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')))
@@ -1557,18 +1677,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',
                        ),
                );
        
@@ -1578,12 +1701,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',
                        );
                }
 
@@ -1652,3 +1777,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;
+}