]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
template engine rework
[friendica.git] / boot.php
index 5107d91af635174708bd9ae4234dc85526663d0e..477b8331c00644b11909fcb0c150d932ef74eaf3 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -12,10 +12,9 @@ require_once('library/Mobile_Detect/Mobile_Detect.php');
 require_once('include/features.php');
 
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
-define ( 'FRIENDICA_VERSION',      '3.1.1599' );
+define ( 'FRIENDICA_VERSION',      '3.1.1677' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1158      );
-
+define ( 'DB_UPDATE_VERSION',      1163      );
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
 
@@ -204,10 +203,12 @@ define ( 'NOTIFY_SYSTEM',   0x8000 );
 
 define ( 'TERM_UNKNOWN',   0 );
 define ( 'TERM_HASHTAG',   1 );
-define ( 'TERM_MENTION',   2 );   
+define ( 'TERM_MENTION',   2 );
 define ( 'TERM_CATEGORY',  3 );
 define ( 'TERM_PCATEGORY', 4 );
 define ( 'TERM_FILE',      5 );
+define ( 'TERM_SAVEDSEARCH', 6 );
+define ( 'TERM_CONVERSATION', 7 );
 
 define ( 'TERM_OBJ_POST',  1 );
 define ( 'TERM_OBJ_PHOTO', 2 );
