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.1378' );
+define ( 'FRIENDICA_VERSION', '3.0.1418' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1149 );
+define ( 'DB_UPDATE_VERSION', 1154 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
*/
define ( 'PNG_QUALITY', 8 );
+/**
+ *
+ * An alternate way of limiting picture upload sizes. Specify the maximum pixel
+ * length that pictures are allowed to be (for non-square pictures, it will apply
+ * to the longest side). Pictures longer than this length will be resized to be
+ * this length (on the longest side, the other side will be scaled appropriately).
+ * Modify this value using
+ *
+ * $a->config['system']['max_image_length'] = n;
+ *
+ * in .htconfig.php
+ *
+ * If you don't want to set a maximum length, set to -1. The default value is
+ * defined by 'MAX_IMAGE_LENGTH' below.
+ *
+ */
+define ( 'MAX_IMAGE_LENGTH', -1 );
+
/**
* Not yet used
define ( 'CONTACT_IS_FRIEND', 3);
-/**
- * Hook array order
- */
-
-define ( 'HOOK_HOOK', 0);
-define ( 'HOOK_FILE', 1);
-define ( 'HOOK_FUNCTION', 2);
-
/**
* DB update return values
*/
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' );
define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
+define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' );
+
define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' );
define ( 'ACTIVITY_OBJ_NOTE', NAMESPACE_ACTIVITY_SCHEMA . 'note' );
define ( 'ACTIVITY_OBJ_PERSON', NAMESPACE_ACTIVITY_SCHEMA . 'person' );
private $curl_code;
private $curl_headers;
+ private $cached_profile_image;
+ private $cached_profile_picdate;
+
function __construct() {
global $default_timezone;
if(x($_SERVER,'SERVER_NAME')) {
$this->hostname = $_SERVER['SERVER_NAME'];
+
+ // 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($_SERVER['SERVER_NAME']);
+ //}
+
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
/**
. '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=") {
$this->pager['page'] = ((x($_GET,'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1);
$this->pager['itemspage'] = 50;
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
+ if($this->pager['start'] < 0)
+ $this->pager['start'] = 0;
$this->pager['total'] = 0;
}
$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(),
));
}
+ 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;
}
return $this->curl_headers;
}
+ function get_cached_avatar_image($avatar_image){
+ if($this->cached_profile_image[$avatar_image])
+ return $this->cached_profile_image[$avatar_image];
+
+ $path_parts = explode("/",$avatar_image);
+ $common_filename = $path_parts[count($path_parts)-1];
+
+ if($this->cached_profile_picdate[$common_filename]){
+ $this->cached_profile_image[$avatar_image] = $avatar_image . $this->cached_profile_picdate[$common_filename];
+ } else {
+ $r = q("SELECT `contact`.`avatar-date` AS picdate FROM `contact` WHERE `contact`.`thumb` like \"%%/%s\"",
+ $common_filename);
+ if(! count($r)){
+ $this->cached_profile_image[$avatar_image] = $avatar_image;
+ } else {
+ $this->cached_profile_picdate[$common_filename] = "?rev=" . urlencode($r[0]['picdate']);
+ $this->cached_profile_image[$avatar_image] = $avatar_image . $this->cached_profile_picdate[$common_filename];
+ }
+ }
+ return $this->cached_profile_image[$avatar_image];
+ }
+
}
}
// 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
. '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);
}
}
}
'fullname' => $profile['name'],
'firstname' => $firstname,
'lastname' => $lastname,
- 'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg',
- 'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg',
- 'photo50' => $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg',
+ 'photo300' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg'),
+ 'photo100' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg'),
+ 'photo50' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg'),
);
if (!$block){
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');
'$event_reminders' => t('Birthday Reminders'),
'$event_title' => t('Birthdays this week:'),
'$events' => $r,
+ '$lbr' => '{', // raw brackets mess up if/endif macro processing
+ '$rbr' => '}'
+
));
}
}
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');
if(count($args) && $args[0] === 'php')
$args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- foreach ($args as $arg){
- $arg = escapeshellarg($arg);
- }
+ for($x = 0; $x < count($args); $x ++)
+ $args[$x] = escapeshellarg($args[$x]);
+
$cmdline = implode($args," ");
proc_close(proc_open($cmdline." &",array(),$foo));
}
if(! function_exists('current_theme')) {
function current_theme(){
- $app_base_themes = array('duepuntozero', 'loozah');
+ $app_base_themes = array('duepuntozero', 'dispy', 'quattro');
$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) {
+ $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(!$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')))
return($t);
}
- $fallback = glob('view/theme/*/style.[css|php]');
+ $fallback = array_merge(glob('view/theme/*/style.css'),glob('view/theme/*/style.php'));
if(count($fallback))
return (str_replace('view/theme/','', substr($fallback[0],0,-10)));
'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',
),
);
'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',
);
}