require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.1.1565' );
+define ( 'FRIENDICA_VERSION', '3.1.1589' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1157 );
-
+define ( 'DB_UPDATE_VERSION', 1159 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
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 );
public $identities;
public $is_mobile;
public $is_tablet;
-
+ public $performance = array();
+
public $nav_sel;
public $category;
'template_engine' => 'internal',
);
- public $smarty3_ldelim = '{{';
- public $smarty3_rdelim = '}}';
+ private $ldelim = array(
+ 'internal' => '',
+ 'smarty3' => '{{'
+ );
+ private $rdelim = array(
+ 'internal' => '',
+ 'smarty3' => '}}'
+ );
private $scheme;
private $hostname;
private $cached_profile_image;
private $cached_profile_picdate;
-
+
function __construct() {
global $default_timezone, $argv, $argc;
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();
*/
if(!isset($this->page['htmlhead']))
$this->page['htmlhead'] = '';
- $tpl = get_markup_template('head.tpl');
// If we're using Smarty, then doing replace_macros() will replace
// any unrecognized variables with a blank string. Since we delay
// replacing $stylesheet until later, we need to replace it now
// with another variable name
if($this->theme['template_engine'] === 'smarty3')
- $stylesheet = $this->smarty3_ldelim . '$stylesheet' . $this->smarty3_rdelim;
+ $stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
else
$stylesheet = '$stylesheet';
+ $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(),
return $this->cached_profile_image[$avatar_image];
}
+ function get_template_engine() {
+ return $this->theme['template_engine'];
+ }
+
+ function set_template_engine($engine = 'internal') {
+
+ $this->theme['template_engine'] = 'internal';
+
+ switch($engine) {
+ case 'smarty3':
+ if(is_writable('view/smarty3/'))
+ $this->theme['template_engine'] = 'smarty3';
+ break;
+ default:
+ break;
+ }
+ }
+
+ function get_template_ldelim($engine = 'internal') {
+ return $this->ldelim[$engine];
+ }
+ function get_template_rdelim($engine = 'internal') {
+ 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"];
+ }
}
}
// Primarily involved with database upgrade, but also sets the
// base url for use in cmdline programs which don't have
-// $_SERVER variables, and synchronising the state of installed plugins.
+// $_SERVER variables
if(! function_exists('check_config')) {
function check_config(&$a) {
- $build = get_config('system','build');
- if(! x($build))
- $build = set_config('system','build',DB_UPDATE_VERSION);
-
$url = get_config('system','url');
// if the url isn't set or the stored url is radically different
$url = set_config('system','url',$a->get_baseurl());
+ $build = get_config('system','build');
+ if(! x($build))
+ $build = set_config('system','build',DB_UPDATE_VERSION);
+
if($build != DB_UPDATE_VERSION) {
$stored = intval($build);
$current = intval(DB_UPDATE_VERSION);
'$error' => sprintf( t('Update %s failed. See error logs.'), $x)
));
$subject=sprintf(t('Update Error at %s'), $a->get_baseurl());
-
+ require_once('include/email.php');
+ $subject = email_header_encode($subject,'UTF-8');
mail($a->config['admin_email'], $subject, $email_msg,
- 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ 'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
//try the logger
}
}
+ return;
+ }
+}
+
+
+if(! function_exists('check_plugins')) {
+ function check_plugins(&$a) {
+
/**
*
* Synchronise plugins:
* Profile information is placed in the App structure for later retrieval.
* Honours the owner's chosen theme for display.
*
+ * IMPORTANT: Should only be run in the _init() functions of a module. That ensures that
+ * the theme is chosen before the _init() function of a theme is run, which will usually
+ * load a lot of theme-specific content
+ *
*/
if(! function_exists('profile_load')) {
if(! $r[0]['is-default']) {
$x = q("select `pub_keywords` from `profile` where uid = %d and `is-default` = 1 limit 1",
- intval($profile_uid)
+ intval($r[0]['profile_uid'])
);
if($x && count($x))
$r[0]['pub_keywords'] = $x[0]['pub_keywords'];
$a->profile = $r[0];
- $a->profile['mobile-theme'] = get_pconfig($profile_uid, 'system', 'mobile_theme');
+ $a->profile['mobile-theme'] = get_pconfig($a->profile['profile_uid'], 'system', 'mobile_theme');
$a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
* load/reload current theme info
*/
+ $a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one
+
$theme_info_file = "view/theme/".current_theme()."/theme.php";
if (file_exists($theme_info_file)){
require_once($theme_info_file);
}
- $tpl = get_markup_template('profile_vcard.tpl');
-
+ $p = array();
+ foreach($profile as $k => $v) {
+ $k = str_replace('-','_',$k);
+ $p[$k] = $v;
+ }
if($a->theme['template_engine'] === 'internal')
$location = template_escape($location);
+ $tpl = get_markup_template('profile_vcard.tpl');
$o .= replace_macros($tpl, array(
- '$profile' => $profile,
+ '$profile' => $p,
'$connect' => $connect,
'$wallmessage' => $wallmessage,
'$location' => $location,
'$pdesc' => $pdesc,
'$marital' => $marital,
'$homepage' => $homepage,
- '$diaspora_info' => $diaspora,
+ '$diaspora' => $diaspora,
'$contact_block' => $contact_block,
));
// $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 = '';
}
function set_template_engine(&$a, $engine = 'internal') {
+// This function is no longer necessary, but keep it as a wrapper to the class method
+// to avoid breaking themes again unnecessarily
- $a->theme['template_engine'] = 'internal';
-
- if(is_writable('view/smarty3/')) {
- switch($engine) {
- case 'smarty3':
- $a->theme['template_engine'] = 'smarty3';
- break;
- default:
- break;
- }
- }
+ $a->set_template_engine($engine);
}
+