Merge branch 'master' of git://github.com/friendica/friendica
This commit is contained in:
commit
6e4760dd9c
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Disable LF normalization for all files
|
||||
* -text
|
86
boot.php
86
boot.php
|
@ -4,12 +4,13 @@ require_once('include/config.php');
|
|||
require_once('include/network.php');
|
||||
require_once('include/plugin.php');
|
||||
require_once('include/text.php');
|
||||
require_once('include/datetime.php');
|
||||
require_once('include/pgettext.php');
|
||||
require_once('include/nav.php');
|
||||
require_once('include/cache.php');
|
||||
|
||||
define ( 'FRIENDICA_PLATFORM', 'Friendica');
|
||||
define ( 'FRIENDICA_VERSION', '3.0.1370' );
|
||||
define ( 'FRIENDICA_VERSION', '3.0.1382' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
|
||||
define ( 'DB_UPDATE_VERSION', 1149 );
|
||||
|
||||
|
@ -76,14 +77,6 @@ define ( 'CONTACT_IS_SHARING', 2);
|
|||
define ( 'CONTACT_IS_FRIEND', 3);
|
||||
|
||||
|
||||
/**
|
||||
* Hook array order
|
||||
*/
|
||||
|
||||
define ( 'HOOK_HOOK', 0);
|
||||
define ( 'HOOK_FILE', 1);
|
||||
define ( 'HOOK_FUNCTION', 2);
|
||||
|
||||
/**
|
||||
* DB update return values
|
||||
*/
|
||||
|
@ -331,8 +324,17 @@ if(! class_exists('App')) {
|
|||
private $curl_code;
|
||||
private $curl_headers;
|
||||
|
||||
private $cached_profile_image;
|
||||
private $cached_profile_picdate;
|
||||
|
||||
function __construct() {
|
||||
|
||||
global $default_timezone;
|
||||
|
||||
$this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
|
||||
|
||||
date_default_timezone_set($this->timezone);
|
||||
|
||||
$this->config = array();
|
||||
$this->page = array();
|
||||
$this->pager= array();
|
||||
|
@ -407,9 +409,6 @@ if(! class_exists('App')) {
|
|||
$this->argc = count($this->argv);
|
||||
if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) {
|
||||
$this->module = str_replace(".", "_", $this->argv[0]);
|
||||
if(array_key_exists('2',$this->argv)) {
|
||||
$this->category = $this->argv[2];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->argc = 1;
|
||||
|
@ -432,7 +431,7 @@ if(! class_exists('App')) {
|
|||
* pagination
|
||||
*/
|
||||
|
||||
$this->pager['page'] = ((x($_GET,'page')) ? $_GET['page'] : 1);
|
||||
$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'];
|
||||
$this->pager['total'] = 0;
|
||||
|
@ -499,7 +498,7 @@ if(! class_exists('App')) {
|
|||
}
|
||||
|
||||
function set_pager_itemspage($n) {
|
||||
$this->pager['itemspage'] = intval($n);
|
||||
$this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
|
||||
$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
|
||||
|
||||
}
|
||||
|
@ -539,6 +538,28 @@ if(! class_exists('App')) {
|
|||
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];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1126,9 +1147,9 @@ if(! function_exists('profile_sidebar')) {
|
|||
'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){
|
||||
|
@ -1363,7 +1384,7 @@ if(! function_exists('proc_run')) {
|
|||
|
||||
if(! function_exists('current_theme')) {
|
||||
function current_theme(){
|
||||
$app_base_themes = array('duepuntozero', 'loozah');
|
||||
$app_base_themes = array('duepuntozero', 'dispy', 'quattro');
|
||||
|
||||
$a = get_app();
|
||||
|
||||
|
@ -1381,7 +1402,7 @@ if(! function_exists('current_theme')) {
|
|||
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)));
|
||||
|
||||
|
@ -1573,3 +1594,30 @@ function zrl($s,$force = false) {
|
|||
return $s . $achar . 'zrl=' . urlencode($mine);
|
||||
return $s;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns querystring as string from a mapped array
|
||||
*
|
||||
* @param params Array
|
||||
* @return string
|
||||
*/
|
||||
function build_querystring($params, $name=null) {
|
||||
$ret = "";
|
||||
foreach($params as $key=>$val) {
|
||||
if(is_array($val)) {
|
||||
if($name==null) {
|
||||
$ret .= build_querystring($val, $key);
|
||||
} else {
|
||||
$ret .= build_querystring($val, $name."[$key]");
|
||||
}
|
||||
} else {
|
||||
$val = urlencode($val);
|
||||
if($name!=null) {
|
||||
$ret.=$name."[$key]"."=$val&";
|
||||
} else {
|
||||
$ret.= "$key=$val&";
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
|
|
@ -139,6 +139,10 @@ function terminate_friendship($user,$self,$contact) {
|
|||
|
||||
if(! function_exists('mark_for_death')) {
|
||||
function mark_for_death($contact) {
|
||||
|
||||
if($contact['archive'])
|
||||
return;
|
||||
|
||||
if($contact['term-date'] == '0000-00-00 00:00:00') {
|
||||
q("UPDATE `contact` SET `term-date` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
|
@ -146,12 +150,23 @@ function mark_for_death($contact) {
|
|||
);
|
||||
}
|
||||
else {
|
||||
|
||||
// TODO: We really should send a notification to the owner after 2-3 weeks
|
||||
// so they won't be surprised when the contact vanishes and can take
|
||||
// remedial action if this was a serious mistake or glitch
|
||||
|
||||
$expiry = $contact['term-date'] . ' + 32 days ';
|
||||
if(datetime_convert() > datetime_convert('UTC','UTC',$expiry)) {
|
||||
|
||||
// relationship is really truly dead.
|
||||
// archive them rather than delete
|
||||
// though if the owner tries to unarchive them we'll start the whole process over again
|
||||
|
||||
contact_remove($contact['id']);
|
||||
q("update contact set `archive` = 1 where id = %d limit 1",
|
||||
intval($contact['id'])
|
||||
);
|
||||
|
||||
//contact_remove($contact['id']);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,7 +121,70 @@ class Photo {
|
|||
$this->image = imagerotate($this->image,$degrees,0);
|
||||
$this->width = imagesx($this->image);
|
||||
$this->height = imagesy($this->image);
|
||||
}
|
||||
}
|
||||
|
||||
public function flip($horiz = true, $vert = false) {
|
||||
$w = imagesx($this->image);
|
||||
$h = imagesy($this->image);
|
||||
$flipped = imagecreate($w, $h);
|
||||
if($horiz) {
|
||||
for ($x = 0; $x < $w; $x++) {
|
||||
imagecopy($flipped, $this->image, $x, 0, $w - $x - 1, 0, 1, $h);
|
||||
}
|
||||
}
|
||||
if($vert) {
|
||||
for ($y = 0; $y < $h; $y++) {
|
||||
imagecopy($flipped, $this->image, 0, $y, 0, $h - $y - 1, $w, 1);
|
||||
}
|
||||
}
|
||||
$this->image = $flipped;
|
||||
}
|
||||
|
||||
public function orient($filename) {
|
||||
// based off comment on http://php.net/manual/en/function.imagerotate.php
|
||||
|
||||
if(! function_exists('exif_read_data'))
|
||||
return;
|
||||
|
||||
$exif = exif_read_data($filename);
|
||||
$ort = $exif['Orientation'];
|
||||
|
||||
switch($ort)
|
||||
{
|
||||
case 1: // nothing
|
||||
break;
|
||||
|
||||
case 2: // horizontal flip
|
||||
$this->flip();
|
||||
break;
|
||||
|
||||
case 3: // 180 rotate left
|
||||
$this->rotate(180);
|
||||
break;
|
||||
|
||||
case 4: // vertical flip
|
||||
$this->flip(false, true);
|
||||
break;
|
||||
|
||||
case 5: // vertical flip + 90 rotate right
|
||||
$this->flip(false, true);
|
||||
$this->rotate(-90);
|
||||
break;
|
||||
|
||||
case 6: // 90 rotate right
|
||||
$this->rotate(-90);
|
||||
break;
|
||||
|
||||
case 7: // horizontal flip + 90 rotate right
|
||||
$this->flip();
|
||||
$this->rotate(-90);
|
||||
break;
|
||||
|
||||
case 8: // 90 rotate left
|
||||
$this->rotate(90);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -256,35 +319,81 @@ class Photo {
|
|||
else
|
||||
$guid = get_guid();
|
||||
|
||||
$r = q("INSERT INTO `photo`
|
||||
( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` )
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )",
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
dbesc($guid),
|
||||
dbesc($rid),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(basename($filename)),
|
||||
dbesc($this->type),
|
||||
dbesc($album),
|
||||
intval($this->height),
|
||||
intval($this->width),
|
||||
dbesc($this->imageString()),
|
||||
intval($scale),
|
||||
intval($profile),
|
||||
dbesc($allow_cid),
|
||||
dbesc($allow_gid),
|
||||
dbesc($deny_cid),
|
||||
dbesc($deny_gid)
|
||||
$x = q("select id from photo where `resource-id` = '%s' and uid = %d and `contact-id` = %d and `scale` = %d limit 1",
|
||||
dbesc($rid),
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
intval($scale)
|
||||
);
|
||||
if(count($x)) {
|
||||
$r = q("UPDATE `photo`
|
||||
set `uid` = %d,
|
||||
`contact-id` = %d,
|
||||
`guid` = '%s',
|
||||
`resource-id` = '%s',
|
||||
`created` = '%s',
|
||||
`edited` = '%s',
|
||||
`filename` = '%s',
|
||||
`type` = '%s',
|
||||
`album` = '%s',
|
||||
`height` = %d,
|
||||
`width` = %d,
|
||||
`data` = '%s',
|
||||
`scale` = %d,
|
||||
`profile` = %d,
|
||||
`allow_cid` = '%s',
|
||||
`allow_gid` = '%s',
|
||||
`deny_cid` = '%s',
|
||||
`deny_gid` = '%s'
|
||||
where id = %d limit 1",
|
||||
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
dbesc($guid),
|
||||
dbesc($rid),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(basename($filename)),
|
||||
dbesc($this->type),
|
||||
dbesc($album),
|
||||
intval($this->height),
|
||||
intval($this->width),
|
||||
dbesc($this->imageString()),
|
||||
intval($scale),
|
||||
intval($profile),
|
||||
dbesc($allow_cid),
|
||||
dbesc($allow_gid),
|
||||
dbesc($deny_cid),
|
||||
dbesc($deny_gid),
|
||||
intval($x[0]['id'])
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = q("INSERT INTO `photo`
|
||||
( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` )
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )",
|
||||
intval($uid),
|
||||
intval($cid),
|
||||
dbesc($guid),
|
||||
dbesc($rid),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(basename($filename)),
|
||||
dbesc($this->type),
|
||||
dbesc($album),
|
||||
intval($this->height),
|
||||
intval($this->width),
|
||||
dbesc($this->imageString()),
|
||||
intval($scale),
|
||||
intval($profile),
|
||||
dbesc($allow_cid),
|
||||
dbesc($allow_gid),
|
||||
dbesc($deny_cid),
|
||||
dbesc($deny_gid)
|
||||
);
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}}
|
||||
|
||||
|
||||
|
@ -326,6 +435,17 @@ function import_profile_photo($photo,$uid,$cid) {
|
|||
|
||||
$a = get_app();
|
||||
|
||||
$r = q("select `resource-id` from photo where `uid` = %d and `contact-id` = %d and `scale` = 4 and `album` = 'Contact Photos' limit 1",
|
||||
intval($uid),
|
||||
intval($cid)
|
||||
);
|
||||
if(count($r)) {
|
||||
$hash = $r[0]['resource-id'];
|
||||
}
|
||||
else {
|
||||
$hash = photo_new_resource();
|
||||
}
|
||||
|
||||
$photo_failure = false;
|
||||
|
||||
$filename = basename($photo);
|
||||
|
@ -340,8 +460,6 @@ function import_profile_photo($photo,$uid,$cid) {
|
|||
|
||||
$img->scaleImageSquare(175);
|
||||
|
||||
$hash = photo_new_resource();
|
||||
|
||||
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4 );
|
||||
|
||||
if($r === false)
|
||||
|
@ -361,8 +479,6 @@ function import_profile_photo($photo,$uid,$cid) {
|
|||
if($r === false)
|
||||
$photo_failure = true;
|
||||
|
||||
|
||||
|
||||
$photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt();
|
||||
$thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt();
|
||||
$micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt();
|
||||
|
|
|
@ -352,10 +352,11 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
$email_conversant = false;
|
||||
|
||||
$twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
|
||||
$lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false);
|
||||
|
||||
$at_addr = ((strpos($url,'@') !== false) ? true : false);
|
||||
|
||||
if(! $twitter) {
|
||||
if((! $twitter) && (! $lastfm)) {
|
||||
|
||||
if(strpos($url,'mailto:') !== false && $at_addr) {
|
||||
$url = str_replace('mailto:','',$url);
|
||||
|
@ -564,6 +565,14 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
$vcard['fn'] = $tid . '@twitter';
|
||||
}
|
||||
|
||||
if($lastfm) {
|
||||
$profile = $url;
|
||||
$poll = str_replace(array('www.','last.fm/'),array('','ws.audioscrobbler.com/1.0/'),$url) . '/recenttracks.rss';
|
||||
$vcard['nick'] = basename($url);
|
||||
$vcard['fn'] = $vcard['nick'] . t(' on Last.fm');
|
||||
$network = NETWORK_FEED;
|
||||
}
|
||||
|
||||
if(! x($vcard,'fn'))
|
||||
if(x($vcard,'nick'))
|
||||
$vcard['fn'] = $vcard['nick'];
|
||||
|
|
|
@ -245,7 +245,7 @@
|
|||
|
||||
}
|
||||
|
||||
logger('api_user: ' . $extra_query . ' ' , $user);
|
||||
logger('api_user: ' . $extra_query . ', user: ' . $user);
|
||||
// user info
|
||||
$uinfo = q("SELECT *, `contact`.`id` as `cid` FROM `contact`
|
||||
WHERE 1
|
||||
|
@ -719,14 +719,18 @@
|
|||
if ($page<0) $page=0;
|
||||
$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
|
||||
$max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0);
|
||||
$exclude_replies = (x($_REQUEST,'exclude_replies')?1:0);
|
||||
//$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
|
||||
|
||||
$start = $page*$count;
|
||||
|
||||
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
|
||||
|
||||
$sql_extra = '';
|
||||
if ($max_id > 0)
|
||||
$sql_extra = 'AND `item`.`id` <= '.intval($max_id);
|
||||
$sql_extra .= ' AND `item`.`id` <= '.intval($max_id);
|
||||
if ($exclude_replies > 0)
|
||||
$sql_extra .= ' AND `item`.`parent` = `item`.`id`';
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
|
||||
|
@ -860,6 +864,8 @@
|
|||
logger('API: api_statuses_show: '.$id);
|
||||
|
||||
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
|
||||
//$sql_extra = "";
|
||||
if ($_GET["conversation"] == "true") $sql_extra .= " AND `item`.`parent` = %d ORDER BY `received` ASC "; else $sql_extra .= " AND `item`.`id` = %d";
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
|
||||
|
@ -870,19 +876,24 @@
|
|||
AND `contact`.`id` = `item`.`contact-id`
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
$sql_extra
|
||||
AND `item`.`id`=%d",
|
||||
",
|
||||
intval($id)
|
||||
);
|
||||
|
||||
//var_dump($r);
|
||||
$ret = api_format_items($r,$user_info);
|
||||
|
||||
$data = array('$status' => $ret[0]);
|
||||
/*switch($type){
|
||||
case "atom":
|
||||
case "rss":
|
||||
$data = api_rss_extra($a, $data, $user_info);
|
||||
}*/
|
||||
return api_apply_template("status", $type, $data);
|
||||
//var_dump($ret);
|
||||
if ($_GET["conversation"] == "true") {
|
||||
$data = array('$statuses' => $ret);
|
||||
return api_apply_template("timeline", $type, $data);
|
||||
} else {
|
||||
$data = array('$status' => $ret[0]);
|
||||
/*switch($type){
|
||||
case "atom":
|
||||
case "rss":
|
||||
$data = api_rss_extra($a, $data, $user_info);
|
||||
}*/
|
||||
return api_apply_template("status", $type, $data);
|
||||
}
|
||||
}
|
||||
api_register_func('api/statuses/show','api_statuses_show', true);
|
||||
|
||||
|
@ -1061,11 +1072,14 @@
|
|||
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
|
||||
if ($page<0) $page=0;
|
||||
$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
|
||||
$exclude_replies = (x($_REQUEST,'exclude_replies')?1:0);
|
||||
//$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
|
||||
|
||||
$start = $page*$count;
|
||||
|
||||
if ($user_info['self']==1) $sql_extra = "AND `item`.`wall` = 1 ";
|
||||
$sql_extra = '';
|
||||
if ($user_info['self']==1) $sql_extra .= " AND `item`.`wall` = 1 ";
|
||||
if ($exclude_replies > 0) $sql_extra .= ' AND `item`.`parent` = `item`.`id`';
|
||||
|
||||
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
|
||||
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
|
||||
|
@ -1654,7 +1668,6 @@ account/update_profile_background_image
|
|||
account/update_profile_image
|
||||
blocks/create
|
||||
blocks/destroy
|
||||
oauth/authorize
|
||||
|
||||
Not implemented in status.net:
|
||||
statuses/retweeted_to_me
|
||||
|
|
|
@ -18,19 +18,17 @@
|
|||
if(! function_exists('load_config')) {
|
||||
function load_config($family) {
|
||||
global $a;
|
||||
$r = q("SELECT * FROM `config` WHERE `cat` = '%s'",
|
||||
dbesc($family)
|
||||
);
|
||||
$r = q("SELECT * FROM `config` WHERE `cat` = '%s'", dbesc($family));
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
$k = $rr['k'];
|
||||
if ($rr['cat'] === 'config') {
|
||||
if ($family === 'config') {
|
||||
$a->config[$k] = $rr['v'];
|
||||
} else {
|
||||
$a->config[$family][$k] = $rr['v'];
|
||||
}
|
||||
}
|
||||
} else if ($rr['cat'] != 'config') {
|
||||
} else if ($family != 'config') {
|
||||
// Negative caching
|
||||
$a->config[$family] = "!<unset>!";
|
||||
}
|
||||
|
@ -128,7 +126,7 @@ function load_pconfig($uid,$family) {
|
|||
$k = $rr['k'];
|
||||
$a->config[$uid][$family][$k] = $rr['v'];
|
||||
}
|
||||
} else if ($rr['cat'] != 'config') {
|
||||
} else if ($family != 'config') {
|
||||
// Negative caching
|
||||
$a->config[$uid][$family] = "!<unset>!";
|
||||
}
|
||||
|
|
|
@ -173,8 +173,8 @@ function localize_item(&$item){
|
|||
$item['body'] = str_replace($mtch[0],'@[url=' . zrl($mtch[1]). ']',$item['body']);
|
||||
}
|
||||
}
|
||||
// add zrl's to public images
|
||||
if(preg_match_all('/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
|
||||
logger('matched');
|
||||
foreach($matches as $mtch) {
|
||||
$item['body'] = str_replace($mtch[0],'[url=' . zrl($mtch[1] . '/photos/' . $mtch[2] . '/image/' . $mtch[3] ,true) . '][img' . $mtch[4] . ']h' . $mtch[5] . '[/img][/url]',$item['body']);
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
|
||||
$profile_avatar = $a->contacts[$normalised]['thumb'];
|
||||
else
|
||||
$profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
|
||||
$profile_avatar = ((strlen($item['author-avatar'])) ? $a->get_cached_avatar_image($item['author-avatar']) : $item['thumb']);
|
||||
|
||||
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
|
||||
call_hooks('render_location',$locate);
|
||||
|
@ -546,7 +546,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
}
|
||||
|
||||
$likebuttons = '';
|
||||
$shareable = ((($profile_owner == local_user()) && (! $item['private'])) ? true : false); //($mode != 'display') &&
|
||||
$shareable = ((($profile_owner == local_user()) && ((! $item['private']) || $item['network'] === NETWORK_FEED)) ? true : false);
|
||||
|
||||
if($page_writeable) {
|
||||
if($toplevelpost) {
|
||||
|
@ -657,7 +657,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
|
||||
$profile_avatar = $a->contacts[$normalised]['thumb'];
|
||||
else
|
||||
$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
|
||||
$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->get_cached_avatar_image($thumb));
|
||||
|
||||
$like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
|
||||
$dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
|
||||
|
|
|
@ -87,7 +87,7 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d
|
|||
$from = 'UTC';
|
||||
if($to === '')
|
||||
$to = 'UTC';
|
||||
if($s === '')
|
||||
if( ($s === '') || (! is_string($s)) )
|
||||
$s = 'now';
|
||||
|
||||
// Slight hackish adjustment so that 'zero' datetime actually returns what is intended
|
||||
|
|
|
@ -1060,45 +1060,64 @@ function diaspora_comment($importer,$xml,$msg) {
|
|||
}
|
||||
$parent_item = $r[0];
|
||||
|
||||
$author_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $diaspora_handle;
|
||||
|
||||
$author_signature = base64_decode($author_signature);
|
||||
/* How Diaspora performs comment signature checking:
|
||||
|
||||
if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
|
||||
$person = $contact;
|
||||
$key = $msg['key'];
|
||||
}
|
||||
else {
|
||||
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||
- If an item has been sent by the comment author to the top-level post owner to relay on
|
||||
to the rest of the contacts on the top-level post, the top-level post owner should check
|
||||
the author_signature, then create a parent_author_signature before relaying the comment on
|
||||
- If an item has been relayed on by the top-level post owner, the contacts who receive it
|
||||
check only the parent_author_signature. Basically, they trust that the top-level post
|
||||
owner has already verified the authenticity of anything he/she sends out
|
||||
- In either case, the signature that get checked is the signature created by the person
|
||||
who sent the salmon
|
||||
*/
|
||||
|
||||
if(is_array($person) && x($person,'pubkey'))
|
||||
$key = $person['pubkey'];
|
||||
else {
|
||||
logger('diaspora_comment: unable to find author details');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) {
|
||||
logger('diaspora_comment: verification failed.');
|
||||
return;
|
||||
}
|
||||
$signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $diaspora_handle;
|
||||
$key = $msg['key'];
|
||||
|
||||
if($parent_author_signature) {
|
||||
$owner_signed_data = $guid . ';' . $parent_guid . ';' . $text . ';' . $diaspora_handle;
|
||||
// If a parent_author_signature exists, then we've received the comment
|
||||
// relayed from the top-level post owner. There's no need to check the
|
||||
// author_signature if the parent_author_signature is valid
|
||||
|
||||
$parent_author_signature = base64_decode($parent_author_signature);
|
||||
|
||||
$key = $msg['key'];
|
||||
if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) {
|
||||
logger('diaspora_comment: top-level owner verification failed.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// If there's no parent_author_signature, then we've received the comment
|
||||
// from the comment creator. In that case, the person is commenting on
|
||||
// our post, so he/she must be a contact of ours and his/her public key
|
||||
// should be in $msg['key']
|
||||
|
||||
if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) {
|
||||
logger('diaspora_comment: owner verification failed.');
|
||||
$author_signature = base64_decode($author_signature);
|
||||
|
||||
if(! rsa_verify($signed_data,$author_signature,$key,'sha256')) {
|
||||
logger('diaspora_comment: comment author verification failed.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Phew! Everything checks out. Now create an item.
|
||||
|
||||
// Find the original comment author information.
|
||||
// We need this to make sure we display the comment author
|
||||
// information (name and avatar) correctly.
|
||||
if(strcasecmp($diaspora_handle,$msg['author']) == 0)
|
||||
$person = $contact;
|
||||
else {
|
||||
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||
|
||||
if(! is_array($person)) {
|
||||
logger('diaspora_comment: unable to find author details');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$body = diaspora2bb($text);
|
||||
|
||||
$message_id = $diaspora_handle . ':' . $guid;
|
||||
|
@ -1613,7 +1632,7 @@ function diaspora_like($importer,$xml,$msg) {
|
|||
intval($r[0]['id']),
|
||||
intval($importer['uid'])
|
||||
);*/
|
||||
// FIXME
|
||||
// FIXME--actually don't unless it turns out that Diaspora does indeed send out "false" likes
|
||||
// send notification via proc_run()
|
||||
return;
|
||||
}
|
||||
|
@ -1626,45 +1645,64 @@ function diaspora_like($importer,$xml,$msg) {
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
/* How Diaspora performs "like" signature checking:
|
||||
|
||||
- If an item has been sent by the like author to the top-level post owner to relay on
|
||||
to the rest of the contacts on the top-level post, the top-level post owner should check
|
||||
the author_signature, then create a parent_author_signature before relaying the like on
|
||||
- If an item has been relayed on by the top-level post owner, the contacts who receive it
|
||||
check only the parent_author_signature. Basically, they trust that the top-level post
|
||||
owner has already verified the authenticity of anything he/she sends out
|
||||
- In either case, the signature that get checked is the signature created by the person
|
||||
who sent the salmon
|
||||
*/
|
||||
|
||||
$signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
|
||||
|
||||
$author_signature = base64_decode($author_signature);
|
||||
|
||||
if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
|
||||
$person = $contact;
|
||||
$key = $msg['key'];
|
||||
}
|
||||
else {
|
||||
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||
if(is_array($person) && x($person,'pubkey'))
|
||||
$key = $person['pubkey'];
|
||||
else {
|
||||
logger('diaspora_like: unable to find author details');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(! rsa_verify($signed_data,$author_signature,$key,'sha256')) {
|
||||
logger('diaspora_like: verification failed.');
|
||||
return;
|
||||
}
|
||||
$key = $msg['key'];
|
||||
|
||||
if($parent_author_signature) {
|
||||
|
||||
//$owner_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
|
||||
// If a parent_author_signature exists, then we've received the like
|
||||
// relayed from the top-level post owner. There's no need to check the
|
||||
// author_signature if the parent_author_signature is valid
|
||||
|
||||
$parent_author_signature = base64_decode($parent_author_signature);
|
||||
|
||||
$key = $msg['key'];
|
||||
|
||||
if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) {
|
||||
logger('diaspora_like: owner verification failed.');
|
||||
logger('diaspora_like: top-level owner verification failed.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// If there's no parent_author_signature, then we've received the like
|
||||
// from the like creator. In that case, the person is "like"ing
|
||||
// our post, so he/she must be a contact of ours and his/her public key
|
||||
// should be in $msg['key']
|
||||
|
||||
$author_signature = base64_decode($author_signature);
|
||||
|
||||
if(! rsa_verify($signed_data,$author_signature,$key,'sha256')) {
|
||||
logger('diaspora_like: like creator verification failed.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Phew! Everything checks out. Now create an item.
|
||||
|
||||
// Find the original comment author information.
|
||||
// We need this to make sure we display the comment author
|
||||
// information (name and avatar) correctly.
|
||||
if(strcasecmp($diaspora_handle,$msg['author']) == 0)
|
||||
$person = $contact;
|
||||
else {
|
||||
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||
|
||||
if(! is_array($person)) {
|
||||
logger('diaspora_like: unable to find author details');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$uri = $diaspora_handle . ':' . $guid;
|
||||
|
||||
$activity = ACTIVITY_LIKE;
|
||||
|
@ -1802,40 +1840,39 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
|
|||
|
||||
|
||||
$signed_data = $guid . ';' . $type ;
|
||||
$key = $msg['key'];
|
||||
|
||||
$sig_decode = base64_decode($sig);
|
||||
/* How Diaspora performs relayable_retraction signature checking:
|
||||
|
||||
if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
|
||||
$person = $contact;
|
||||
$key = $msg['key'];
|
||||
}
|
||||
else {
|
||||
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||
|
||||
if(is_array($person) && x($person,'pubkey'))
|
||||
$key = $person['pubkey'];
|
||||
else {
|
||||
logger('diaspora_signed_retraction: unable to find author details');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(! rsa_verify($signed_data,$sig_decode,$key,'sha256')) {
|
||||
logger('diaspora_signed_retraction: retraction-owner verification failed.' . print_r($msg,true));
|
||||
return;
|
||||
}
|
||||
- If an item has been sent by the item author to the top-level post owner to relay on
|
||||
to the rest of the contacts on the top-level post, the top-level post owner checks
|
||||
the author_signature, then creates a parent_author_signature before relaying the item on
|
||||
- If an item has been relayed on by the top-level post owner, the contacts who receive it
|
||||
check only the parent_author_signature. Basically, they trust that the top-level post
|
||||
owner has already verified the authenticity of anything he/she sends out
|
||||
- In either case, the signature that get checked is the signature created by the person
|
||||
who sent the salmon
|
||||
*/
|
||||
|
||||
if($parent_author_signature) {
|
||||
|
||||
$parent_author_signature = base64_decode($parent_author_signature);
|
||||
|
||||
$key = $msg['key'];
|
||||
|
||||
if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) {
|
||||
logger('diaspora_signed_retraction: failed to verify person relaying the retraction (e.g. owner of a post relaying a retracted comment');
|
||||
logger('diaspora_signed_retraction: top-level post owner verification failed');
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
$sig_decode = base64_decode($sig);
|
||||
|
||||
if(! rsa_verify($signed_data,$sig_decode,$key,'sha256')) {
|
||||
logger('diaspora_signed_retraction: retraction owner verification failed.' . print_r($msg,true));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if($type === 'StatusMessage' || $type === 'Comment' || $type === 'Like') {
|
||||
$r = q("select * from item where guid = '%s' and uid = %d and not file like '%%[%%' limit 1",
|
||||
|
@ -2113,7 +2150,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
|
|||
|
||||
$a = get_app();
|
||||
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
|
||||
$theiraddr = $contact['addr'];
|
||||
// $theiraddr = $contact['addr'];
|
||||
|
||||
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
|
||||
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
|
||||
|
@ -2176,7 +2213,10 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
|
|||
|
||||
$a = get_app();
|
||||
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
|
||||
$theiraddr = $contact['addr'];
|
||||
// $theiraddr = $contact['addr'];
|
||||
|
||||
$body = $item['body'];
|
||||
$text = html_entity_decode(bb2diaspora($body));
|
||||
|
||||
|
||||
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
|
||||
|
@ -2195,26 +2235,30 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
|
|||
$relay_retract = false;
|
||||
$sql_sign_id = 'iid';
|
||||
if( $item['deleted']) {
|
||||
$tpl = get_markup_template('diaspora_relayable_retraction.tpl');
|
||||
$relay_retract = true;
|
||||
$sql_sign_id = 'retract_iid';
|
||||
|
||||
$target_type = ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
|
||||
$sender_signed_text = $item['guid'] . ';' . $target_type ;
|
||||
|
||||
$sql_sign_id = 'retract_iid';
|
||||
$tpl = get_markup_template('diaspora_relayable_retraction.tpl');
|
||||
}
|
||||
elseif($item['verb'] === ACTIVITY_LIKE) {
|
||||
$tpl = get_markup_template('diaspora_like_relay.tpl');
|
||||
$like = true;
|
||||
|
||||
$target_type = 'Post';
|
||||
// $positive = (($item['deleted']) ? 'false' : 'true');
|
||||
$positive = 'true';
|
||||
$sender_signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $myaddr;
|
||||
|
||||
$tpl = get_markup_template('diaspora_like_relay.tpl');
|
||||
}
|
||||
else {
|
||||
else { // item is a comment
|
||||
$sender_signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
|
||||
|
||||
$tpl = get_markup_template('diaspora_comment_relay.tpl');
|
||||
}
|
||||
|
||||
$body = $item['body'];
|
||||
|
||||
$text = html_entity_decode(bb2diaspora($body));
|
||||
|
||||
|
||||
// fetch the original signature if the relayable was created by a Diaspora
|
||||
// or DFRN user. Relayables for other networks are not supported.
|
||||
|
@ -2235,51 +2279,20 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
|
|||
// function is called
|
||||
logger('diaspora_send_relay: original author signature not found, cannot send relayable');
|
||||
return;
|
||||
/*
|
||||
$itemcontact = q("select * from contact where `id` = %d limit 1",
|
||||
intval($item['contact-id'])
|
||||
);
|
||||
if(count($itemcontact)) {
|
||||
if(! $itemcontact[0]['self']) {
|
||||
$prefix = sprintf( t('[Relayed] Comment authored by %s from network %s'),
|
||||
'['. $item['author-name'] . ']' . '(' . $item['author-link'] . ')',
|
||||
network_to_name($itemcontact['network'])) . "\n";
|
||||
// "$body" was assigned to "$text" above. It isn't used after that, so I don't think
|
||||
// the following change will do anything
|
||||
$body = $prefix . $body;
|
||||
|
||||
// I think this comment will fail upon reaching Diaspora, because "$signed_text" is not defined
|
||||
}
|
||||
}
|
||||
else {
|
||||
// I'm confused about this "else." Since it sets "$handle = $myaddr," it seems like it should be for the case
|
||||
// where the top-level post owner commented on his own post, i.e. "$itemcontact[0]['self']" is true. But it's
|
||||
// positioned to be for the case where "count($itemcontact)" is 0.
|
||||
|
||||
$handle = $myaddr;
|
||||
|
||||
if($like)
|
||||
$signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $handle;
|
||||
elseif($relay_retract)
|
||||
$signed_text = $item['guid'] . ';' . $target_type;
|
||||
else
|
||||
$signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $handle;
|
||||
|
||||
$authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
|
||||
|
||||
q("insert into sign (`" . $sql_sign_id . "`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
|
||||
intval($item['id']),
|
||||
dbesc($signed_text),
|
||||
dbesc($authorsig),
|
||||
dbesc($handle)
|
||||
);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// sign it with the top-level owner's signature
|
||||
// Sign the relayable with the top-level owner's signature
|
||||
//
|
||||
// We'll use the $sender_signed_text that we just created, instead of the $signed_text
|
||||
// stored in the database, because that provides the best chance that Diaspora will
|
||||
// be able to reconstruct the signed text the same way we did. This is particularly a
|
||||
// concern for the comment, whose signed text includes the text of the comment. The
|
||||
// smallest change in the text of the comment, including removing whitespace, will
|
||||
// make the signature verification fail. Since we translate from BB code to Diaspora's
|
||||
// markup at the top of this function, which is AFTER we placed the original $signed_text
|
||||
// in the database, it's hazardous to trust the original $signed_text.
|
||||
|
||||
$parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
|
||||
$parentauthorsig = base64_encode(rsa_sign($sender_signed_text,$owner['uprvkey'],'sha256'));
|
||||
|
||||
$msg = replace_macros($tpl,array(
|
||||
'$guid' => xmlify($item['guid']),
|
||||
|
|
|
@ -41,8 +41,8 @@ function notification($params) {
|
|||
|
||||
$subject = sprintf( t('[Friendica:Notify] New mail received at %s'),$sitename);
|
||||
|
||||
$preamble = sprintf( t('%s sent you a new private message at %s.'),$params['source_name'],$sitename);
|
||||
$epreamble = sprintf( t('%s sent you %s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]');
|
||||
$preamble = sprintf( t('%1$s sent you a new private message at %2$s.'),$params['source_name'],$sitename);
|
||||
$epreamble = sprintf( t('%1$s sent you %2$s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]');
|
||||
$sitelink = t('Please visit %s to view and/or reply to your private messages.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl . '/message/' . $params['item']['id'] );
|
||||
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '/message/' . $params['item']['id'] . '">' . $sitename . '</a>');
|
||||
|
@ -66,27 +66,38 @@ function notification($params) {
|
|||
);
|
||||
}
|
||||
|
||||
$possess_desc = str_replace('<!item_type!>',item_post_type($p[0]),$possess_desc);
|
||||
$item_post_type = item_post_type($p[0]);
|
||||
//$possess_desc = str_replace('<!item_type!>',$possess_desc);
|
||||
|
||||
// "a post"
|
||||
$dest_str = sprintf($possess_desc,'a');
|
||||
$dest_str = sprintf(t('%1$s commented on [url=%2$s]a %3$s[/url]'),
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$itemlink,
|
||||
$item_post_type);
|
||||
|
||||
// "George Bull's post"
|
||||
if($p)
|
||||
$dest_str = sprintf($possess_desc,sprintf( t("%s's"),$p[0]['author-name']));
|
||||
$dest_str = sprintf(t('%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]'),
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$itemlink,
|
||||
$p[0]['author-name'],
|
||||
$item_post_type);
|
||||
|
||||
// "your post"
|
||||
if($p[0]['owner-name'] == $p[0]['author-name'] && $p[0]['wall'])
|
||||
$dest_str = sprintf($possess_desc, t('your') );
|
||||
$dest_str = sprintf(t('%1$s commented on [url=%2$s]your %3$s[/url]'),
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$itemlink,
|
||||
$item_post_type);
|
||||
|
||||
// Some mail softwares relies on subject field for threading.
|
||||
// So, we cannot have different subjects for notifications of the same thread.
|
||||
// Before this we have the name of the replier on the subject rendering
|
||||
// differents subjects for messages on the same thread.
|
||||
|
||||
$subject = sprintf( t('[Friendica:Notify] Comment to conversation #%d by %s'), $parent_id, $params['source_name']);
|
||||
$subject = sprintf( t('[Friendica:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $params['source_name']);
|
||||
$preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']);
|
||||
$epreamble = sprintf( t('%s commented on %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . $dest_str . '[/url]');
|
||||
$epreamble = $dest_str;
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
|
@ -97,9 +108,11 @@ function notification($params) {
|
|||
if($params['type'] == NOTIFY_WALL) {
|
||||
$subject = sprintf( t('[Friendica:Notify] %s posted to your profile wall') , $params['source_name']);
|
||||
|
||||
$preamble = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename);
|
||||
$preamble = sprintf( t('%1$s posted to your profile wall at %2$s') , $params['source_name'], $sitename);
|
||||
|
||||
$epreamble = sprintf( t('%s posted to %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your profile wall.') . '[/url]');
|
||||
$epreamble = sprintf( t('%1$s posted to [url=%2s]your wall[/url]') ,
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$itemlink);
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
|
@ -109,8 +122,10 @@ function notification($params) {
|
|||
|
||||
if($params['type'] == NOTIFY_TAGSELF) {
|
||||
$subject = sprintf( t('[Friendica:Notify] %s tagged you') , $params['source_name']);
|
||||
$preamble = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%s %s.') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['link'] . ']' . t('tagged you') . '[/url]');
|
||||
$preamble = sprintf( t('%1$s tagged you at %2$s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%1$s [url=%2$s]tagged you[/url].') ,
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$params['link']);
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
|
@ -120,8 +135,10 @@ function notification($params) {
|
|||
|
||||
if($params['type'] == NOTIFY_TAGSHARE) {
|
||||
$subject = sprintf( t('[Friendica:Notify] %s tagged your post') , $params['source_name']);
|
||||
$preamble = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%s tagged %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your post') . '[/url]' );
|
||||
$preamble = sprintf( t('%1$s tagged your post at %2$s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%1$s tagged [url=%2$s]your post[/url]') ,
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
|
||||
$itemlink);
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
|
@ -131,8 +148,10 @@ function notification($params) {
|
|||
|
||||
if($params['type'] == NOTIFY_INTRO) {
|
||||
$subject = sprintf( t('[Friendica:Notify] Introduction received'));
|
||||
$preamble = sprintf( t('You\'ve received an introduction from \'%s\' at %s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received %s from %s.'), '[url=$itemlink]' . t('an introduction') . '[/url]' , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
|
||||
$preamble = sprintf( t('You\'ve received an introduction from \'%1$s\' at %2$s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received [url=%1$s]an introduction[/url] from %2$s.'),
|
||||
$itemlink,
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
|
||||
$body = sprintf( t('You may visit their profile at %s'),$params['source_link']);
|
||||
|
||||
$sitelink = t('Please visit %s to approve or reject the introduction.');
|
||||
|
@ -143,11 +162,12 @@ function notification($params) {
|
|||
|
||||
if($params['type'] == NOTIFY_SUGGEST) {
|
||||
$subject = sprintf( t('[Friendica:Notify] Friend suggestion received'));
|
||||
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%s\' at %s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received %s for %s from %s.'),
|
||||
'[url=$itemlink]' . t('a friend suggestion') . '[/url]',
|
||||
'[url=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/url]',
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
|
||||
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%1$s\' at %2$s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'),
|
||||
$itemlink,
|
||||
'[url=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/url]',
|
||||
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
|
||||
|
||||
$body = t('Name:') . ' ' . $params['item']['name'] . "\n";
|
||||
$body .= t('Photo:') . ' ' . $params['item']['photo'] . "\n";
|
||||
$body .= sprintf( t('You may visit their profile at %s'),$params['item']['url']);
|
||||
|
|
|
@ -22,8 +22,6 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
|
|||
if($a->argv[$x] === 'category' && $a->argc > ($x + 1) && strlen($a->argv[$x+1]))
|
||||
$category = $a->argv[$x+1];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -448,6 +446,8 @@ function get_atom_elements($feed,$item) {
|
|||
$res['body'] = $purifier->purify($res['body']);
|
||||
|
||||
$res['body'] = @html2bbcode($res['body']);
|
||||
|
||||
|
||||
}
|
||||
elseif(! $have_real_body) {
|
||||
|
||||
|
@ -816,6 +816,12 @@ function item_store($arr,$force_parent = false) {
|
|||
if($r[0]['private'])
|
||||
$arr['private'] = 1;
|
||||
|
||||
// Edge case. We host a public forum that was originally posted to privately.
|
||||
// The original author commented, but as this is a comment, the permissions
|
||||
// weren't fixed up so it will still show the comment as private unless we fix it here.
|
||||
|
||||
if((intval($r[0]['forum_mode']) == 1) && (! $r[0]['private']))
|
||||
$arr['private'] = 0;
|
||||
}
|
||||
else {
|
||||
|
||||
|
@ -910,6 +916,16 @@ function item_store($arr,$force_parent = false) {
|
|||
intval($current_post)
|
||||
);
|
||||
|
||||
$arr['id'] = $current_post;
|
||||
$arr['parent'] = $parent_id;
|
||||
$arr['allow_cid'] = $allow_cid;
|
||||
$arr['allow_gid'] = $allow_gid;
|
||||
$arr['deny_cid'] = $deny_cid;
|
||||
$arr['deny_gid'] = $deny_gid;
|
||||
$arr['private'] = $private;
|
||||
$arr['deleted'] = $parent_deleted;
|
||||
call_hooks('post_remote_end',$arr);
|
||||
|
||||
// update the commented timestamp on the parent
|
||||
|
||||
q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
|
@ -1250,6 +1266,12 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
|||
return 3;
|
||||
}
|
||||
|
||||
if($contact['term-date'] != '0000-00-00 00:00:00') {
|
||||
logger("dfrn_deliver: $url back from the dead - removing mark for death");
|
||||
require_once('include/Contact.php');
|
||||
unmark_for_death($contact);
|
||||
}
|
||||
|
||||
$res = parse_xml_string($xml);
|
||||
|
||||
return $res->status;
|
||||
|
@ -1645,6 +1667,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
|
||||
if(count($r)) {
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
|
||||
// do not accept (ignore) an earlier edit than one we currently have.
|
||||
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
|
||||
continue;
|
||||
|
||||
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($datarray['title']),
|
||||
dbesc($datarray['body']),
|
||||
|
@ -1791,6 +1818,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
|
||||
if(count($r)) {
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
|
||||
// do not accept (ignore) an earlier edit than one we currently have.
|
||||
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
|
||||
continue;
|
||||
|
||||
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($datarray['title']),
|
||||
dbesc($datarray['body']),
|
||||
|
@ -1845,13 +1877,12 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
$datarray['last-child'] = 1;
|
||||
}
|
||||
|
||||
if($contact['network'] === NETWORK_FEED) {
|
||||
if(! strlen($contact['notify'])) {
|
||||
if(($contact['network'] === NETWORK_FEED) || (! strlen($contact['notify']))) {
|
||||
// one way feed - no remote comment ability
|
||||
$datarray['last-child'] = 0;
|
||||
}
|
||||
$datarray['private'] = 1;
|
||||
}
|
||||
if($contact['network'] === NETWORK_FEED)
|
||||
$datarray['private'] = 1;
|
||||
|
||||
// This is my contact on another system, but it's really me.
|
||||
// Turn this into a wall post.
|
||||
|
@ -2277,7 +2308,12 @@ function local_delivery($importer,$data) {
|
|||
|
||||
if(count($r)) {
|
||||
$iid = $r[0]['id'];
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
|
||||
// do not accept (ignore) an earlier edit than one we currently have.
|
||||
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
|
||||
continue;
|
||||
|
||||
logger('received updated comment' , LOGGER_DEBUG);
|
||||
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($datarray['title']),
|
||||
|
@ -2456,6 +2492,11 @@ function local_delivery($importer,$data) {
|
|||
|
||||
if(count($r)) {
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
|
||||
// do not accept (ignore) an earlier edit than one we currently have.
|
||||
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
|
||||
continue;
|
||||
|
||||
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($datarray['title']),
|
||||
dbesc($datarray['body']),
|
||||
|
@ -2622,6 +2663,11 @@ function local_delivery($importer,$data) {
|
|||
|
||||
if(count($r)) {
|
||||
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
|
||||
|
||||
// do not accept (ignore) an earlier edit than one we currently have.
|
||||
if(datetime_convert('UTC','UTC',$datarray['edited']) < $r[0]['edited'])
|
||||
continue;
|
||||
|
||||
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($datarray['title']),
|
||||
dbesc($datarray['body']),
|
||||
|
@ -3358,3 +3404,69 @@ function drop_item($id,$interactive = true) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function first_post_date($uid,$wall = false) {
|
||||
$r = q("select id, created from item
|
||||
where uid = %d and wall = %d and deleted = 0 and visible = 1 AND moderated = 0
|
||||
and id = parent
|
||||
order by created asc limit 1",
|
||||
intval($uid),
|
||||
intval($wall ? 1 : 0)
|
||||
);
|
||||
if(count($r)) {
|
||||
// logger('first_post_date: ' . $r[0]['id'] . ' ' . $r[0]['created'], LOGGER_DATA);
|
||||
return substr(datetime_convert('',date_default_timezone_get(),$r[0]['created']),0,10);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function posted_dates($uid,$wall) {
|
||||
$dnow = datetime_convert('',date_default_timezone_get(),'now','Y-m-d');
|
||||
|
||||
$dthen = first_post_date($uid,$wall);
|
||||
if(! $dthen)
|
||||
return array();
|
||||
|
||||
// If it's near the end of a long month, backup to the 28th so that in
|
||||
// consecutive loops we'll always get a whole month difference.
|
||||
|
||||
if(intval(substr($dnow,8)) > 28)
|
||||
$dnow = substr($dnow,0,8) . '28';
|
||||
if(intval(substr($dthen,8)) > 28)
|
||||
$dnow = substr($dthen,0,8) . '28';
|
||||
|
||||
$ret = array();
|
||||
while($dnow >= $dthen) {
|
||||
$dstart = substr($dnow,0,8) . '01';
|
||||
$dend = substr($dnow,0,8) . get_dim(intval($dnow),intval(substr($dnow,5)));
|
||||
$start_month = datetime_convert('','',$dstart,'Y-m-d');
|
||||
$end_month = datetime_convert('','',$dend,'Y-m-d');
|
||||
$str = day_translate(datetime_convert('','',$dnow,'F Y'));
|
||||
$ret[] = array($str,$end_month,$start_month);
|
||||
$dnow = datetime_convert('','',$dnow . ' -1 month', 'Y-m-d');
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function posted_date_widget($url,$uid,$wall) {
|
||||
$o = '';
|
||||
|
||||
// For former Facebook folks that left because of "timeline"
|
||||
|
||||
if($wall && intval(get_pconfig($uid,'system','no_wall_archive_widget')))
|
||||
return $o;
|
||||
|
||||
$ret = posted_dates($uid,$wall);
|
||||
if(! count($ret))
|
||||
return $o;
|
||||
|
||||
$o = replace_macros(get_markup_template('posted_date_widget.tpl'),array(
|
||||
'$title' => t('Archives'),
|
||||
'$size' => ((count($ret) > 6) ? 6 : count($ret)),
|
||||
'$url' => $url,
|
||||
'$dates' => $ret
|
||||
));
|
||||
return $o;
|
||||
}
|
|
@ -55,7 +55,7 @@ function nav(&$a) {
|
|||
// user info
|
||||
$r = q("SELECT micro FROM contact WHERE uid=%d AND self=1", intval($a->user['uid']));
|
||||
$userinfo = array(
|
||||
'icon' => (count($r) ? $r[0]['micro']: $a->get_baseurl($ssl_state)."/images/person-48.jpg"),
|
||||
'icon' => (count($r) ? $a->get_cached_avatar_image($r[0]['micro']) : $a->get_baseurl($ssl_state)."/images/person-48.jpg"),
|
||||
'name' => $a->user['username'],
|
||||
);
|
||||
|
||||
|
|
|
@ -36,11 +36,6 @@ function onepoll_run($argv, $argc){
|
|||
|
||||
logger('onepoll: start');
|
||||
|
||||
$abandon_days = intval(get_config('system','account_abandon_days'));
|
||||
if($abandon_days < 1)
|
||||
$abandon_days = 0;
|
||||
|
||||
|
||||
$manual_id = 0;
|
||||
$generation = 0;
|
||||
$hub_update = false;
|
||||
|
@ -54,9 +49,7 @@ function onepoll_run($argv, $argc){
|
|||
logger('onepoll: no contact');
|
||||
return;
|
||||
}
|
||||
|
||||
if(was_recently_delayed($contact_id))
|
||||
return;
|
||||
|
||||
|
||||
$d = datetime_convert();
|
||||
|
||||
|
@ -64,11 +57,6 @@ function onepoll_run($argv, $argc){
|
|||
// and which have a polling address and ignore Diaspora since
|
||||
// we are unable to match those posts with a Diaspora GUID and prevent duplicates.
|
||||
|
||||
$abandon_sql = (($abandon_days)
|
||||
? sprintf(" AND `user`.`login_date` > UTC_TIMESTAMP() - INTERVAL %d DAY ", intval($abandon_days))
|
||||
: ''
|
||||
);
|
||||
|
||||
$contacts = q("SELECT `contact`.* FROM `contact`
|
||||
WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
|
||||
AND NOT `network` IN ( '%s', '%s' )
|
||||
|
@ -88,14 +76,13 @@ function onepoll_run($argv, $argc){
|
|||
|
||||
$contact = $contacts[0];
|
||||
|
||||
|
||||
$xml = false;
|
||||
|
||||
$t = $contact['last-update'];
|
||||
|
||||
if($contact['subhub']) {
|
||||
$interval = get_config('system','pushpoll_frequency');
|
||||
$contact['priority'] = (($interval !== false) ? intval($interval) : 3);
|
||||
$poll_interval = get_config('system','pushpoll_frequency');
|
||||
$contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3);
|
||||
$hub_update = false;
|
||||
|
||||
if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
|
||||
|
@ -139,15 +126,18 @@ function onepoll_run($argv, $argc){
|
|||
. '&perm=' . $perm ;
|
||||
|
||||
$handshake_xml = fetch_url($url);
|
||||
$html_code = $a->get_curl_code();
|
||||
|
||||
logger('onepoll: handshake with url ' . $url . ' returns xml: ' . $handshake_xml, LOGGER_DATA);
|
||||
|
||||
|
||||
if(! $handshake_xml) {
|
||||
if((! strlen($handshake_xml)) || ($html_code >= 400) || (! $html_code)) {
|
||||
logger("poller: $url appears to be dead - marking for death ");
|
||||
|
||||
// dead connection - might be a transient event, or this might
|
||||
// mean the software was uninstalled or the domain expired.
|
||||
// Will keep trying for one month.
|
||||
|
||||
mark_for_death($contact);
|
||||
|
||||
// set the last-update so we don't keep polling
|
||||
|
@ -161,6 +151,9 @@ function onepoll_run($argv, $argc){
|
|||
|
||||
if(! strstr($handshake_xml,'<?xml')) {
|
||||
logger('poller: response from ' . $url . ' did not contain XML.');
|
||||
|
||||
mark_for_death($contact);
|
||||
|
||||
$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact['id'])
|
||||
|
|
|
@ -148,7 +148,9 @@ function load_hooks() {
|
|||
$r = q("SELECT * FROM `hook` WHERE 1");
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
$a->hooks[] = array($rr['hook'], $rr['file'], $rr['function']);
|
||||
if(! array_key_exists($rr['hook'],$a->hooks))
|
||||
$a->hooks[$rr['hook']] = array();
|
||||
$a->hooks[$rr['hook']][] = array($rr['file'],$rr['function']);
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
@ -158,25 +160,24 @@ if(! function_exists('call_hooks')) {
|
|||
function call_hooks($name, &$data = null) {
|
||||
$a = get_app();
|
||||
|
||||
if(count($a->hooks)) {
|
||||
foreach($a->hooks as $hook) {
|
||||
if($hook[HOOK_HOOK] === $name) {
|
||||
@include_once($hook[HOOK_FILE]);
|
||||
if(function_exists($hook[HOOK_FUNCTION])) {
|
||||
$func = $hook[HOOK_FUNCTION];
|
||||
$func($a,$data);
|
||||
}
|
||||
else {
|
||||
// remove orphan hooks
|
||||
q("delete from hook where hook = '%s' and file = '$s' and function = '%s' limit 1",
|
||||
dbesc($hook[HOOK_HOOK]),
|
||||
dbesc($hook[HOOK_FILE]),
|
||||
dbesc($hook[HOOK_FUNCTION])
|
||||
);
|
||||
}
|
||||
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
|
||||
foreach($a->hooks[$name] as $hook) {
|
||||
@include_once($hook[0]);
|
||||
if(function_exists($hook[1])) {
|
||||
$func = $hook[1];
|
||||
$func($a,$data);
|
||||
}
|
||||
else {
|
||||
// remove orphan hooks
|
||||
q("delete from hook where hook = '%s' and file = '$s' and function = '%s' limit 1",
|
||||
dbesc($name),
|
||||
dbesc($hook[0]),
|
||||
dbesc($hook[1])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
|
||||
|
|
|
@ -201,8 +201,8 @@ function poller_run($argv, $argc){
|
|||
|
||||
|
||||
if($contact['subhub']) {
|
||||
$interval = get_config('system','pushpoll_frequency');
|
||||
$contact['priority'] = (($interval !== false) ? intval($interval) : 3);
|
||||
$poll_interval = get_config('system','pushpoll_frequency');
|
||||
$contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3);
|
||||
$hub_update = false;
|
||||
|
||||
if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
|
||||
|
|
|
@ -23,6 +23,13 @@ function was_recently_delayed($cid) {
|
|||
);
|
||||
if(count($r))
|
||||
return true;
|
||||
|
||||
$r = q("select `term-date` from contact where id = %d and `term-date` != '' and `term-date` != '0000-00-00 00:00:00' limit 1",
|
||||
intval($cid)
|
||||
);
|
||||
if(count($r))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1059,7 +1059,7 @@ function feed_salmonlinks($nick) {
|
|||
if(! function_exists('get_plink')) {
|
||||
function get_plink($item) {
|
||||
$a = get_app();
|
||||
if (x($item,'plink') && (! $item['private'])){
|
||||
if (x($item,'plink') && ((! $item['private']) || ($item['network'] === NETWORK_FEED))){
|
||||
return array(
|
||||
'href' => $item['plink'],
|
||||
'title' => t('link to source'),
|
||||
|
@ -1255,13 +1255,13 @@ function bb_translate_video($s) {
|
|||
|
||||
function html2bb_video($s) {
|
||||
|
||||
$s = preg_replace('#<object[^>]+>(.*?)https+://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+)(.*?)</object>#ism',
|
||||
$s = preg_replace('#<object[^>]+>(.*?)https?://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+)(.*?)</object>#ism',
|
||||
'[youtube]$2[/youtube]', $s);
|
||||
|
||||
$s = preg_replace('#<iframe[^>](.*?)https+://www.youtube.com/embed/([A-Za-z0-9\-_=]+)(.*?)</iframe>#ism',
|
||||
$s = preg_replace('#<iframe[^>](.*?)https?://www.youtube.com/embed/([A-Za-z0-9\-_=]+)(.*?)</iframe>#ism',
|
||||
'[youtube]$2[/youtube]', $s);
|
||||
|
||||
$s = preg_replace('#<iframe[^>](.*?)https+://player.vimeo.com/video/([0-9]+)(.*?)</iframe>#ism',
|
||||
$s = preg_replace('#<iframe[^>](.*?)https?://player.vimeo.com/video/([0-9]+)(.*?)</iframe>#ism',
|
||||
'[vimeo]$2[/vimeo]', $s);
|
||||
|
||||
return $s;
|
||||
|
@ -1541,3 +1541,16 @@ function protect_sprintf($s) {
|
|||
return(str_replace('%','%%',$s));
|
||||
}
|
||||
|
||||
|
||||
function is_a_date_arg($s) {
|
||||
$i = intval($s);
|
||||
if($i > 1900) {
|
||||
$y = date('Y');
|
||||
if($i <= $y+1 && strpos($s,'-') == 4) {
|
||||
$m = intval(substr($s,5));
|
||||
if($m > 0 && $m <= 12)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
21
index.php
21
index.php
|
@ -59,8 +59,7 @@ if(! $install) {
|
|||
/**
|
||||
*
|
||||
* Important stuff we always need to do.
|
||||
* Initialise authentication and date and time.
|
||||
* Create the HTML head for the page, even if we may not use it (xml, etc.)
|
||||
*
|
||||
* The order of these may be important so use caution if you think they're all
|
||||
* intertwingled with no logical order and decide to sort it out. Some of the
|
||||
* dependencies have changed, but at least at one time in the recent past - the
|
||||
|
@ -68,12 +67,6 @@ if(! $install) {
|
|||
*
|
||||
*/
|
||||
|
||||
require_once("datetime.php");
|
||||
|
||||
$a->timezone = (($default_timezone) ? $default_timezone : 'UTC');
|
||||
|
||||
date_default_timezone_set($a->timezone);
|
||||
|
||||
session_start();
|
||||
|
||||
/**
|
||||
|
@ -253,7 +246,10 @@ if(! $install)
|
|||
|
||||
if($a->module_loaded) {
|
||||
$a->page['page_title'] = $a->module;
|
||||
$placeholder = '';
|
||||
|
||||
if(function_exists($a->module . '_init')) {
|
||||
call_hooks($a->module . '_mod_init', $placeholder);
|
||||
$func = $a->module . '_init';
|
||||
$func($a);
|
||||
}
|
||||
|
@ -273,18 +269,25 @@ if($a->module_loaded) {
|
|||
if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! $a->error)
|
||||
&& (function_exists($a->module . '_post'))
|
||||
&& (! x($_POST,'auth-params'))) {
|
||||
call_hooks($a->module . '_mod_post', $_POST);
|
||||
$func = $a->module . '_post';
|
||||
$func($a);
|
||||
}
|
||||
|
||||
if((! $a->error) && (function_exists($a->module . '_afterpost'))) {
|
||||
call_hooks($a->module . '_mod_afterpost',$placeholder);
|
||||
$func = $a->module . '_afterpost';
|
||||
$func($a);
|
||||
}
|
||||
|
||||
if((! $a->error) && (function_exists($a->module . '_content'))) {
|
||||
$arr = array('content' => $a->page['content']);
|
||||
call_hooks($a->module . '_mod_content', $arr);
|
||||
$a->page['content'] = $arr['content'];
|
||||
$func = $a->module . '_content';
|
||||
$a->page['content'] .= $func($a);
|
||||
$arr = array('content' => $func($a));
|
||||
call_hooks($a->module . '_mod_aftercontent', $arr);
|
||||
$a->page['content'] .= $arr['content'];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -709,7 +709,7 @@ class SimplePie
|
|||
* @see SimplePie::strip_htmltags()
|
||||
* @access private
|
||||
*/
|
||||
var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
||||
var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
||||
|
||||
/**
|
||||
* The SimplePie class contains feed level data and options
|
||||
|
@ -14803,7 +14803,7 @@ class SimplePie_Sanitize
|
|||
// Options
|
||||
var $remove_div = true;
|
||||
var $image_handler = '';
|
||||
var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
||||
var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
||||
var $encode_instead_of_strip = false;
|
||||
var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
|
||||
var $strip_comments = false;
|
||||
|
@ -14892,7 +14892,7 @@ class SimplePie_Sanitize
|
|||
}
|
||||
}
|
||||
|
||||
function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
|
||||
function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
|
||||
{
|
||||
if ($tags)
|
||||
{
|
||||
|
|
|
@ -335,6 +335,7 @@ function contacts_content(&$a) {
|
|||
$tab_tpl = get_markup_template('common_tabs.tpl');
|
||||
$tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
|
||||
|
||||
$lost_contact = (($contact['archive'] && $contact['term-date'] != '0000-00-00 00:00:00' && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$header' => t('Contact Editor'),
|
||||
|
@ -359,6 +360,7 @@ function contacts_content(&$a) {
|
|||
'$poll_interval' => contact_poll_interval($contact['priority'],(! $poll_enabled)),
|
||||
'$poll_enabled' => $poll_enabled,
|
||||
'$lastupdtext' => t('Last update:'),
|
||||
'$lost_contact' => $lost_contact,
|
||||
'$updpub' => t('Update public posts'),
|
||||
'$last_update' => $last_update,
|
||||
'$udnow' => t('Update now'),
|
||||
|
@ -477,12 +479,13 @@ function contacts_content(&$a) {
|
|||
|
||||
|
||||
|
||||
|
||||
$searching = false;
|
||||
if($search) {
|
||||
$search_hdr = $search;
|
||||
$search = dbesc($search.'*');
|
||||
$search_txt = dbesc(protect_sprintf(preg_quote($search)));
|
||||
$searching = true;
|
||||
}
|
||||
$sql_extra .= ((strlen($search)) ? " AND MATCH `name` AGAINST ('$search' IN BOOLEAN MODE) " : "");
|
||||
$sql_extra .= (($searching) ? " AND `name` REGEXP '$search_txt' " : "");
|
||||
|
||||
if($nets)
|
||||
$sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets));
|
||||
|
@ -499,7 +502,6 @@ function contacts_content(&$a) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 ORDER BY `name` ASC LIMIT %d , %d ",
|
||||
intval($_SESSION['uid']),
|
||||
intval($a->pager['start']),
|
||||
|
@ -566,7 +568,7 @@ function contacts_content(&$a) {
|
|||
'$total' => $total,
|
||||
'$search' => $search_hdr,
|
||||
'$desc' => t('Search your contacts'),
|
||||
'$finding' => (strlen($search) ? t('Finding: ') . "'" . $search . "'" : ""),
|
||||
'$finding' => (($searching) ? t('Finding: ') . "'" . $search . "'" : ""),
|
||||
'$submit' => t('Find'),
|
||||
'$cmd' => $a->cmd,
|
||||
'$contacts' => $contacts,
|
||||
|
|
|
@ -443,7 +443,7 @@ function dfrn_poll_content(&$a) {
|
|||
$encrypted_id = '';
|
||||
$id_str = $my_id . '.' . mt_rand(1000,9999);
|
||||
|
||||
if($r[0]['duplex'] && strlen($r[0]['pubkey'])) {
|
||||
if(($r[0]['duplex'] && strlen($r[0]['pubkey'])) || (! strlen($r[0]['prvkey']))) {
|
||||
openssl_public_encrypt($hash,$challenge,$r[0]['pubkey']);
|
||||
openssl_public_encrypt($id_str,$encrypted_id,$r[0]['pubkey']);
|
||||
}
|
||||
|
|
|
@ -170,6 +170,21 @@ function dfrn_request_post(&$a) {
|
|||
info( t("Introduction complete.") . EOL);
|
||||
}
|
||||
|
||||
$r = q("select id from contact where uid = %d and url = '%s' and `site-pubkey` = '%s' limit 1",
|
||||
intval(local_user()),
|
||||
dbesc($dfrn_url),
|
||||
$parms['key'] // this was already escaped
|
||||
);
|
||||
if(count($r)) {
|
||||
$g = q("select def_gid from user where uid = %d limit 1",
|
||||
intval(local_user())
|
||||
);
|
||||
if($g && intval($g[0]['def_gid'])) {
|
||||
require_once('include/group.php');
|
||||
group_add_member(local_user(),'',$r[0]['id'],$g[0]['def_gid']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow the blocked remote notification to complete
|
||||
*/
|
||||
|
|
|
@ -116,7 +116,7 @@ function directory_content(&$a) {
|
|||
$entry = replace_macros($tpl,array(
|
||||
'$id' => $rr['id'],
|
||||
'$profile-link' => $profile_link,
|
||||
'$photo' => $rr[$photo],
|
||||
'$photo' => $a->get_cached_avatar_image($rr[$photo]),
|
||||
'$alt-text' => $rr['name'],
|
||||
'$name' => $rr['name'],
|
||||
'$details' => $pdesc . $details
|
||||
|
|
|
@ -96,7 +96,7 @@ function manage_content(&$a) {
|
|||
|
||||
$o .= '<div id="identity-selector-wrapper">' . "\r\n";
|
||||
$o .= '<form action="manage" method="post" >' . "\r\n";
|
||||
$o .= '<select name="identity" size="4">' . "\r\n";
|
||||
$o .= '<select name="identity" size="4" onchange="this.form.submit();" >' . "\r\n";
|
||||
|
||||
foreach($a->identities as $rr) {
|
||||
$selected = (($rr['nickname'] === $a->user['nickname']) ? ' selected="selected" ' : '');
|
||||
|
@ -106,7 +106,8 @@ function manage_content(&$a) {
|
|||
$o .= '</select>' . "\r\n";
|
||||
$o .= '<div id="identity-select-break"></div>' . "\r\n";
|
||||
|
||||
$o .= '<input id="identity-submit" type="submit" name="submit" value="' . t('Submit') . '" /></div></form>' . "\r\n";
|
||||
// $o .= '<input id="identity-submit" type="submit" name="submit" value="' . t('Submit') . '" />';
|
||||
$o .= '</div></form>' . "\r\n";
|
||||
|
||||
return $o;
|
||||
|
||||
|
|
|
@ -407,6 +407,7 @@ function message_content(&$a) {
|
|||
'$parent' => $parent,
|
||||
'$upload' => t('Upload photo'),
|
||||
'$insert' => t('Insert web link'),
|
||||
'$submit' => t('Submit'),
|
||||
'$wait' => t('Please wait')
|
||||
|
||||
));
|
||||
|
|
117
mod/network.php
117
mod/network.php
|
@ -7,13 +7,28 @@ function network_init(&$a) {
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
$is_a_date_query = false;
|
||||
|
||||
if($a->argc > 1) {
|
||||
for($x = 1; $x < $a->argc; $x ++) {
|
||||
if(is_a_date_arg($a->argv[$x])) {
|
||||
$is_a_date_query = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// convert query string to array and remove first element (wich is friendica args)
|
||||
$query_array = array();
|
||||
parse_str($a->query_string, $query_array);
|
||||
array_shift($query_array);
|
||||
|
||||
// fetch last used tab and redirect if needed
|
||||
$sel_tabs = network_query_get_sel_tab($a);
|
||||
$last_sel_tabs = get_pconfig(local_user(), 'network.view','tab.selected');
|
||||
if (is_array($last_sel_tabs)){
|
||||
$tab_urls = array(
|
||||
'/network?f=&order=comment', //all
|
||||
'/network?f=&order=comment',//all
|
||||
'/network?f=&order=post', //postord
|
||||
'/network?f=&conv=1', //conv
|
||||
'/network/new', //new
|
||||
|
@ -24,10 +39,24 @@ function network_init(&$a) {
|
|||
|
||||
// redirect if current selected tab is 'no_active' and
|
||||
// last selected tab is _not_ 'all_active'.
|
||||
if ($sel_tabs[0] == 'active' && $last_sel_tabs[0]!='active') {
|
||||
// and this isn't a date query
|
||||
|
||||
if ($sel_tabs[0] == 'active' && $last_sel_tabs[0]!='active' && (! $is_a_date_query)) {
|
||||
$k = array_search('active', $last_sel_tabs);
|
||||
//echo "<pre>"; var_dump($sel_tabs, $last_sel_tabs, $tab_urlsm, $k, $tab_urls[$k]); killme();
|
||||
goaway($a->get_baseurl() . $tab_urls[$k]);
|
||||
|
||||
// merge tab querystring with request querystring
|
||||
$dest_qa = array();
|
||||
list($dest_url,$dest_qs) = explode("?", $tab_urls[$k]);
|
||||
parse_str( $dest_qs, $dest_qa);
|
||||
$dest_qa = array_merge($query_array, $dest_qa);
|
||||
$dest_qs = build_querystring($dest_qa);
|
||||
|
||||
// groups filter is in form of "network/nnn". Add it to $dest_url, if it's possible
|
||||
if ($a->argc==2 && is_numeric($a->argv[1]) && strpos($dest_url, "/",1)===false){
|
||||
$dest_url .= "/".$a->argv[1];
|
||||
}
|
||||
|
||||
goaway($a->get_baseurl() . $dest_url."?".$dest_qs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,6 +64,7 @@ function network_init(&$a) {
|
|||
|
||||
require_once('include/group.php');
|
||||
require_once('include/contact_widgets.php');
|
||||
require_once('include/items.php');
|
||||
|
||||
if(! x($a->page,'aside'))
|
||||
$a->page['aside'] = '';
|
||||
|
@ -66,8 +96,9 @@ function network_init(&$a) {
|
|||
if(x($_GET,'search')) {
|
||||
$a->page['content'] .= '<h2>' . t('Search Results For:') . ' ' . $search . '</h2>';
|
||||
}
|
||||
|
||||
|
||||
$a->page['aside'] .= group_side('network','network',true,$group_id);
|
||||
$a->page['aside'] .= posted_date_widget($a->get_baseurl() . '/network',local_user(),false);
|
||||
$a->page['aside'] .= networks_widget($a->get_baseurl(true) . '/network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
|
||||
$a->page['aside'] .= saved_searches($search);
|
||||
$a->page['aside'] .= fileas_widget($a->get_baseurl(true) . '/network',(x($_GET, 'file') ? $_GET['file'] : ''));
|
||||
|
@ -208,6 +239,34 @@ function network_content(&$a, $update = 0) {
|
|||
|
||||
call_hooks('network_content_init', $arr);
|
||||
|
||||
|
||||
$datequery = $datequery2 = '';
|
||||
|
||||
$group = 0;
|
||||
|
||||
$nouveau = false;
|
||||
|
||||
if($a->argc > 1) {
|
||||
for($x = 1; $x < $a->argc; $x ++) {
|
||||
if(is_a_date_arg($a->argv[$x])) {
|
||||
if($datequery)
|
||||
$datequery2 = escape_tags($a->argv[$x]);
|
||||
else {
|
||||
$datequery = escape_tags($a->argv[$x]);
|
||||
$_GET['order'] = 'post';
|
||||
}
|
||||
}
|
||||
elseif($a->argv[$x] === 'new') {
|
||||
$nouveau = true;
|
||||
}
|
||||
elseif(intval($a->argv[$x])) {
|
||||
$group = intval($a->argv[$x]);
|
||||
$def_acl = array('allow_gid' => '<' . $group . '>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$o = '';
|
||||
|
||||
// item filter tabs
|
||||
|
@ -218,43 +277,46 @@ function network_content(&$a, $update = 0) {
|
|||
// if no tabs are selected, defaults to comments
|
||||
if ($no_active=='active') $all_active='active';
|
||||
//echo "<pre>"; var_dump($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); killme();
|
||||
|
||||
|
||||
$cmd = (($datequery) ? '' : $a->cmd);
|
||||
$len_naked_cmd = strlen(str_replace('/new','',$cmd));
|
||||
|
||||
// tabs
|
||||
$tabs = array(
|
||||
array(
|
||||
'label' => t('Commented Order'),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
|
||||
'sel'=>$all_active,
|
||||
'title'=> t('Sort by Comment Date'),
|
||||
),
|
||||
array(
|
||||
'label' => t('Posted Order'),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
|
||||
'sel'=>$postord_active,
|
||||
'title' => t('Sort by Post Date'),
|
||||
),
|
||||
|
||||
array(
|
||||
'label' => t('Personal'),
|
||||
'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&conv=1',
|
||||
'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&conv=1',
|
||||
'sel' => $conv_active,
|
||||
'title' => t('Posts that mention or involve you'),
|
||||
),
|
||||
array(
|
||||
'label' => t('New'),
|
||||
'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . '/new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
|
||||
'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
|
||||
'sel' => $new_active,
|
||||
'title' => t('Activity Stream - by date'),
|
||||
),
|
||||
array(
|
||||
'label' => t('Starred'),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&star=1',
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&star=1',
|
||||
'sel'=>$starred_active,
|
||||
'title' => t('Favourite Posts'),
|
||||
),
|
||||
array(
|
||||
'label' => t('Shared Links'),
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&bmark=1',
|
||||
'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&bmark=1',
|
||||
'sel'=>$bookmarked_active,
|
||||
'title'=> t('Interesting Links'),
|
||||
),
|
||||
|
@ -285,9 +347,6 @@ function network_content(&$a, $update = 0) {
|
|||
|
||||
$contact_id = $a->cid;
|
||||
|
||||
$group = 0;
|
||||
|
||||
$nouveau = false;
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
$cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0);
|
||||
|
@ -302,17 +361,7 @@ function network_content(&$a, $update = 0) {
|
|||
$cmax = ((x($_GET,'cmax')) ? intval($_GET['cmax']) : 99);
|
||||
$file = ((x($_GET,'file')) ? $_GET['file'] : '');
|
||||
|
||||
if(($a->argc > 2) && $a->argv[2] === 'new')
|
||||
$nouveau = true;
|
||||
|
||||
if($a->argc > 1) {
|
||||
if($a->argv[1] === 'new')
|
||||
$nouveau = true;
|
||||
else {
|
||||
$group = intval($a->argv[1]);
|
||||
$def_acl = array('allow_gid' => '<' . $group . '>');
|
||||
}
|
||||
}
|
||||
|
||||
if(x($_GET,'search') || x($_GET,'file'))
|
||||
$nouveau = true;
|
||||
|
@ -452,7 +501,17 @@ function network_content(&$a, $update = 0) {
|
|||
. "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
|
||||
}
|
||||
|
||||
$sql_extra3 = '';
|
||||
|
||||
if($datequery) {
|
||||
$sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery))));
|
||||
}
|
||||
if($datequery2) {
|
||||
$sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2))));
|
||||
}
|
||||
|
||||
$sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` ");
|
||||
$sql_extra3 = (($nouveau) ? '' : $sql_extra3);
|
||||
|
||||
if(x($_GET,'search')) {
|
||||
$search = escape_tags($_GET['search']);
|
||||
|
@ -508,7 +567,7 @@ function network_content(&$a, $update = 0) {
|
|||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
$sql_extra2
|
||||
$sql_extra2 $sql_extra3
|
||||
$sql_extra $sql_nets ",
|
||||
intval($_SESSION['uid'])
|
||||
);
|
||||
|
@ -560,7 +619,7 @@ function network_content(&$a, $update = 0) {
|
|||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
and `item`.`moderated` = 0 and `item`.`unseen` = 1
|
||||
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
$sql_extra $sql_nets ",
|
||||
$sql_extra3 $sql_extra $sql_nets ",
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
|
@ -570,7 +629,7 @@ function network_content(&$a, $update = 0) {
|
|||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`parent` = `item`.`id`
|
||||
$sql_extra $sql_nets
|
||||
$sql_extra3 $sql_extra $sql_nets
|
||||
ORDER BY `item`.$ordering DESC $pager_sql ",
|
||||
intval(local_user())
|
||||
);
|
||||
|
|
|
@ -36,7 +36,7 @@ function photos_init(&$a) {
|
|||
|
||||
$o .= '<div class="vcard">';
|
||||
$o .= '<div class="fn">' . $a->data['user']['username'] . '</div>';
|
||||
$o .= '<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="' . $a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg" alt="' . $a->data['user']['username'] . '" /></div>';
|
||||
$o .= '<div id="profile-photo-wrapper"><img class="photo" style="width: 175px; height: 175px;" src="' . $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg') . '" alt="' . $a->data['user']['username'] . '" /></div>';
|
||||
$o .= '</div>';
|
||||
|
||||
if(! intval($a->data['user']['hidewall'])) {
|
||||
|
@ -306,7 +306,8 @@ function photos_post(&$a) {
|
|||
$albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
|
||||
|
||||
|
||||
if((x($_POST,'rotate') !== false) && (intval($_POST['rotate']) == 1)) {
|
||||
if((x($_POST,'rotate') !== false) &&
|
||||
( (intval($_POST['rotate']) == 1) || (intval($_POST['rotate']) == 2) )) {
|
||||
logger('rotate');
|
||||
|
||||
$r = q("select * from photo where `resource-id` = '%s' and uid = %d and scale = 0 limit 1",
|
||||
|
@ -316,7 +317,8 @@ function photos_post(&$a) {
|
|||
if(count($r)) {
|
||||
$ph = new Photo($r[0]['data'], $r[0]['type']);
|
||||
if($ph->is_valid()) {
|
||||
$ph->rotate(270);
|
||||
$rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 );
|
||||
$ph->rotate($rotate_deg);
|
||||
|
||||
$width = $ph->getWidth();
|
||||
$height = $ph->getHeight();
|
||||
|
@ -325,8 +327,8 @@ function photos_post(&$a) {
|
|||
dbesc($ph->imageString()),
|
||||
intval($height),
|
||||
intval($width),
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
);
|
||||
|
||||
if($width > 640 || $height > 640) {
|
||||
|
@ -338,8 +340,8 @@ function photos_post(&$a) {
|
|||
dbesc($ph->imageString()),
|
||||
intval($height),
|
||||
intval($width),
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -352,8 +354,8 @@ function photos_post(&$a) {
|
|||
dbesc($ph->imageString()),
|
||||
intval($height),
|
||||
intval($width),
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
dbesc($resource_id),
|
||||
intval($page_owner_uid)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -718,6 +720,7 @@ function photos_post(&$a) {
|
|||
killme();
|
||||
}
|
||||
|
||||
$ph->orient($src);
|
||||
@unlink($src);
|
||||
|
||||
$width = $ph->getWidth();
|
||||
|
@ -1250,7 +1253,8 @@ function photos_content(&$a) {
|
|||
$edit_tpl = get_markup_template('photo_edit.tpl');
|
||||
$edit = replace_macros($edit_tpl, array(
|
||||
'$id' => $ph[0]['id'],
|
||||
'$rotate' => t('Rotate CW'),
|
||||
'$rotatecw' => t('Rotate CW (right)'),
|
||||
'$rotateccw' => t('Rotate CCW (left)'),
|
||||
'$album' => template_escape($ph[0]['album']),
|
||||
'$newalbum' => t('New album name'),
|
||||
'$nickname' => $a->data['user']['nickname'],
|
||||
|
|
|
@ -67,11 +67,23 @@ function profile_init(&$a) {
|
|||
|
||||
function profile_content(&$a, $update = 0) {
|
||||
|
||||
if (x($a->category)) {
|
||||
$category = $a->category;
|
||||
$category = $datequery = $datequery2 = '';
|
||||
|
||||
if($a->argc > 2) {
|
||||
for($x = 2; $x < $a->argc; $x ++) {
|
||||
if(is_a_date_arg($a->argv[$x])) {
|
||||
if($datequery)
|
||||
$datequery2 = escape_tags($a->argv[$x]);
|
||||
else
|
||||
$datequery = escape_tags($a->argv[$x]);
|
||||
}
|
||||
else
|
||||
$category = $a->argv[$x];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$category = ((x($_GET,'category')) ? $_GET['category'] : '');
|
||||
|
||||
if(! x($category)) {
|
||||
$category = ((x($_GET,'category')) ? $_GET['category'] : '');
|
||||
}
|
||||
|
||||
if(get_config('system','block_public') && (! local_user()) && (! remote_user())) {
|
||||
|
@ -82,6 +94,8 @@ function profile_content(&$a, $update = 0) {
|
|||
require_once('include/security.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
require_once('include/items.php');
|
||||
|
||||
$groups = array();
|
||||
|
||||
$tab = 'posts';
|
||||
|
@ -97,6 +111,7 @@ function profile_content(&$a, $update = 0) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
$contact = null;
|
||||
$remote_contact = false;
|
||||
|
||||
|
@ -155,6 +170,7 @@ function profile_content(&$a, $update = 0) {
|
|||
|
||||
$celeb = ((($a->profile['page-flags'] == PAGE_SOAPBOX) || ($a->profile['page-flags'] == PAGE_COMMUNITY)) ? true : false);
|
||||
|
||||
$a->page['aside'] .= posted_date_widget($a->get_baseurl(true) . '/profile/' . $a->profile['nickname'],$a->profile['profile_uid'],true);
|
||||
$a->page['aside'] .= categories_widget($a->get_baseurl(true) . '/profile/' . $a->profile['nickname'],(x($category) ? xmlify($category) : ''));
|
||||
|
||||
if(can_write_wall($a,$a->profile['profile_uid'])) {
|
||||
|
@ -200,16 +216,24 @@ function profile_content(&$a, $update = 0) {
|
|||
}
|
||||
else {
|
||||
|
||||
if(x($category)) {
|
||||
$sql_extra .= file_tag_file_query('item',$category,'category');
|
||||
if(x($category)) {
|
||||
$sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category'));
|
||||
}
|
||||
|
||||
if($datequery) {
|
||||
$sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery))));
|
||||
}
|
||||
if($datequery2) {
|
||||
$sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2))));
|
||||
}
|
||||
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total`
|
||||
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
|
||||
$sql_extra ",
|
||||
$sql_extra $sql_extra2 ",
|
||||
intval($a->profile['profile_uid'])
|
||||
);
|
||||
|
||||
|
@ -225,7 +249,7 @@ function profile_content(&$a, $update = 0) {
|
|||
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
|
||||
and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
|
||||
$sql_extra
|
||||
$sql_extra $sql_extra2
|
||||
ORDER BY `item`.`created` DESC $pager_sql ",
|
||||
intval($a->profile['profile_uid'])
|
||||
|
||||
|
|
|
@ -652,7 +652,7 @@ function profiles_content(&$a) {
|
|||
|
||||
foreach($r as $rr) {
|
||||
$o .= replace_macros($tpl, array(
|
||||
'$photo' => $rr['thumb'],
|
||||
'$photo' => $a->get_cached_avatar_image($rr['thumb']),
|
||||
'$id' => $rr['id'],
|
||||
'$alt' => t('Profile Image'),
|
||||
'$profile_name' => $rr['profile-name'],
|
||||
|
|
|
@ -8,10 +8,10 @@ function share_init(&$a) {
|
|||
if((! $post_id) || (! local_user()))
|
||||
killme();
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
|
||||
$r = q("SELECT item.*, contact.network FROM `item` left join contact on `item`.`contact-id` = `contact`.`id` WHERE `item`.`id` = %d LIMIT 1",
|
||||
intval($post_id)
|
||||
);
|
||||
if(! count($r) || $r[0]['private'])
|
||||
if(! count($r) || ($r[0]['private'] && ($r[0]['network'] != NETWORK_FEED)))
|
||||
killme();
|
||||
|
||||
$o = '';
|
||||
|
|
182
spec/zot-2012.txt
Normal file
182
spec/zot-2012.txt
Normal file
|
@ -0,0 +1,182 @@
|
|||
|
||||
Initial cut at Zot-2012 protocol. This is a very rough draft of some very rough ideas and concepts.
|
||||
It is not yet intended to be a definitive specification and many things like the security handshakes are yet to be specified precisely.
|
||||
|
||||
All communications are https
|
||||
|
||||
|
||||
First create a global unique userid
|
||||
|
||||
|
||||
Site userid:
|
||||
https://macgirvin.com/1
|
||||
|
||||
$guuid = base64url_encode(hash('whirlpool','https://macgirvin.com/1.' . mt_rand(1000000,9999999),1);
|
||||
|
||||
|
||||
Then create a hashed site destination.
|
||||
|
||||
$gduid = base64url_encode(hash('whirlpool', $guuid . 'https://macgirvin.com',1);
|
||||
|
||||
These two keys will identify you as a person+site pair in the future.
|
||||
You will also obtain a password upon introducing yourself to a site.
|
||||
This can be used to edit locations in the future. You will always keep your global unique userid
|
||||
|
||||
|
||||
The steps to connect with somebody are to first register your location with their site.
|
||||
Then introduce yourself to the person. This contains flags for the desired relationship.
|
||||
At some future time, they may confirm and adjust the relationship based on their comfort level.
|
||||
Lack of confirmation is tantamount to denial.
|
||||
|
||||
You can set either or both of FOLLOW and SHARE which indicates the relationship from your viewpoint.
|
||||
They may do likewise.
|
||||
|
||||
A relationship is based on you as a person and provided you register new locations with the site you can post from anywhere.
|
||||
You do not need to register locations with each person, only with the site.
|
||||
|
||||
|
||||
Introduce yourself to a site:
|
||||
|
||||
|
||||
POST https://example.com/post
|
||||
|
||||
{
|
||||
'type' => 'register'
|
||||
'person' => $guuid
|
||||
'address' => $gduid
|
||||
'site' => 'https://macgirvin.com'
|
||||
'info' => 'mike@macgirvin.com'
|
||||
}
|
||||
|
||||
Returns:
|
||||
|
||||
{
|
||||
'success' => 'true'
|
||||
'pass' => me_encrypt($random_string)
|
||||
}
|
||||
|
||||
---
|
||||
Add location
|
||||
---
|
||||
|
||||
POST https://example.com/post
|
||||
|
||||
{
|
||||
'type' => 'location'
|
||||
'person' => $guuid
|
||||
'address' => $new_gduid
|
||||
'site' => 'https://newsite.com'
|
||||
'info' => 'mike@newsite.com'
|
||||
'pass' => me_encrypt($gduid . '.' . $pass)
|
||||
}
|
||||
|
||||
Returns:
|
||||
|
||||
{
|
||||
'success' => 'true'
|
||||
'pass' => me_encrypt($random_string)
|
||||
}
|
||||
|
||||
---
|
||||
Remove location
|
||||
---
|
||||
|
||||
POST https://example.com/post
|
||||
|
||||
{
|
||||
'type' => 'remove_location'
|
||||
'person' => $guuid
|
||||
'address' => $gduid
|
||||
'pass' => me_encrypt($pass)
|
||||
}
|
||||
|
||||
Returns:
|
||||
|
||||
{
|
||||
'success' => 'true'
|
||||
'message' => 'OK'
|
||||
}
|
||||
|
||||
|
||||
------------
|
||||
Make friends
|
||||
------------
|
||||
This message may be reversed/repeated by the destination site to confirm.
|
||||
flags is the desired friendship bits. The same message may be used with different flags
|
||||
to edit or remove a relationship.
|
||||
|
||||
|
||||
POST https://example.com/post
|
||||
|
||||
{
|
||||
'type' => 'contact'
|
||||
'person' => $gduid
|
||||
'address' => $guuid
|
||||
'target' => 'bobjones@example.com'
|
||||
'flags' => HIDDEN=0,FOLLOW=1,SHARE=1,NOHIDDEN=1,NOFOLLOW=0,NOSHARE=0
|
||||
'confirm' => me_encrypt($guuid . '.' . $pass)
|
||||
}
|
||||
|
||||
Returns:
|
||||
|
||||
{
|
||||
'success' => 'true'
|
||||
'message' => 'OK'
|
||||
'flags' => PENDING=1
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-------
|
||||
Message
|
||||
-------
|
||||
|
||||
Passing messages is done asynchronously. This may (potentially) relieve a lot of the burden of distribution from the posting site. If you're on site 'A' and make a post, site 'A' just contacts any downstream sites and informs them that there is new content (via a $post_id). The downstream site initiates the actual data transfer.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
POST https://example.com/post
|
||||
|
||||
{
|
||||
'type' => 'post'
|
||||
'person' => $guuid
|
||||
'address' => $gduid
|
||||
'post' => $post_id
|
||||
}
|
||||
|
||||
Returns:
|
||||
{
|
||||
'success' => 'true'
|
||||
'message' => 'OK'
|
||||
}
|
||||
|
||||
|
||||
--------
|
||||
Callback
|
||||
--------
|
||||
|
||||
POST https://macgirvin.com/post
|
||||
|
||||
{
|
||||
'type' => 'retrieve'
|
||||
'retrieve' => $post_id
|
||||
'challenge' => you_encrypt('abc123')
|
||||
'verify' => me_encrypt('xyz456' . '.' . $gduid)
|
||||
}
|
||||
|
||||
Returns:
|
||||
|
||||
{
|
||||
'success' => 'true'
|
||||
'message' => 'OK'
|
||||
'response' => 'abc123'
|
||||
'data' => encrypted or raw structured post
|
||||
}
|
||||
|
||||
|
901
util/messages.po
901
util/messages.po
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,3 @@
|
|||
<div class="clear"></div>
|
||||
<div id="categories-sidebar" class="widget">
|
||||
<h3>$title</h3>
|
||||
<div id="nets-desc">$desc</div>
|
||||
|
|
|
@ -9,3 +9,4 @@
|
|||
</div>
|
||||
{{ endif }}
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
<ul>
|
||||
<li><div id="contact-edit-rel">$relation_text</div></li>
|
||||
<li><div id="contact-edit-nettype">$nettype</div></li>
|
||||
{{ if $lost_contact }}
|
||||
<li><div id="lost-contact-message">$lost_contact</div></li>
|
||||
{{ endif }}
|
||||
{{ if $insecure }}
|
||||
<li><div id="insecure-message">$insecure</div></li>
|
||||
{{ endif }}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
</div>
|
||||
{{ endfor }}
|
||||
|
||||
<div id="conversation-end"></div>
|
||||
|
||||
{{ if $dropping }}
|
||||
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
|
||||
<div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
|
||||
|
|
1522
view/de/messages.po
1522
view/de/messages.po
File diff suppressed because it is too large
Load diff
|
@ -331,6 +331,7 @@ $a->strings["Archive"] = "Archivieren";
|
|||
$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
|
||||
$a->strings["Repair"] = "Reparieren";
|
||||
$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen";
|
||||
$a->strings["Communications lost with this contact!"] = "Verbindungen mit diesem Kontakt verloren!";
|
||||
$a->strings["Contact Editor"] = "Kontakt Editor";
|
||||
$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit";
|
||||
$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines deiner Profile das angezeigt werden soll, wenn %s dein Profil aufruft.";
|
||||
|
@ -678,6 +679,8 @@ $a->strings["Plugins"] = "Plugins";
|
|||
$a->strings["Themes"] = "Themen";
|
||||
$a->strings["DB updates"] = "DB Updates";
|
||||
$a->strings["Logs"] = "Protokolle";
|
||||
$a->strings["Admin"] = "Administration";
|
||||
$a->strings["Plugin Features"] = "Plugin Features";
|
||||
$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten";
|
||||
$a->strings["Normal Account"] = "Normales Konto";
|
||||
$a->strings["Soapbox Account"] = "Marktschreier-Konto";
|
||||
|
@ -1001,6 +1004,9 @@ $a->strings["Facebook post failed. Queued for retry."] = "Veröffentlichung bei
|
|||
$a->strings["Your Facebook connection became invalid. Please Re-authenticate."] = "Deine Facebook Anmeldedaten sind ungültig geworden. Bitte re-authentifiziere dich.";
|
||||
$a->strings["Facebook connection became invalid"] = "Facebook Anmeldedaten sind ungültig geworden";
|
||||
$a->strings["Hi %1\$s,\n\nThe connection between your accounts on %2\$s and Facebook became invalid. This usually happens after you change your Facebook-password. To enable the connection again, you have to %3\$sre-authenticate the Facebook-connector%4\$s."] = "Hallo %1\$s,\n\ndie Verbindung zwischen deinem Account auf %2\$s und Facebook funktioniert derzeit nicht. Dies ist normalerweise das Ergebnis einer Passwortänderung bei Facebook. Um die Verbindung wieder zu aktivieren musst du %3\$sden Facebook-Connector neu authentifizieren%4\$s.";
|
||||
$a->strings["StatusNet AutoFollow settings updated."] = "StatusNet AutoFollow Einstellungen aktualisiert.";
|
||||
$a->strings["StatusNet AutoFollow Settings"] = "StatusNet AutoFollow Einstellungen";
|
||||
$a->strings["Automatically follow any StatusNet followers/mentioners"] = "Automatisch allen StatusNet Followern/Erwähnungen folgen";
|
||||
$a->strings["Lifetime of the cache (in hours)"] = "Lebenszeit des Caches (in Stunden)";
|
||||
$a->strings["Cache Statistics"] = "Cache Statistik";
|
||||
$a->strings["Number of items"] = "Anzahl der Einträge";
|
||||
|
@ -1049,6 +1055,54 @@ $a->strings["Most active users"] = "Aktivste Nutzer";
|
|||
$a->strings["Latest photos"] = "Neueste Fotos";
|
||||
$a->strings["Latest likes"] = "Neueste Favoriten";
|
||||
$a->strings["event"] = "Veranstaltung";
|
||||
$a->strings["U.S. Time Format (mm/dd/YYYY)"] = "U.S. Datumsformat (mm/dd/YYYY)";
|
||||
$a->strings["German Time Format (dd.mm.YYYY)"] = "Deutsches Datumsformat (dd.mm.YYYY)";
|
||||
$a->strings["Error"] = "Fehler";
|
||||
$a->strings["No access"] = "Kein Zugriff";
|
||||
$a->strings["New event"] = "Neue Veranstaltung";
|
||||
$a->strings["Today"] = "Heute";
|
||||
$a->strings["Day"] = "Tag";
|
||||
$a->strings["Week"] = "Woche";
|
||||
$a->strings["Month"] = "Monat";
|
||||
$a->strings["Reload"] = "Neu Laden";
|
||||
$a->strings["Date"] = "Datum";
|
||||
$a->strings["Not found"] = "Nicht gefunden";
|
||||
$a->strings["Go back to the calendar"] = "Zurück zum Kalender";
|
||||
$a->strings["Starts"] = "Beginnt";
|
||||
$a->strings["Ends"] = "Endet";
|
||||
$a->strings["Description"] = "Beschreibung";
|
||||
$a->strings["Notification"] = "Benachrichtigung";
|
||||
$a->strings["Minutes"] = "Minuten";
|
||||
$a->strings["Hours"] = "Stunden";
|
||||
$a->strings["Days"] = "Tage";
|
||||
$a->strings["before"] = "vorher";
|
||||
$a->strings["Calendar Settings"] = "Kalender Einstellungen";
|
||||
$a->strings["Date format"] = "Datumsformat";
|
||||
$a->strings["Time zone"] = "Zeitzone";
|
||||
$a->strings["Limitations"] = "Einschränkungen";
|
||||
$a->strings["Warning"] = "Warnung";
|
||||
$a->strings["Synchronization (iPhone, Thunderbird Lightning, Android, ...)"] = "Synchronisation (iPhone, Thunderbird Lightning, Android, ...)";
|
||||
$a->strings["Synchronizing this calendar with the iPhone"] = "Diesen Kalender mit dem iPhone synchronisieren";
|
||||
$a->strings["Synchronizing your Friendica-Contacts with the iPhone"] = "Friendica-Kontakte mit dem iPhone synchronisieren";
|
||||
$a->strings["Friendica-Contacts"] = "Friendica-Kontakte";
|
||||
$a->strings["Your Friendica-Contacts"] = "Deine Friendica-Kontakte";
|
||||
$a->strings["Calendar"] = "Kalender";
|
||||
$a->strings["Extended calendar with CalDAV-support"] = "Erweiterter Kalender mit CalDAV Unterstützung.";
|
||||
$a->strings["The database tables have been installed."] = "Die Datenbank-Tabellen wurden installiert.";
|
||||
$a->strings["An error occurred during the installation."] = "Während der Installation trat ein Fehler auf.";
|
||||
$a->strings["No system-wide settings yet."] = "Momentan keine systemweiten Einstellungen.";
|
||||
$a->strings["Database status"] = "Datenbank Status";
|
||||
$a->strings["Installed"] = "Installiert";
|
||||
$a->strings["Upgrade needed"] = "Upgrade erforderlich";
|
||||
$a->strings["Upgrade"] = "Upgrade";
|
||||
$a->strings["Not installed"] = "Nicht installiert";
|
||||
$a->strings["Install"] = "Installieren";
|
||||
$a->strings["Troubleshooting"] = "Problembehebung";
|
||||
$a->strings["Manual creation of the database tables:"] = "Manuelles anlegen der Datenbank Tabellen:";
|
||||
$a->strings["Show SQL-statements"] = "SQL-Anweisungen anzeigen";
|
||||
$a->strings["Private Calendar"] = "Privater Kalender";
|
||||
$a->strings["Friendica Events: Mine"] = "Meine Friendica-Veranstaltungen";
|
||||
$a->strings["Friendica Events: Contacts"] = "Friendica Veranstaltungen meiner Kontakte";
|
||||
$a->strings["Allow to use your friendica id (%s) to connecto to external unhosted-enabled storage (like ownCloud). See <a href=\"http://www.w3.org/community/unhosted/wiki/RemoteStorage#WebFinger\">RemoteStorage WebFinger</a>"] = "Ermöglicht dir, deine friendica id (%s) mit externen unhosted-fähigen Speichern (z.B. ownCloud) zu verbinden. Siehe <a href=\"http://www.w3.org/community/unhosted/wiki/RemoteStorage#WebFinger\">RemoteStorage WebFinger</a>";
|
||||
$a->strings["Template URL (with {category})"] = "Vorlagen URL (mit {Kategorie})";
|
||||
$a->strings["OAuth end-point"] = "OAuth end-point";
|
||||
|
@ -1118,6 +1172,9 @@ $a->strings["How to contact the operator via email. (will be displayed obfuscate
|
|||
$a->strings["Footer note"] = "Fußnote";
|
||||
$a->strings["Text for the footer. You can use BBCode here."] = "Text für die Fußzeile. Du kannst BBCode verwenden.";
|
||||
$a->strings["Report Bug"] = "Fehlerreport erstellen";
|
||||
$a->strings["No Timeline settings updated."] = "Keine Timeline-Einstellungen aktualisiert.";
|
||||
$a->strings["No Timeline Settings"] = "Keine Timeline-Einstellungen";
|
||||
$a->strings["Disable Archive selector on profile wall"] = "Deaktiviere Archiv-Auswahl auf Deiner Pinnwand";
|
||||
$a->strings["\"Blockem\" Settings"] = "\"Blockem\"-Einstellungen";
|
||||
$a->strings["Comma separated profile URLS to block"] = "Profil-URLs, die blockiert werden sollen (durch Kommas getrennt)";
|
||||
$a->strings["BLOCKEM Settings saved."] = "BLOCKEM-Einstellungen gesichert.";
|
||||
|
@ -1136,6 +1193,12 @@ $a->strings["Tile Server URL"] = "Tile Server URL";
|
|||
$a->strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "Eine Liste <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">öffentlicher Tile Server</a>";
|
||||
$a->strings["Default zoom"] = "Standard Zoom";
|
||||
$a->strings["The default zoom level. (1:world, 18:highest)"] = "Standard Zoomlevel (1: Welt; 18: höchstes)";
|
||||
$a->strings["Post to libertree"] = "bei libertree veröffentlichen";
|
||||
$a->strings["libertree Post Settings"] = "libertree Post Einstellungen";
|
||||
$a->strings["Enable Libertree Post Plugin"] = "Libertree Post Plugin aktivieren";
|
||||
$a->strings["Libertree API token"] = "Libertree API Token";
|
||||
$a->strings["Libertree site URL"] = "Libertree URL";
|
||||
$a->strings["Post to Libertree by default"] = "Standardmäßig bei libertree veröffentlichen";
|
||||
$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "Mit dem MathJax Addon können mathematische Formeln, die mit LaTeX geschrieben wurden, dargestellt werden. Die Formel wird mit den üblichen $$ oder einem eqnarray Block gekennzeichnet. Formeln werden in allen Beiträgen auf deiner Pinnwand, dem Netzwerkstream sowie privaten Nachrichten gerendert.";
|
||||
$a->strings["Use the MathJax renderer"] = "MathJax verwenden";
|
||||
$a->strings["MathJax Base URL"] = "MathJax Basis-URL";
|
||||
|
@ -1190,6 +1253,7 @@ $a->strings["Send public postings to StatusNet by default"] = "Veröffentliche
|
|||
$a->strings["Send linked #-tags and @-names to StatusNet"] = "Sende verlinkte #-Tags und @-Namen nach StatusNet";
|
||||
$a->strings["Clear OAuth configuration"] = "OAuth-Konfiguration löschen";
|
||||
$a->strings["API URL"] = "API-URL";
|
||||
$a->strings["Infinite Improbability Drive"] = "Infinite Improbability Drive";
|
||||
$a->strings["Post to Tumblr"] = "Bei Tumblr veröffentlichen";
|
||||
$a->strings["Tumblr Post Settings"] = "Tumblr-Beitragseinstellungen";
|
||||
$a->strings["Enable Tumblr Post Plugin"] = "Tumblr-Plugin aktivieren";
|
||||
|
@ -1478,7 +1542,6 @@ $a->strings["Manage other pages"] = "Andere Seiten verwalten";
|
|||
$a->strings["Profiles"] = "Profile";
|
||||
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
|
||||
$a->strings["Manage/edit friends and contacts"] = "Freunde und Kontakte verwalten/editieren";
|
||||
$a->strings["Admin"] = "Administration";
|
||||
$a->strings["Site setup and configuration"] = "Einstellungen der Seite und Konfiguration";
|
||||
$a->strings["Nothing new here"] = "Keine Neuigkeiten.";
|
||||
$a->strings["Add New Contact"] = "Neuen Kontakt hinzufügen";
|
||||
|
@ -1530,38 +1593,33 @@ $a->strings["Thank You,"] = "Danke,";
|
|||
$a->strings["%s Administrator"] = "der Administrator von %s";
|
||||
$a->strings["%s <!item_type!>"] = "%s <!item_type!>";
|
||||
$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica Meldung] Neue Nachricht erhalten von %s";
|
||||
$a->strings["%s sent you a new private message at %s."] = "%s hat dir eine neue private Nachricht auf %s geschrieben.";
|
||||
$a->strings["%s sent you %s."] = "%s hat Dir %s geschickt";
|
||||
$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s hat Dir eine neues private Nachricht geschickt auf %2\$s.";
|
||||
$a->strings["%1\$s sent you %2\$s."] = "%1\$s schickte Dir %2\$s.";
|
||||
$a->strings["a private message"] = "eine private Nachricht";
|
||||
$a->strings["Please visit %s to view and/or reply to your private messages."] = "Bitte besuche %s, um deine privaten Nachrichten anzusehen und/oder zu beantworten.";
|
||||
$a->strings["%s's"] = "%s's";
|
||||
$a->strings["your"] = "Dein";
|
||||
$a->strings["[Friendica:Notify] Comment to conversation #%d by %s"] = "[Friendica Meldung] Kommentar zum Beitrag #%d von %s";
|
||||
$a->strings["%1\$s commented on [url=%2\$s]a %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]a %3\$s[/url]";
|
||||
$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]%3\$s's %4\$s[/url]";
|
||||
$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]Deinen Beitrag %3\$s[/url]";
|
||||
$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica Meldung] Kommentar zum Beitrag #%1\$d von %2\$s";
|
||||
$a->strings["%s commented on an item/conversation you have been following."] = "%s hat einen Beitrag kommentiert, dem du folgst.";
|
||||
$a->strings["%s commented on %s."] = "%s kommentierte %s.";
|
||||
$a->strings["Please visit %s to view and/or reply to the conversation."] = "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.";
|
||||
$a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica Meldung] %s hat auf Deine Pinnwand geschrieben";
|
||||
$a->strings["%s posted to your profile wall at %s"] = "%s hat auf deine Pinnwand bei %s gepostet";
|
||||
$a->strings["%s posted to %s"] = "%s schrieb an %s";
|
||||
$a->strings["your profile wall."] = "Deine Pinnwand";
|
||||
$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s schrieb auf Deine Pinnwand auf %2\$s";
|
||||
$a->strings["%1\$s posted to [url=%2s]your wall[/url]"] = "%1\$s schrieb auf [url=%2s]Deine Pinnwand[/url]";
|
||||
$a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica Meldung] %s hat Dich erwähnt";
|
||||
$a->strings["%s tagged you at %s"] = "%s hat dich auf %s erwähnt";
|
||||
$a->strings["%s %s."] = "%s %s.";
|
||||
$a->strings["tagged you"] = "erwähnte Dich";
|
||||
$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s erwähnte Dich auf %2\$s";
|
||||
$a->strings["%1\$s [url=%2s]tagged you[/url]."] = "%1\$s [url=%2s]erwähnte Dich[/url].";
|
||||
$a->strings["[Friendica:Notify] %s tagged your post"] = "[Friendica Meldung] %s markierte Deinen Beitrag";
|
||||
$a->strings["%s tagged your post at %s"] = "%s hat deinen Beitrag auf %s getaggt";
|
||||
$a->strings["%s tagged %s"] = "%s markierte %s";
|
||||
$a->strings["your post"] = "deinen Beitrag";
|
||||
$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$s erwähnte Deinen Beitrag auf %2\$s";
|
||||
$a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = "%1\$s erwähnte [url=%2\$s]Deinen Beitrag[/url]";
|
||||
$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica Meldung] Kontaktanfrage erhalten";
|
||||
$a->strings["You've received an introduction from '%s' at %s"] = "Du hast eine Kontaktanfrage von '%s' auf %s erhalten";
|
||||
$a->strings["You've received %s from %s."] = "Du hast %s von %s erhalten.";
|
||||
$a->strings["an introduction"] = "eine Kontaktanfrage";
|
||||
$a->strings["You've received an introduction from '%1\$s' at %2\$s"] = "Du hast eine Kontaktanfrage erhalten von '%1\$s' auf %2\$s";
|
||||
$a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Kontaktanfrage[/url] erhalten von %2\$s.";
|
||||
$a->strings["You may visit their profile at %s"] = "Hier kannst du das Profil betrachten: %s";
|
||||
$a->strings["Please visit %s to approve or reject the introduction."] = "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.";
|
||||
$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica Meldung] Kontaktvorschlag erhalten";
|
||||
$a->strings["You've received a friend suggestion from '%s' at %s"] = "Du hast von '%s' einen Kontaktvorschlag erhalten auf %s";
|
||||
$a->strings["You've received %s for %s from %s."] = "Du hast %s für %s von %s erhalten.";
|
||||
$a->strings["a friend suggestion"] = "ein Freunde Vorschlag";
|
||||
$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Du hast einen Freunde-Vorschlag erhalten von '%1\$s' auf %2\$s";
|
||||
$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Du hast einen [url=%1\$s]Freunde-Vorschlag[/url] erhalten %2\$s von %3\$s.";
|
||||
$a->strings["Name:"] = "Name:";
|
||||
$a->strings["Photo:"] = "Foto:";
|
||||
$a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.";
|
||||
|
@ -1579,6 +1637,7 @@ $a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinfo
|
|||
$a->strings["following"] = "folgen";
|
||||
$a->strings["A new person is sharing with you at "] = "Eine neue Person teilt mit dir auf ";
|
||||
$a->strings["You have a new follower at "] = "Du hast einen neuen Kontakt auf ";
|
||||
$a->strings["Archives"] = "Archiv";
|
||||
$a->strings["image/photo"] = "Bild/Foto";
|
||||
$a->strings["link"] = "Verweis";
|
||||
$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
|
||||
|
|
|
@ -18,8 +18,12 @@
|
|||
|
||||
<div id="photo-edit-tags-end"></div>
|
||||
<div id="photo-edit-rotate-wrapper">
|
||||
<div id="photo-edit-rotate-label">$rotate</div>
|
||||
<input type="checkbox" name="rotate" value="1" />
|
||||
<div id="photo-edit-rotate-label">
|
||||
$rotatecw<br>
|
||||
$rotateccw
|
||||
</div>
|
||||
<input type="radio" name="rotate" value="1" /><br>
|
||||
<input type="radio" name="rotate" value="2" />
|
||||
</div>
|
||||
<div id="photo-edit-rotate-end"></div>
|
||||
|
||||
|
|
9
view/posted_date_widget.tpl
Normal file
9
view/posted_date_widget.tpl
Normal file
|
@ -0,0 +1,9 @@
|
|||
<div id="datebrowse-sidebar" class="widget">
|
||||
<h3>$title</h3>
|
||||
<script>function dateSubmit(dateurl) { window.location.href = dateurl; } </script>
|
||||
<select id="posted-date-selector" name="posted-date-select" onchange="dateSubmit($(this).val());" size="$size">
|
||||
{{ for $dates as $d }}
|
||||
<option value="$url/$d.1/$d.2" >$d.0</option>
|
||||
{{ endfor }}
|
||||
</select>
|
||||
</div>
|
|
@ -1,4 +1,4 @@
|
|||
<a name="$item.id" />
|
||||
<a name="$item.id" ></a>
|
||||
<div class="wall-item-outside-wrapper$item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" >
|
||||
<div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" >
|
||||
<div class="wall-item-info" id="wall-item-info-$item.id">
|
||||
|
|
|
@ -151,6 +151,10 @@ blockquote {
|
|||
overflow: none;
|
||||
}
|
||||
|
||||
.editicon:hover {
|
||||
background-color: #ccc;
|
||||
.editicon {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
#datebrowse-sidebar select {
|
||||
color:#99CCFF !important;
|
||||
}
|
|
@ -149,4 +149,8 @@ blockquote {
|
|||
/* This seems okay to me...we might not need a new iconset, lets see how people react */
|
||||
.editicon {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
#datebrowse-sidebar select {
|
||||
color:#99CCFF !important;
|
||||
}
|
|
@ -16,6 +16,8 @@
|
|||
</div>
|
||||
{{ endfor }}
|
||||
|
||||
<div id="conversation-end"></div>
|
||||
|
||||
{{ if $dropping }}
|
||||
<div class="delete-checked">
|
||||
<a href="#" onclick="deleteCheckedItems();return false;"><span class="icon delete"></span><span class="s22 text" onmouseover="imgbright(this);" onmouseout="imgdull(this);">$dropping</span></a>
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 28 KiB |
|
@ -14,9 +14,9 @@
|
|||
height="200"
|
||||
id="svg3403"
|
||||
version="1.1"
|
||||
inkscape:version="0.48+devel r"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="icons.svg"
|
||||
inkscape:export-filename="/var/www3/kisikew.org/portal/pub/fd/view/theme/dispy-dark/icons.png"
|
||||
inkscape:export-filename="/var/www3/kisikew.org/portal/pub/fd/view/theme/dispy/dark/icons.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
|
@ -52,8 +52,8 @@
|
|||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.9403009"
|
||||
inkscape:cx="95.950174"
|
||||
inkscape:cy="115.58345"
|
||||
inkscape:cx="127.81563"
|
||||
inkscape:cy="128.63003"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
|
@ -1127,16 +1127,16 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4319"
|
||||
d="m -44.467884,1107.2152 0,17.7252 1.161165,3.7983 c 1.200046,4.2782 1.065706,4.1105 2.322331,0 l 1.161165,-3.7983 0,-17.7252 z"
|
||||
style="fill:none;stroke:#999999;stroke-width:0.66930836;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:none;stroke:#e6e6e6;stroke-width:0.66930836000000005;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,313.68781)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4321"
|
||||
d="m -44.467884,1124.9404 4.644661,0"
|
||||
style="fill:none;stroke:#999999;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
style="fill:none;stroke:#e6e6e6;stroke-width:0.66930836000000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,313.68781)" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.66930836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
style="fill:none;stroke:#e6e6e6;stroke-width:0.66930836000000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="m -42.239747,1107.2336 0,17.6813"
|
||||
id="path4323"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1146,7 +1146,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4325"
|
||||
d="m -43.348187,1128.4959 c 1.108441,-0.8952 1.929509,-0.3581 2.381097,0.045 -0.328428,1.1191 -1.190549,3.9391 -1.190549,3.9391 z"
|
||||
style="fill:#999999;stroke:#999999;stroke-width:0.66930836;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#999999;stroke:#e6e6e6;stroke-width:0.66930836000000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,313.68781)" />
|
||||
<rect
|
||||
ry="0.42804927"
|
||||
|
@ -1156,7 +1156,7 @@
|
|||
height="1.8614606"
|
||||
width="5.1800866"
|
||||
id="rect4327"
|
||||
style="fill:#999999;fill-opacity:1;stroke:#999999"
|
||||
style="fill:#999999;fill-opacity:1;stroke:#e6e6e6"
|
||||
transform="matrix(0.52823691,0.52823691,-0.52823691,0.52823691,773.22931,313.68781)" />
|
||||
<path
|
||||
style="fill:none;stroke:#e6e6e6;stroke-width:0.66930836;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
|
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
@ -78,16 +78,19 @@ h6{font-size:xx-small;}
|
|||
#login_openid label{width:180px !important;}
|
||||
nav{height:60px;background-color:#1d1f1d;color:#eeeeee;position:relative;padding:20px 20px 10px 95px;}nav a{text-decoration:none;color:#eeeeee;border:0px;}nav a:hover{text-decoration:none;color:#eeeeee;border:0px;}
|
||||
nav #banner{display:block;position:absolute;left:51px;top:25px;}nav #banner #logo-text a{font-size:40px;font-weight:bold;margin-left:3px;}
|
||||
ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeee;background-color:#555753;}ul#user-menu-popup li a:hover{color:#2e2f2e;background-color:#eeeeee;}
|
||||
#site-location{font-weight:bold;font-style:italic;font-size:small;width:30em;position:relative;left:-3.5em;top:3em;}
|
||||
ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:3px 0 0;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeee;background-color:#555753;}ul#user-menu-popup li a:hover{color:#2e2f2e;background-color:#eeeeee;}
|
||||
ul#user-menu-popup li a.nav-sep{border-top:1px solid #2e302e;}
|
||||
nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin:0px 5px 5px;text-indent:50px;background:transparent url(dark/icons.png) 0 0 no-repeat;}
|
||||
#nav-admin-link{background-position:0 -154px;}#nav-admin-link:hover{background-position:-22px -154px;}
|
||||
#nav-apps-link{background-position:0 -66px;}#nav-apps-link:hover{background-position:-22px -66px;}
|
||||
#nav-community-link,#nav-contacts-link{background-position:0 -22px;}#nav-community-link:hover,#nav-contacts-link:hover{background-position:-22px -22px;}
|
||||
#nav-directory-link{background-position:-44px -154px;}#nav-directory-link:hover{background-position:-66px -154px;}
|
||||
#nav-help-link{background-position:0 -110px;}#nav-help-link:hover{background-position:-22px -110px;}
|
||||
#nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;}
|
||||
#nav-intro-link{background-position:0px -190px;}#nav-intro-link:hover{background-position:-44px -190px;}
|
||||
#nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;}
|
||||
#nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;}
|
||||
#nav-manage-link{background-position:0px -22px;}#nav-manage-link:hover{background-position:-22px -22px;}
|
||||
#nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;}
|
||||
#nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;}
|
||||
#nav-notify-link:hover{background-position:-66px -110px;}
|
||||
|
@ -105,14 +108,15 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
|
|||
#notifications{width:170px;height:20px;font-size:small;top:-19px;left:4px;position:absolute;}
|
||||
#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#1d1f1d;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:270px;height:60px;}
|
||||
#nav-buttons{clear:both;list-style:none;padding:0px;margin:0px;height:25px;}#nav-buttons>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
|
||||
#nav-buttons-2{clear:both;list-style:none;padding:0px;margin:0px;left:136px;top:-20px;position:relative;width:6em;height:25px;}#nav-buttons-2>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
|
||||
.floaterflip{display:block;position:fixed;z-index:110;top:56px;right:19px;width:22px;height:22px;overflow:hidden;margin:0px;background:transparent url(dark/icons.png) -190px -60px no-repeat;}
|
||||
.search-box{display:inline-block;margin:5px;position:fixed;right:0px;bottom:0px;z-index:100;background:#1d1f1d;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
|
||||
#search-text,#mini-search-text{background:white;color:#2e2f2e;}
|
||||
#search-text{border:1px solid #eeeeee;margin:5px 0;}
|
||||
#mini-search-text{font-size:8pt;height:14px;width:10em;margin:5px;}
|
||||
#scrollup{position:fixed;right:5px;bottom:40px;z-index:100;}#scrollup a:hover{text-decoration:none;border:0;}
|
||||
#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:80%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
|
||||
#user-menu-label{font-size:small;padding:3px 20px 9px 5px;height:10px;}
|
||||
#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:35%;margin:5px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;top:4px;left:7px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
|
||||
#user-menu-label{font-size:small;padding:0px 20px 10px 5px;height:10px;display:block;}
|
||||
.nav-ajax-update,.nav-ajax-left{width:30px;height:19px;background:transparent url(dark/notifications.png) 0 0 no-repeat;color:#111111;font-weight:bold;font-size:0.8em;padding-top:0.2em;text-align:center;float:left;margin:0 -1px 0 3px;display:block;visibility:hidden;}
|
||||
.nav-ajax-update.show,.nav-ajax-left.show{visibility:visible;}
|
||||
#net-update{background-position:0px 0px;}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -78,16 +78,19 @@ h6{font-size:xx-small;}
|
|||
#login_openid label{width:180px !important;}
|
||||
nav{height:60px;background-color:#2e3436;color:#eeeeec;position:relative;padding:20px 20px 10px 95px;}nav a{text-decoration:none;color:#eeeeec;border:0px;}nav a:hover{text-decoration:none;color:#eeeeec;border:0px;}
|
||||
nav #banner{display:block;position:absolute;left:51px;top:25px;}nav #banner #logo-text a{font-size:40px;font-weight:bold;margin-left:3px;}
|
||||
ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeec;background-color:#555753;}ul#user-menu-popup li a:hover{color:#eeeeec;background-color:#111111;}
|
||||
#site-location{font-weight:bold;font-style:italic;font-size:small;width:30em;position:relative;left:-3.5em;top:3em;}
|
||||
ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:3px 0 0;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeec;background-color:#555753;}ul#user-menu-popup li a:hover{color:#eeeeec;background-color:#111111;}
|
||||
ul#user-menu-popup li a.nav-sep{border-top:1px solid #2e302e;}
|
||||
nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin:0px 5px 5px;text-indent:50px;background:transparent url(light/icons.png) 0 0 no-repeat;}
|
||||
#nav-admin-link{background-position:0 -154px;}#nav-admin-link:hover{background-position:-22px -154px;}
|
||||
#nav-apps-link{background-position:0 -66px;}#nav-apps-link:hover{background-position:-22px -66px;}
|
||||
#nav-community-link,#nav-contacts-link{background-position:0 -22px;}#nav-community-link:hover,#nav-contacts-link:hover{background-position:-22px -22px;}
|
||||
#nav-directory-link{background-position:-44px -154px;}#nav-directory-link:hover{background-position:-66px -154px;}
|
||||
#nav-help-link{background-position:0 -110px;}#nav-help-link:hover{background-position:-22px -110px;}
|
||||
#nav-home-link{background-position:-44px -132px;}#nav-home-link:hover{background-position:-66px -132px;}
|
||||
#nav-intro-link{background-position:0px -190px;}#nav-intro-link:hover{background-position:-44px -190px;}
|
||||
#nav-intro-link{background-position:0px -88px;}#nav-intro-link:hover{background-position:-22px -88px;}
|
||||
#nav-login-link,#nav-logout-link{background-position:0 -88px;}#nav-login-link:hover,#nav-logout-link:hover{background-position:-22px -88px;}
|
||||
#nav-manage-link{background-position:0px -22px;}#nav-manage-link:hover{background-position:-22px -22px;}
|
||||
#nav-messages-link{background-position:-44px -88px;}#nav-messages-link:hover{background-position:-66px -88px;}
|
||||
#nav-notify-link,#nav-notifications-linkmenu{background-position:-44px -110px;}
|
||||
#nav-notify-link:hover{background-position:-66px -110px;}
|
||||
|
@ -105,14 +108,15 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
|
|||
#notifications{width:170px;height:20px;font-size:small;top:-19px;left:4px;position:absolute;}
|
||||
#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#2e3436;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:270px;height:60px;}
|
||||
#nav-buttons{clear:both;list-style:none;padding:0px;margin:0px;height:25px;}#nav-buttons>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
|
||||
#nav-buttons-2{clear:both;list-style:none;padding:0px;margin:0px;left:136px;top:-20px;position:relative;width:6em;height:25px;}#nav-buttons-2>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
|
||||
.floaterflip{display:block;position:fixed;z-index:110;top:56px;right:19px;width:22px;height:22px;overflow:hidden;margin:0px;background:transparent url(light/icons.png) -190px -60px no-repeat;}
|
||||
.search-box{display:inline-block;margin:5px;position:fixed;right:0px;bottom:0px;z-index:100;background:#2e3436;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
|
||||
#search-text,#mini-search-text{background:white;color:#111111;}
|
||||
#search-text{border:1px solid #999999;margin:5px 0;}
|
||||
#mini-search-text{font-size:8pt;height:14px;width:10em;margin:5px;}
|
||||
#scrollup{position:fixed;right:5px;bottom:40px;z-index:100;}#scrollup a:hover{text-decoration:none;border:0;}
|
||||
#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:80%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
|
||||
#user-menu-label{font-size:small;padding:3px 20px 9px 5px;height:10px;}
|
||||
#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:35%;margin:5px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;top:4px;left:7px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
|
||||
#user-menu-label{font-size:small;padding:0px 20px 10px 5px;height:10px;display:block;}
|
||||
.nav-ajax-update,.nav-ajax-left{width:30px;height:19px;background:transparent url(light/notifications.png) 0 0 no-repeat;color:#111111;font-weight:bold;font-size:0.8em;padding-top:0.2em;text-align:center;float:left;margin:0 -1px 0 3px;display:block;visibility:hidden;}
|
||||
.nav-ajax-update.show,.nav-ajax-left.show{visibility:visible;}
|
||||
#net-update{background-position:0px 0px;}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,56 +1,57 @@
|
|||
<nav id="pagenav">
|
||||
|
||||
<span id="banner">$banner</span>
|
||||
<div id="banner">$banner</div>
|
||||
<div id="site-location">$sitelocation</div>
|
||||
|
||||
<a name="top" id="top"></a>
|
||||
<div id="nav-floater">
|
||||
<ul id="nav-buttons">
|
||||
{{ if $nav.login }}
|
||||
<li><a id="nav-login-link" class="nav-login-link $nav.login.2"
|
||||
href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a></li>
|
||||
href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.home }}
|
||||
<li><a id="nav-home-link" class="nav-link $nav.home.2"
|
||||
href="$nav.home.0" title="$nav.home.1">$nav.home.1</a></li>
|
||||
href="$nav.home.0" title="$nav.home.1">$nav.home.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.network }}
|
||||
<li><a id="nav-network-link" class="nav-link $nav.network.2"
|
||||
href="$nav.network.0" title="$nav.network.1">$nav.network.1</a></li>
|
||||
href="$nav.network.0" title="$nav.network.1">$nav.network.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.notifications }}
|
||||
<li><a id="nav-notifications-linkmenu" class="nav-link $nav.notifications.2"
|
||||
href="$nav.notifications.0"
|
||||
rel="#nav-notifications-menu" title="$nav.notifications.1">$nav.notifications.1</a></li>
|
||||
<ul id="nav-notifications-menu" class="menu-popup">
|
||||
<li id="nav-notifications-see-all"><a href="$nav.notifications.all.0">$nav.notifications.all.1</a></li>
|
||||
<li id="nav-notifications-mark-all"><a href="#" onclick="notifyMarkAll(); return false;">$nav.notifications.mark.1</a></li>
|
||||
<li class="empty">$emptynotifications</li>
|
||||
</ul>
|
||||
href="$nav.notifications.0"
|
||||
rel="#nav-notifications-menu" title="$nav.notifications.1">$nav.notifications.1</a></li>
|
||||
<ul id="nav-notifications-menu" class="menu-popup">
|
||||
<li id="nav-notifications-see-all"><a href="$nav.notifications.all.0">$nav.notifications.all.1</a></li>
|
||||
<li id="nav-notifications-mark-all"><a href="#" onclick="notifyMarkAll(); return false;">$nav.notifications.mark.1</a></li>
|
||||
<li class="empty">$emptynotifications</li>
|
||||
</ul>
|
||||
{{ endif }}
|
||||
{{ if $nav.messages }}
|
||||
<li><a id="nav-messages-link" class="nav-link $nav.messages.2"
|
||||
href="$nav.messages.0" title="$nav.messages.1">$nav.messages.1</a></li>
|
||||
href="$nav.messages.0" title="$nav.messages.1">$nav.messages.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.community }}
|
||||
<li><a id="nav-community-link" class="nav-link $nav.community.2"
|
||||
href="$nav.community.0" title="$nav.community.1">$nav.community.1</a></li>
|
||||
href="$nav.community.0" title="$nav.community.1">$nav.community.1</a></li>
|
||||
{{ endif }}
|
||||
<li><a id="nav-directory-link" class="nav-link $nav.directory.2"
|
||||
href="$nav.directory.0" title="$nav.directory.1">$nav.directory.1</a></li>
|
||||
href="$nav.directory.0" title="$nav.directory.1">$nav.directory.1</a></li>
|
||||
<li><a id="nav-search-link" class="nav-link $nav.search.2"
|
||||
href="$nav.search.0" title="$nav.search.1">$nav.search.1</a></li>
|
||||
href="$nav.search.0" title="$nav.search.1">$nav.search.1</a></li>
|
||||
{{ if $nav.apps }}
|
||||
<li><a id="nav-apps-link" class="nav-link $nav.apps.2"
|
||||
href="$nav.apps.0" title="$nav.apps.1">$nav.apps.1</a></li>
|
||||
href="$nav.apps.0" title="$nav.apps.1">$nav.apps.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.help }}
|
||||
<li><a id="nav-help-link" class="nav-link $nav.help.2"
|
||||
href="$nav.help.0" title="$nav.help.1">$nav.help.1</a></li>
|
||||
href="$nav.help.0" title="$nav.help.1">$nav.help.1</a></li>
|
||||
{{ endif }}
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<div id="user-menu">
|
||||
<a id="user-menu-label" onclick="openClose('user-menu-popup'); return false;" href="$nav.home.0">$sitelocation</a>
|
||||
<div id="user-menu">
|
||||
<a id="user-menu-label" onclick="openClose('user-menu-popup'); return false;" href="$nav.home.0"><span class="">User Menu</span></a>
|
||||
<ul id="user-menu-popup"
|
||||
onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')"
|
||||
onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
|
||||
|
@ -63,21 +64,12 @@
|
|||
{{ if $nav.contacts }}
|
||||
<li><a id="nav-contacts-link" class="nav-commlink $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.1">$nav.contacts.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.introductions }}
|
||||
<li><a id="nav-intro-link" class="nav-commlink $nav.introductions.2 $sel.introductions" href="$nav.introductions.0" title="$nav.introductions.3" >$nav.introductions.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.profiles }}
|
||||
<li><a id="nav-profiles-link" class="nav-commlink $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.1">$nav.profiles.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.settings }}
|
||||
<li><a id="nav-settings-link" class="nav-commlink $nav.settings.2" href="$nav.settings.0" title="$nav.settings.1">$nav.settings.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.manage }}
|
||||
<li><a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0" title="$nav.manage.1">$nav.manage.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.admin }}
|
||||
<li><a id="nav-admin-link" class="nav-commlink $nav.admin.2" href="$nav.admin.0" title="$nav.admin.1">$nav.admin.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.login }}
|
||||
<li><a id="nav-login-link" class="nav-commlink $nav.login.2" href="$nav.login.0" title="$nav.login.1">$nav.login.1</a></li>
|
||||
{{ endif }}
|
||||
|
@ -87,12 +79,24 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
<ul id="nav-buttons-2">
|
||||
{{ if $nav.introductions }}
|
||||
<li><a id="nav-intro-link" class="nav-link $nav.introductions.2 $sel.introductions" href="$nav.introductions.0" title="$nav.introductions.3" >$nav.introductions.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.admin }}
|
||||
<li><a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.1">$nav.admin.1</a></li>
|
||||
{{ endif }}
|
||||
{{ if $nav.manage }}
|
||||
<li><a id="nav-manage-link" class="nav-link $nav.manage.2" href="$nav.manage.0" title="$nav.manage.1">$nav.manage.1</a></li>
|
||||
{{ endif }}
|
||||
</ul>
|
||||
|
||||
{{ if $userinfo }}
|
||||
<ul id="nav-user-menu" class="menu-popup">
|
||||
{{ for $nav.usermenu as $usermenu }}
|
||||
<li>
|
||||
<a class="$usermenu.2" href="$usermenu.0" title="$usermenu.3">$usermenu.1</a>
|
||||
</li>
|
||||
<a class="$usermenu.2" href="$usermenu.0" title="$usermenu.3">$usermenu.1</a>
|
||||
</li>
|
||||
{{ endfor }}
|
||||
</ul>
|
||||
{{ endif }}
|
||||
|
@ -110,9 +114,9 @@
|
|||
{{ if $nav.messages }}
|
||||
<a id="mail-update" class="nav-ajax-left" href="$nav.messages.0" title="$nav.messages.1"></a>
|
||||
{{ endif }}
|
||||
{{if $nav.introductions }}
|
||||
<a id="intro-update" class="nav-ajax-left" href="$nav.introductions.0"></a>
|
||||
{{ endif }}
|
||||
{{if $nav.introductions }}
|
||||
<a id="intro-update" class="nav-ajax-left" href="$nav.introductions.0"></a>
|
||||
{{ endif }}
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="floaterflip"></a>
|
||||
|
@ -124,18 +128,18 @@ $langselector
|
|||
|
||||
<div id="scrollup">
|
||||
<a href="#top"><img src="view/theme/dispy/icons/scroll_top.png"
|
||||
alt="back to top" title="Back to top" /></a>
|
||||
alt="back to top" title="Back to top" /></a>
|
||||
</div>
|
||||
|
||||
<div class="search-box">
|
||||
<form method="get" action="$nav.search.0">
|
||||
<input id="mini-search-text" class="nav-menu-search" type="search" placeholder="Search" value="" id="search" name="search" />
|
||||
</form>
|
||||
<form method="get" action="$nav.search.0">
|
||||
<input id="mini-search-text" class="nav-menu-search" type="search" placeholder="Search" value="" id="search" name="search" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<ul id="nav-notifications-template" style="display:none;" rel="template">
|
||||
<li class="{4}">
|
||||
<a href="{0}"><img src="{1}" height="24" width="24" alt="" />{2} <span class="notif-when">{3}</span></a>
|
||||
</li>
|
||||
<li class="{4}">
|
||||
<a href="{0}"><img src="{1}" height="24" width="24" alt="" />{2} <span class="notif-when">{3}</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<a name="$item.id" />
|
||||
<a name="$item.id" ></a>
|
||||
<div class="wall-item-outside-wrapper$item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" >
|
||||
<div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" >
|
||||
<div class="wall-item-info" id="wall-item-info-$item.id">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<a name="$item.id" />
|
||||
<a name="$item.id" ></a>
|
||||
<div class="wall-item-outside-wrapper$item.indent$item.previewing wallwall" id="wall-item-outside-wrapper-$item.id" >
|
||||
<div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" >
|
||||
<div class="wall-item-info wallwall" id="wall-item-info-$item.id">
|
||||
|
@ -88,6 +88,7 @@ class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick
|
|||
<div class="wall-item-wrapper-end"></div>
|
||||
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
|
||||
<div class="wall-item-dislike" id="wall-item-dislike-$item.id">$item.dislike</div>
|
||||
<div class="wall-item-comment-separator"></div>
|
||||
<div class="wall-item-comment-wrapper">
|
||||
$item.comment
|
||||
</div>
|
||||
|
|
|
@ -1608,7 +1608,7 @@ input#dfrn-url {
|
|||
.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: none; }
|
||||
|
||||
|
||||
#block-message, #ignore-message, #archive-message {
|
||||
#block-message, #ignore-message, #archive-message, #lost-contact-message {
|
||||
color: #FF0000;
|
||||
}
|
||||
|
||||
|
@ -3226,3 +3226,7 @@ ul.menu-popup {
|
|||
.autocomplete { color:#000; border:1px solid #999; background:#FFF; cursor:default; text-align:left; max-height:350px; overflow:auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
|
||||
.autocomplete .selected { background:#F0F0F0; }
|
||||
.autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }
|
||||
|
||||
#datebrowse-sidebar select {
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
</div>
|
||||
{{ endfor }}
|
||||
|
||||
<div id="conversation-end"></div>
|
||||
|
||||
{{ if $dropping }}
|
||||
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
|
||||
<div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
{{ for $threads as $thread }}
|
||||
<div id="tread-wrapper-$thread.id" class="tread-wrapper">
|
||||
{{ for $thread.items as $item }}
|
||||
{{if $mode == display}}
|
||||
{{ else }}
|
||||
{{if $item.comment_firstcollapsed}}
|
||||
<div class="hide-comments-outer">
|
||||
<span id="hide-comments-total-$thread.id" class="hide-comments-total">$thread.num_comments</span> <span id="hide-comments-$thread.id" class="hide-comments fakelink" onclick="showHideComments($thread.id);">$thread.hide_text</span>
|
||||
|
@ -8,7 +10,8 @@
|
|||
<div id="collapsed-comments-$thread.id" class="collapsed-comments" style="display: none;">
|
||||
{{endif}}
|
||||
{{if $item.comment_lastcollapsed}}</div>{{endif}}
|
||||
|
||||
{{ endif }}
|
||||
|
||||
{{ if $item.type == tag }}
|
||||
{{ inc wall_item_tag.tpl }}{{ endinc }}
|
||||
{{ else }}
|
||||
|
@ -19,8 +22,26 @@
|
|||
</div>
|
||||
{{ endfor }}
|
||||
|
||||
<div id="conversation-end"></div>
|
||||
|
||||
{{ if $dropping }}
|
||||
<a href="#" onclick="deleteCheckedItems();return false;">
|
||||
<span class="icon s22 delete text">$dropping</span>
|
||||
</a>
|
||||
{{ endif }}
|
||||
|
||||
<script>
|
||||
// jquery color plugin from https://raw.github.com/gist/1891361/17747b50ad87f7a59a14b4e0f38d8f3fb6a18b27/gistfile1.js
|
||||
(function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.curCSS(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={transparent:[255,255,255]}})(jQuery);
|
||||
var colWhite = {backgroundColor:'#EFF0F1'};
|
||||
var colShiny = {backgroundColor:'#FCE94F'};
|
||||
</script>
|
||||
|
||||
{{ if $mode == display }}
|
||||
<script>
|
||||
var id = window.location.pathname.split("/").pop();
|
||||
$(window).scrollTop($('#item-'+id).position().top);
|
||||
$('#item-'+id).animate(colWhite, 1000).animate(colShiny).animate(colWhite, 2000);
|
||||
</script>
|
||||
{{ endif }}
|
||||
|
||||
|
|
|
@ -59,6 +59,8 @@ nav #site-location {
|
|||
-moz-border-radius: 3px;
|
||||
opacity: 0.3;
|
||||
filter:alpha(opacity=30);
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
#events-reminder.birthday-today, #events-reminder.event-today {
|
||||
|
@ -71,6 +73,8 @@ nav #site-location {
|
|||
opacity: 1.0;
|
||||
filter:alpha(opacity=100);
|
||||
box-shadow: 4px 4px 3px 0 #444444;
|
||||
margin-left: 0px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.fc-event-skin {
|
||||
|
@ -88,6 +92,31 @@ nav #site-location {
|
|||
box-shadow: 4px 4px 3px 0 #444444;
|
||||
}
|
||||
|
||||
#datebrowse-sidebar select {
|
||||
margin-left: 25px;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
opacity: 0.3;
|
||||
filter:alpha(opacity=30);
|
||||
}
|
||||
|
||||
#datebrowse-sidebar select:hover {
|
||||
opacity: 1.0;
|
||||
filter:alpha(opacity=100);
|
||||
}
|
||||
|
||||
#posted-date-selector {
|
||||
margin-left: 30px !important;
|
||||
margin-top: 5px !important;
|
||||
}
|
||||
|
||||
|
||||
#posted-date-selector:hover {
|
||||
box-shadow: 4px 4px 3px 0 #444444;
|
||||
margin-left: 25px !important;
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
|
||||
.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .profile-jot-text, .group-selected, .nets-selected, .fileas-selected, #profile-jot-submit, .categories-selected {
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
|
@ -99,6 +128,11 @@ nav #site-location {
|
|||
box-shadow: 4px 4px 3px 0 #444444;
|
||||
}
|
||||
|
||||
#sidebar-page-list .label {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
|
||||
.photo {
|
||||
border: 1px solid #AAAAAA;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
</div>
|
||||
{{ endfor }}
|
||||
|
||||
<div id="conversation-end"></div>
|
||||
|
||||
{{ if $dropping }}
|
||||
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
|
||||
<div id="item-delete-selected-icon" class="icon drophide" title="$dropping" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<a name="$item.id" />
|
||||
<a name="$item.id" ></a>
|
||||
<div class="wall-item-outside-wrapper$item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" >
|
||||
<div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" >
|
||||
<div class="wall-item-info" id="wall-item-info-$item.id">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<a name="$item.id" />
|
||||
<a name="$item.id" ></a>
|
||||
<div class="wall-item-outside-wrapper$item.indent$item.previewing wallwall" id="wall-item-outside-wrapper-$item.id" >
|
||||
<div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" >
|
||||
<div class="wall-item-info wallwall" id="wall-item-info-$item.id">
|
||||
|
@ -77,7 +77,7 @@
|
|||
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
|
||||
<div class="wall-item-dislike" id="wall-item-dislike-$item.id">$item.dislike</div>
|
||||
<div class="wall-item-comment-separator"></div>
|
||||
<div class="wall-item-comment-wrapper" >
|
||||
<div class="wall-item-comment-wrapper">
|
||||
$item.comment
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Reference in a new issue