@@ -355,7 +356,8 @@ if(! class_exists('App')) {
                public  $identities;
                public  $is_mobile;
                public  $is_tablet;
-       
+               public  $performance = array();
+
                public $nav_sel;
 
                public $category;
@@ -383,6 +385,11 @@ if(! class_exists('App')) {
                        'stylesheet' => '',
                        'template_engine' => 'internal',
                );
+               
+               // array of registered template engines ('name'=>'class name')
+               public $template_engines = array();
+               // array of instanced template engines ('name'=>'instance')
+               public $template_engine_instance = array();
 
                private $ldelim = array(
                        'internal' => '',
@@ -399,11 +406,12 @@ if(! class_exists('App')) {
                private $db;
 
                private $curl_code;
+               private $curl_content_type;
                private $curl_headers;
 
                private $cached_profile_image;
                private $cached_profile_picdate;
-                                                       
+
                function __construct() {
 
                        global $default_timezone, $argv, $argc;
@@ -412,6 +420,14 @@ if(! class_exists('App')) {
 
                        date_default_timezone_set($this->timezone);
 
+                       $this->performance["start"] = microtime(true);
+                       $this->performance["database"] = 0;
+                       $this->performance["network"] = 0;
+                       $this->performance["rendering"] = 0;
+                       $this->performance["parser"] = 0;
+                       $this->performance["marktime"] = 0;
+                       $this->performance["markstart"] = microtime(true);
+
                        $this->config = array();
                        $this->page = array();
                        $this->pager= array();
@@ -528,6 +544,17 @@ if(! class_exists('App')) {
                        $mobile_detect = new Mobile_Detect();
                        $this->is_mobile = $mobile_detect->isMobile();
                        $this->is_tablet = $mobile_detect->isTablet();
+                       
+                       /**
+                        * register template engines
+                        */
+                       $dc = get_declared_classes();
+                       foreach ($dc as $k) {
+                               if (in_array("ITemplateEngine", class_implements($k))){
+                                       $this->register_template_engine($k);
+                               }
+                       }
+                       
                }
 
                function get_basepath() {
@@ -663,6 +690,14 @@ if(! class_exists('App')) {
                        return $this->curl_code;
                }
 
+               function set_curl_content_type($content_type) {
+                       $this->curl_content_type = $content_type;
+               }
+
+               function get_curl_content_type() {
+                       return $this->curl_content_type;
+               }
+
                function set_curl_headers($headers) {
                        $this->curl_headers = $headers;
                }
@@ -693,13 +728,63 @@ if(! class_exists('App')) {
                        return $this->cached_profile_image[$avatar_image];
                }
 
+
+               /**
+                * register template engine class
+                * if $name is "", is used class static property $class::$name
+                * @param string $class
+                * @param string $name
+                */
+               function register_template_engine($class, $name = '') {
+                       if ($name===""){
+                               $v = get_class_vars( $class );
+                               if(x($v,"name")) $name = $v['name'];
+                       }
+                       if ($name===""){
+                               echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
+                               killme(); 
+                       }
+                       $this->template_engines[$name] = $class;
+               }
+
+               /**
+                * return template engine instance. If $name is not defined,
+                * return engine defined by theme, or default
+                * 
+                * @param strin $name Template engine name
+                * @return object Template Engine instance
+                */
+               function template_engine($name = ''){
+                       
+                       if ($name!=="") {
+                               $template_engine = $name;
+                       } else {
+                               $template_engine = 'smarty3';
+                               if (x($this->theme, 'template_engine')) {
+                                       $template_engine = $this->theme['template_engine'];
+                               }
+                       }
+                       if (isset($this->template_engines[$template_engine])){
+                               if(isset($this->template_engine_instance[$template_engine])){
+                                       return $this->template_engine_instance[$template_engine];
+                               } else {
+                                       $class = $this->template_engines[$template_engine];
+                                       $obj = new $class;
+                                       $this->template_engine_instance[$template_engine] = $obj;
+                                       return $obj;
+                               }
+                       }
+                       
+                       echo "template engine <tt>$template_engine</tt> is not registered!\n"; killme();
+               }
+
                function get_template_engine() {
                        return $this->theme['template_engine'];
                }
 
-               function set_template_engine($engine = 'internal') {
+               function set_template_engine($engine = 'smarty3') {
 
-                       $this->theme['template_engine'] = 'internal';
+                       $this->theme['template_engine'] = 'smarty3';
 
                        switch($engine) {
                                case 'smarty3':
@@ -711,14 +796,25 @@ if(! class_exists('App')) {
                        }
                }
 
-               function get_template_ldelim($engine = 'internal') {
+               function get_template_ldelim($engine = 'smarty3') {
                        return $this->ldelim[$engine];
                }
 
-               function get_template_rdelim($engine = 'internal') {
+               function get_template_rdelim($engine = 'smarty3') {
                        return $this->rdelim[$engine];
                }
 
+               function save_timestamp($stamp, $value) {
+                       $duration = (float)(microtime(true)-$stamp);
+
+                       $this->performance[$value] += (float)$duration;
+                       $this->performance["marktime"] += (float)$duration;
+               }
+
+               function mark_timestamp($mark) {
+                       //$this->performance["markstart"] -= microtime(true) - $this->performance["marktime"];
+                       $this->performance["markstart"] = microtime(true) - $this->performance["markstart"] - $this->performance["marktime"];
+               }
        }
 }
 
@@ -1327,7 +1423,7 @@ if(! function_exists('profile_sidebar')) {
                        }
                }
 
-               if(get_my_url() && $profile['unkmail'])
+               if( get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()) )
                        $wallmessage = t('Message');
                else
                        $wallmessage = false;
@@ -1364,9 +1460,15 @@ if(! function_exists('profile_sidebar')) {
 
 
                        }
-
-
                }
+        if ($profile['uid'] == local_user() && !feature_enabled(local_user(),'multi_profiles')) {
+            $profile['edit'] = array($a->get_baseurl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile'));
+               $profile['menu'] = array(
+                               'chg_photo' => t('Change profile photo'),
+                               'cr_new' => null,
+                               'entries' => array(),
+                       );
+        }
 
 
 
@@ -1419,6 +1521,7 @@ if(! function_exists('profile_sidebar')) {
                if($a->theme['template_engine'] === 'internal')
                        $location = template_escape($location);
 
+
                $tpl = get_markup_template('profile_vcard.tpl');
                $o .= replace_macros($tpl, array(
                        '$profile' => $p,
@@ -1935,6 +2038,36 @@ function build_querystring($params, $name=null) {
     return $ret;    
 }
 
+function explode_querystring($query) {
+       $arg_st = strpos($query, '?');
+       if($arg_st !== false) {
+               $base = substr($query, 0, $arg_st);
+               $arg_st += 1;
+       }
+       else {
+               $base = '';
+               $arg_st = 0;
+       }
+
+       $args = explode('&', substr($query, $arg_st));
+       foreach($args as $k=>$arg) {
+               if($arg === '')
+                       unset($args[$k]);
+       }
+       $args = array_values($args);
+
+       if(!$base) {
+               $base = $args[0];
+               unset($args[0]);
+               $args = array_values($args);
+       }
+
+       return array(
+               'base' => $base,
+               'args' => $args,
+       );
+}
+
 /**
 * Returns the complete URL of the current page, e.g.: http(s)://something.com/network
 *