require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.1.1586' );
+define ( 'FRIENDICA_VERSION', '3.2' );
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' );
define ( 'NETWORK_XMPP', 'xmpp'); // XMPP
define ( 'NETWORK_MYSPACE', 'mysp'); // MySpace
define ( 'NETWORK_GPLUS', 'goog'); // Google+
+define ( 'NETWORK_PUMPIO', 'pump'); // pump.io
+define ( 'NETWORK_TWITTER', 'twit'); // Twitter
define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder
NETWORK_XMPP => (-10),
NETWORK_MYSPACE => (-11),
NETWORK_GPLUS => (-12),
+ NETWORK_PUMPIO => (-13),
+ NETWORK_TWITTER => (-14),
NETWORK_PHANTOM => (-127),
);
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 );
*/
function startup() {
-
+
error_reporting(E_ERROR | E_WARNING | E_PARSE);
set_time_limit(0);
public $identities;
public $is_mobile;
public $is_tablet;
-
+ public $performance = array();
+
public $nav_sel;
public $category;
'force_max_items' => 0,
'thread_allow' => true,
'stylesheet' => '',
- 'template_engine' => 'internal',
+ 'template_engine' => 'smarty3',
);
+ // 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' => '',
'smarty3' => '{{'
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;
+ if (file_exists(".htpreconfig.php"))
+ @include(".htpreconfig.php");
+
$this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
date_default_timezone_set($this->timezone);
+ $this->performance["start"] = microtime(true);
+ $this->performance["database"] = 0;
+ $this->performance["network"] = 0;
+ $this->performance["file"] = 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();
startup();
+ set_include_path(
+ 'include' . PATH_SEPARATOR
+ . 'library' . PATH_SEPARATOR
+ . 'library/phpsec' . PATH_SEPARATOR
+ . 'library/langdet' . PATH_SEPARATOR
+ . '.' );
+
+
$this->scheme = 'http';
if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS'])
$this->scheme = 'https';
elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443))
- $this->scheme = 'https';
+ $this->scheme = 'https';
if(x($_SERVER,'SERVER_NAME')) {
$this->hostname = $_SERVER['SERVER_NAME'];
if(isset($path) && strlen($path) && ($path != $this->path))
$this->path = $path;
}
+
+ if ($hostname != "")
+ $this->hostname = $hostname;
+
if (is_array($argv) && $argc>1 && substr(end($argv), 0, 4)=="http" ) {
$this->set_baseurl(array_pop($argv) );
$argc --;
}
- set_include_path(
- "include/$this->hostname" . PATH_SEPARATOR
- . 'include' . PATH_SEPARATOR
- . 'library' . PATH_SEPARATOR
- . 'library/phpsec' . PATH_SEPARATOR
- . 'library/langdet' . PATH_SEPARATOR
- . '.' );
-
+ set_include_path("include/$this->hostname" . PATH_SEPARATOR . get_include_path());
if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=") {
$this->query_string = substr($_SERVER['QUERY_STRING'],2);
$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() {
function set_pager_itemspage($n) {
$this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
+ }
+ function set_pager_page($n) {
+ $this->pager['page'] = $n;
+ $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
}
function init_pagehead() {
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;
}
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') {
-
- $this->theme['template_engine'] = 'internal';
+ function set_template_engine($engine = 'smarty3') {
+ $this->theme['template_engine'] = $engine;
+ /*
+ $this->theme['template_engine'] = 'smarty3';
switch($engine) {
case 'smarty3':
default:
break;
}
+ */
}
- 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"];
+ }
+
}
}
return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}
+function check_db() {
-// Primarily involved with database upgrade, but also sets the
-// base url for use in cmdline programs which don't have
-// $_SERVER variables
+ $build = get_config('system','build');
+ if(! x($build)) {
+ set_config('system','build',DB_UPDATE_VERSION);
+ $build = DB_UPDATE_VERSION;
+ }
+ if($build != DB_UPDATE_VERSION)
+ proc_run('php', 'include/dbupdate.php');
+}
-if(! function_exists('check_config')) {
- function check_config(&$a) {
+
+
+
+// Sets the base url for use in cmdline programs which don't have
+// $_SERVER variables
+
+if(! function_exists('check_url')) {
+ function check_url(&$a) {
$url = get_config('system','url');
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());
+ return;
+ }
+}
+
+
+// Automatic database updates
+
+if(! function_exists('update_db')) {
+ function update_db(&$a) {
$build = get_config('system','build');
if(! x($build))
));
$subject=sprintf(t('Update Error at %s'), $a->get_baseurl());
require_once('include/email.php');
- $subject = email_header_encode($subject,'UTF-8');
+ $subject = email_header_encode($subject,'UTF-8');
mail($a->config['admin_email'], $subject, $email_msg,
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
else {
set_config('database','update_' . $x, 'success');
set_config('system','build', $x + 1);
- }
+ }
}
}
}
$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 );
}
$r = null;
-
+
if($profile) {
$profile_int = intval($profile);
$r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile`
$a->error = 404;
return;
}
-
+
// fetch user tags if this isn't the default profile
if(! $r[0]['is-default']) {
}
}
- if(get_my_url() && $profile['unkmail'])
+ if( get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()) )
$wallmessage = t('Message');
else
$wallmessage = false;
}
-
-
}
+ 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(),
+ );
+ }
if($a->theme['template_engine'] === 'internal')
$location = template_escape($location);
+
$tpl = get_markup_template('profile_vcard.tpl');
$o .= replace_macros($tpl, array(
'$profile' => $p,
'title' => t('Photo Albums'),
'id' => 'photo-tab',
),
+ array(
+ 'label' => t('Videos'),
+ 'url' => $a->get_baseurl() . '/videos/' . $nickname,
+ 'sel' => ((!isset($tab)&&$a->argv[0]=='videos')?'active':''),
+ 'title' => t('Videos'),
+ 'id' => 'video-tab',
+ ),
);
if ($is_owner){
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
*
function get_cachefile($file, $writemode = true) {
$cache = get_config("system","itemcache");
- if ($cache == "")
- return("");
-
- if (!is_dir($cache))
+ if ((! $cache) || (! is_dir($cache)))
return("");
$subfolder = $cache."/".substr($file, 0, 2);