require_once('include/dbstructure.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_CODENAME', 'Ginger');
-define ( 'FRIENDICA_VERSION', '3.3.3-RC' );
+define ( 'FRIENDICA_CODENAME', 'Lily of the valley');
+define ( 'FRIENDICA_VERSION', '3.4.0' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1179 );
+define ( 'DB_UPDATE_VERSION', 1185 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
define ( 'ACTIVITY_OBJ_GROUP', NAMESPACE_ACTIVITY_SCHEMA . 'group' );
define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_DFRN . '/tagterm' );
define ( 'ACTIVITY_OBJ_PROFILE', NAMESPACE_DFRN . '/profile' );
+define ( 'ACTIVITY_OBJ_QUESTION', 'http://activityschema.org/object/question' );
/**
* item weight for query ordering
public $identities;
public $is_mobile;
public $is_tablet;
+ public $is_friendica_app;
public $performance = array();
public $nav_sel;
// array of instanced template engines ('name'=>'instance')
public $template_engine_instance = array();
- // Used for reducing load to the ostatus completion
- public $last_ostatus_conversation_url;
-
private $ldelim = array(
'internal' => '',
'smarty3' => '{{'
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
+ // Friendica-Client
+ $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)");
+
/**
* register template engines
*/
return(FRIENDICA_PLATFORM." '".FRIENDICA_CODENAME."' ".FRIENDICA_VERSION."-".DB_UPDATE_VERSION."; ".$this->get_baseurl());
}
+ function is_friendica_app() {
+ return($this->is_friendica_app);
+ }
+
}
}
}
}
-function get_guid($size=16) {
- $exists = true; // assume by default that we don't have a unique guid
- do {
- $prefix = "";
- while (strlen($prefix) < ($size - 13))
- $prefix .= mt_rand();
+function get_guid($size=16, $prefix = "") {
- $s = substr(uniqid($prefix), -$size);
-
- $r = q("select id from guid where guid = '%s' limit 1", dbesc($s));
- if(! count($r))
- $exists = false;
- } while($exists);
- q("insert into guid (guid) values ('%s') ", dbesc($s));
- return $s;
-}
+ if ($prefix == "") {
+ $a = get_app();
+ $prefix = hash("crc32", $a->get_hostname());
+ }
-/*function get_guid($size=16) {
- $exists = true; // assume by default that we don't have a unique guid
- do {
- $s = random_string($size);
- $r = q("select id from guid where guid = '%s' limit 1", dbesc($s));
- if(! count($r))
- $exists = false;
- } while($exists);
- q("insert into guid ( guid ) values ( '%s' ) ", dbesc($s));
- return $s;
-}*/
+ while (strlen($prefix) < ($size - 13))
+ $prefix .= mt_rand();
+ if ($size >= 24) {
+ $prefix = substr($prefix, 0, $size - 22);
+ return(str_replace(".", "", uniqid($prefix, true)));
+ } else {
+ $prefix = substr($prefix, 0, $size - 13);
+ return(uniqid($prefix));
+ }
+}
// wrapper for adding a login box. If $register == true provide a registration
// link. This will most always depend on the value of $a->config['register_policy'].
if (!$block){
$contact_block = contact_block();
- }
+ if(is_array($a->profile) AND !$a->profile['hide-friends']) {
+ $r = q("SELECT `gcontact`.`updated` FROM `contact` INNER JOIN `gcontact` WHERE `gcontact`.`nurl` = `contact`.`nurl` AND `self` AND `uid` = %d LIMIT 1",
+ intval($a->profile['uid']));
+ if(count($r))
+ $updated = date("c", strtotime($r[0]['updated']));
+
+ $r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 AND `hidden` = 0 AND `archive` = 0
+ AND `network` IN ('%s', '%s', '%s', '')",
+ intval($profile['uid']),
+ dbesc(NETWORK_DFRN),
+ dbesc(NETWORK_DIASPORA),
+ dbesc(NETWORK_OSTATUS)
+ );
+ if(count($r))
+ $contacts = intval($r[0]['total']);
+ }
+ }
$p = array();
foreach($profile as $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' => $p,
'$homepage' => $homepage,
'$about' => $about,
'$network' => t('Network:'),
+ '$contacts' => $contacts,
+ '$updated' => $updated,
'$diaspora' => $diaspora,
'$contact_block' => $contact_block,
));
$bd_short = t('F d');
$r = q("SELECT `event`.* FROM `event`
- WHERE `event`.`uid` = %d AND `type` != 'birthday' AND `start` < '%s' AND `start` > '%s'
+ WHERE `event`.`uid` = %d AND `type` != 'birthday' AND `start` < '%s' AND `start` >= '%s'
ORDER BY `start` ASC ",
intval(local_user()),
- dbesc(datetime_convert('UTC','UTC','now + 6 days')),
+ dbesc(datetime_convert('UTC','UTC','now + 7 days')),
dbesc(datetime_convert('UTC','UTC','now - 1 days'))
);
}
$classtoday = (($istoday) ? 'event-today' : '');
+ $skip = 0;
foreach($r as &$rr) {
- if($rr['adjust'])
- $md = datetime_convert('UTC',$a->timezone,$rr['start'],'Y/m');
- else
- $md = datetime_convert('UTC','UTC',$rr['start'],'Y/m');
- $md .= "/#link-".$rr['id'];
+ $title = strip_tags(html_entity_decode(bbcode($rr['summary']),ENT_QUOTES,'UTF-8'));
- $title = substr(strip_tags(bbcode($rr['desc'])),0,32) . '... ';
- if(! $title)
- $title = t('[No description]');
+ if(strlen($title) > 35)
+ $title = substr($title,0,32) . '... ';
+
+ $description = substr(strip_tags(bbcode($rr['desc'])),0,32) . '... ';
+ if(! $description)
+ $description = t('[No description]');
$strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']);
- $today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false);
- $rr['link'] = $md;
+ if(substr($strt,0,10) < datetime_convert('UTC',$a->timezone,'now','Y-m-d')) {
+ $skip++;
+ continue;
+ }
+
+ $today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false);
+
$rr['title'] = $title;
+ $rr['description'] = $desciption;
$rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '');
$rr['startime'] = $strt;
$rr['today'] = $today;
return replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
'$classtoday' => $classtoday,
- '$count' => count($r),
+ '$count' => count($r) - $skip,
'$event_reminders' => t('Event Reminders'),
'$event_title' => t('Events this week:'),
'$events' => $r,
function zrl_init(&$a) {
$tmp_str = get_my_url();
if(validate_url($tmp_str)) {
+
+ // Is it a DDoS attempt?
+ // The check fetches the cached value from gprobe to reduce the load for this system
+ $urlparts = parse_url($tmp_str);
+
+ $result = Cache::get("gprobe:".$urlparts["host"]);
+ if (!is_null($result)) {
+ $result = unserialize($result);
+ if ($result["network"] == NETWORK_FEED) {
+ logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
+ return;
+ }
+ }
+
proc_run('php','include/gprobe.php',bin2hex($tmp_str));
$arr = array('zrl' => $tmp_str, 'url' => $a->cmd);
call_hooks('zrl_init',$arr);
if ($temppath != "") {
$itemcache = $temppath."/itemcache";
- mkdir($itemcache);
+ if(!file_exists($itemcache) && !is_dir($itemcache)) {
+ mkdir($itemcache);
+ }
if (is_dir($itemcache) AND is_writable($itemcache)) {
set_config("system", "itemcache", $itemcache);