aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/RedDAV/RedBrowser.php95
-rw-r--r--include/enotify.php1
-rwxr-xr-xinclude/items.php53
-rw-r--r--include/onepoll.php2
-rw-r--r--include/poller.php2
-rw-r--r--include/socgraph.php14
-rw-r--r--include/text.php71
-rw-r--r--include/zot.php73
8 files changed, 177 insertions, 134 deletions
diff --git a/include/RedDAV/RedBrowser.php b/include/RedDAV/RedBrowser.php
index 5642c3f86..e893d6ebd 100644
--- a/include/RedDAV/RedBrowser.php
+++ b/include/RedDAV/RedBrowser.php
@@ -82,7 +82,7 @@ class RedBrowser extends DAV\Browser\Plugin {
date_default_timezone_set($this->auth->getTimezone());
require_once('include/conversation.php');
-
+ require_once('include/text.php');
if ($this->auth->owner_nick) {
$html = profile_tabs(get_app(), (($is_owner) ? true : false), $this->auth->owner_nick);
}
@@ -208,9 +208,9 @@ class RedBrowser extends DAV\Browser\Plugin {
$ft['displayName'] = $displayName;
$ft['type'] = $type;
$ft['size'] = $size;
- $ft['sizeFormatted'] = $this->userReadableSize($size);
+ $ft['sizeFormatted'] = userReadableSize($size);
$ft['lastmodified'] = (($lastmodified) ? datetime_convert('UTC', date_default_timezone_get(), $lastmodified) : '');
- $ft['iconFromType'] = $this->getIconFromType($type);
+ $ft['iconFromType'] = getIconFromType($type);
$f[] = $ft;
}
@@ -224,13 +224,13 @@ class RedBrowser extends DAV\Browser\Plugin {
if ($used) {
$quotaDesc = t('%1$s used');
$quotaDesc = sprintf($quotaDesc,
- $this->userReadableSize($used));
+ userReadableSize($used));
}
if ($limit && $used) {
$quotaDesc = t('%1$s used of %2$s (%3$s%)');
$quotaDesc = sprintf($quotaDesc,
- $this->userReadableSize($used),
- $this->userReadableSize($limit),
+ userReadableSize($used),
+ userReadableSize($limit),
round($used / $limit, 1));
}
@@ -283,29 +283,6 @@ class RedBrowser extends DAV\Browser\Plugin {
}
/**
- * @brief Returns a human readable formatted string for filesizes.
- *
- * Don't we need such a functionality in other places, too?
- *
- * @param int $size filesize in bytes
- * @return string
- */
- function userReadableSize($size) {
- $ret = "";
- if (is_numeric($size)) {
- $incr = 0;
- $k = 1024;
- $unit = array('bytes', 'KB', 'MB', 'GB', 'TB', 'PB');
- while (($size / $k) >= 1){
- $incr++;
- $size = round($size / $k, 2);
- }
- $ret = $size . " " . $unit[$incr];
- }
- return $ret;
- }
-
- /**
* @brief Creates a form to add new folders and upload files.
*
* @param \Sabre\DAV\INode $node
@@ -340,65 +317,6 @@ class RedBrowser extends DAV\Browser\Plugin {
}
/**
- * @brief returns icon name for use with e.g. font-awesome based on mime-type
- *
- * @param string $type
- * @return string
- */
- protected function getIconFromType($type) {
- $iconMap = array(
- //Folder
- t('Collection') => 'icon-folder-close',
-
- //Common file
- 'application/octet-stream' => 'icon-file-alt',
-
- //Text
- 'text/plain' => 'icon-file-text-alt',
- 'application/msword' => 'icon-file-text-alt',
- 'application/pdf' => 'icon-file-text-alt',
- 'application/vnd.oasis.opendocument.text' => 'icon-file-text-alt',
- 'application/epub+zip' => 'icon-book',
-
- //Spreadsheet
- 'application/vnd.oasis.opendocument.spreadsheet' => 'icon-table',
- 'application/vnd.ms-excel' => 'icon-table',
-
- //Image
- 'image/jpeg' => 'icon-picture',
- 'image/png' => 'icon-picture',
- 'image/gif' => 'icon-picture',
- 'image/svg+xml' => 'icon-picture',
-
- //Archive
- 'application/zip' => 'icon-archive',
- 'application/x-rar-compressed' => 'icon-archive',
-
- //Audio
- 'audio/mpeg' => 'icon-music',
- 'audio/wav' => 'icon-music',
- 'application/ogg' => 'icon-music',
- 'audio/ogg' => 'icon-music',
- 'audio/webm' => 'icon-music',
- 'audio/mp4' => 'icon-music',
-
- //Video
- 'video/quicktime' => 'icon-film',
- 'video/webm' => 'icon-film',
- 'video/mp4' => 'icon-film'
- );
-
- $iconFromType = 'icon-file-alt';
-
- if (array_key_exists($type, $iconMap))
- {
- $iconFromType = $iconMap[$type];
- }
-
- return $iconFromType;
- }
-
- /**
* @brief Return the hash of an attachment.
*
* Given the owner, the parent folder and and attach name get the attachment
@@ -412,6 +330,7 @@ class RedBrowser extends DAV\Browser\Plugin {
* The name of the attachment
* @return string
*/
+
protected function findAttachHash($owner, $parentHash, $attachName) {
$r = q("SELECT hash FROM attach WHERE uid = %d AND folder = '%s' AND filename = '%s' ORDER BY edited DESC LIMIT 1",
intval($owner),
diff --git a/include/enotify.php b/include/enotify.php
index 34552cc36..77b84d373 100644
--- a/include/enotify.php
+++ b/include/enotify.php
@@ -333,6 +333,7 @@ function notification($params) {
$datarray = array();
$datarray['hash'] = $hash;
+ $datarray['sender_hash'] = $sender['xchan_hash'];
$datarray['name'] = $sender['xchan_name'];
$datarray['url'] = $sender['xchan_url'];
$datarray['photo'] = $sender['xchan_photo_s'];
diff --git a/include/items.php b/include/items.php
index 21025f76f..916838f3f 100755
--- a/include/items.php
+++ b/include/items.php
@@ -2181,6 +2181,20 @@ function item_store($arr,$allow_exec = false) {
unset($arr['term']);
}
+ if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid) || strlen($public_policy))
+ $private = 1;
+ else
+ $private = $arr['item_private'];
+
+ $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['public_policy'] = $public_policy;
+ $arr['item_private'] = $private;
+ $arr['comments_closed'] = $comments_closed;
+
logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
dbesc_array($arr);
@@ -2198,7 +2212,6 @@ function item_store($arr,$allow_exec = false) {
intval($arr['uid'])
);
-
if($r && count($r)) {
$current_post = $r[0]['id'];
$arr = $r[0]; // This will gives us a fresh copy of what's now in the DB and undo the db escaping, which really messes up the notifications
@@ -2218,40 +2231,14 @@ function item_store($arr,$allow_exec = false) {
);
}
- if((! $parent_id) || ($arr['parent_mid'] === $arr['mid']))
- $parent_id = $current_post;
-
- if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid) || strlen($public_policy))
- $private = 1;
- else
- $private = $arr['item_private'];
+ $arr['id'] = $current_post;
- // Set parent id - and also make sure to inherit the parent's ACL's.
-
- $r = q("UPDATE item SET parent = %d, allow_cid = '%s', allow_gid = '%s',
- deny_cid = '%s', deny_gid = '%s', public_policy = '%s', item_private = %d, comments_closed = '%s'
- WHERE id = %d",
- intval($parent_id),
- dbesc($allow_cid),
- dbesc($allow_gid),
- dbesc($deny_cid),
- dbesc($deny_gid),
- dbesc($public_policy),
- intval($private),
- dbesc($comments_closed),
- intval($current_post)
- );
+ if(! intval($r[0]['parent'])) {
+ $x = q("update item set parent = id where id = %d",
+ intval($r[0]['id'])
+ );
+ }
- // These are probably redundant now that we've queried the just stored 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['public_policy'] = $public_policy;
- $arr['item_private'] = $private;
- $arr['comments_closed'] = $comments_closed;
// Store taxonomy
diff --git a/include/onepoll.php b/include/onepoll.php
index 095edd095..ee90fbdb1 100644
--- a/include/onepoll.php
+++ b/include/onepoll.php
@@ -145,7 +145,7 @@ function onepoll_run($argv, $argc){
if($contact['xchan_connurl']) {
$r = q("SELECT xlink_id from xlink
- where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s limit 1",
+ where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s and xlink_static = 0 limit 1",
intval($contact['xchan_hash']),
db_utcnow(), db_quoteinterval('1 DAY')
);
diff --git a/include/poller.php b/include/poller.php
index b655259a4..b21919b3d 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -159,7 +159,7 @@ function poller_run($argv, $argc){
// get rid of really old poco records
- q("delete from xlink where xlink_updated < %s - INTERVAL %s",
+ q("delete from xlink where xlink_updated < %s - INTERVAL %s and xlink_static = 0 ",
db_utcnow(), db_quoteinterval('14 DAY')
);
diff --git a/include/socgraph.php b/include/socgraph.php
index ae135b2a8..507f9bb36 100644
--- a/include/socgraph.php
+++ b/include/socgraph.php
@@ -186,13 +186,13 @@ function poco_load($xchan = '',$url = null) {
$total ++;
- $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' limit 1",
+ $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 0 limit 1",
dbesc($xchan),
dbesc($hash)
);
if(! $r) {
- q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_updated ) values ( '%s', '%s', %d, '%s', '%s' ) ",
+ q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_updated, xlink_static ) values ( '%s', '%s', %d, '%s', '%s', 0 ) ",
dbesc($xchan),
dbesc($hash),
intval($rating),
@@ -211,7 +211,7 @@ function poco_load($xchan = '',$url = null) {
}
logger("poco_load: loaded $total entries",LOGGER_DEBUG);
- q("delete from xlink where xlink_xchan = '%s' and xlink_updated < %s - INTERVAL %s",
+ q("delete from xlink where xlink_xchan = '%s' and xlink_updated < %s - INTERVAL %s and xlink_static = 0",
dbesc($xchan),
db_utcnow(), db_quoteinterval('2 DAY')
);
@@ -222,7 +222,7 @@ function poco_load($xchan = '',$url = null) {
function count_common_friends($uid,$xchan) {
- $r = q("SELECT count(xlink_id) as total from xlink where xlink_xchan = '%s' and xlink_link in
+ $r = q("SELECT count(xlink_id) as total from xlink where xlink_xchan = '%s' and xlink_static = 0 and xlink_link in
(select abook_xchan from abook where abook_xchan != '%s' and abook_channel = %d and abook_flags = 0 )",
dbesc($xchan),
dbesc($xchan),
@@ -243,7 +243,7 @@ function common_friends($uid,$xchan,$start = 0,$limit=100000000,$shuffle = false
else
$sql_extra = " order by xchan_name asc ";
- $r = q("SELECT * from xchan left join xlink on xlink_link = xchan_hash where xlink_xchan = '%s' and xlink_link in
+ $r = q("SELECT * from xchan left join xlink on xlink_link = xchan_hash where xlink_xchan = '%s' and xlink_static = 0 and xlink_link in
(select abook_xchan from abook where abook_xchan != '%s' and abook_channel = %d and abook_flags = 0 ) $sql_extra limit %d offset %d",
dbesc($xchan),
dbesc($xchan),
@@ -342,6 +342,7 @@ function suggestion_query($uid, $myxchan, $start = 0, $limit = 80) {
and xlink_xchan != ''
and xchan_hidden = 0
and xchan_deleted = 0
+ and xlink_static = 0
group by xchan_hash order by total desc limit %d offset %d ",
intval($uid),
intval($uid),
@@ -360,6 +361,7 @@ function suggestion_query($uid, $myxchan, $start = 0, $limit = 80) {
and not xlink_link in ( select xchan from xign where uid = %d )
and xchan_hidden = 0
and xchan_deleted = 0
+ and xlink_static = 0
group by xchan_hash order by total desc limit %d offset %d ",
intval($uid),
intval($uid),
@@ -401,7 +403,7 @@ function update_suggestions() {
// the targets may have changed their preferences and don't want to be suggested - and they
// may have simply gone away.
- $r = q("delete from xlink where xlink_xchan = '' and xlink_updated < %s - INTERVAL %s",
+ $r = q("delete from xlink where xlink_xchan = '' and xlink_updated < %s - INTERVAL %s and xlink_static = 0",
db_utcnow(), db_quoteinterval('7 DAY')
);
diff --git a/include/text.php b/include/text.php
index 2aa270f3b..9a13e5e72 100644
--- a/include/text.php
+++ b/include/text.php
@@ -2377,3 +2377,74 @@ function linkify_tags($a, &$body, $uid) {
return $results;
}
+/**
+ * @brief returns icon name for use with e.g. font-awesome based on mime-type
+ *
+ * @param string $type
+ * @return string
+ */
+function getIconFromType($type) {
+ $iconMap = array(
+ //Folder
+ t('Collection') => 'icon-folder-close',
+ //Common file
+ 'application/octet-stream' => 'icon-file-alt',
+ //Text
+ 'text/plain' => 'icon-file-text-alt',
+ 'application/msword' => 'icon-file-text-alt',
+ 'application/pdf' => 'icon-file-text-alt',
+ 'application/vnd.oasis.opendocument.text' => 'icon-file-text-alt',
+ 'application/epub+zip' => 'icon-book',
+ //Spreadsheet
+ 'application/vnd.oasis.opendocument.spreadsheet' => 'icon-table',
+ 'application/vnd.ms-excel' => 'icon-table',
+ //Image
+ 'image/jpeg' => 'icon-picture',
+ 'image/png' => 'icon-picture',
+ 'image/gif' => 'icon-picture',
+ 'image/svg+xml' => 'icon-picture',
+ //Archive
+ 'application/zip' => 'icon-archive',
+ 'application/x-rar-compressed' => 'icon-archive',
+ //Audio
+ 'audio/mpeg' => 'icon-music',
+ 'audio/wav' => 'icon-music',
+ 'application/ogg' => 'icon-music',
+ 'audio/ogg' => 'icon-music',
+ 'audio/webm' => 'icon-music',
+ 'audio/mp4' => 'icon-music',
+ //Video
+ 'video/quicktime' => 'icon-film',
+ 'video/webm' => 'icon-film',
+ 'video/mp4' => 'icon-film'
+ );
+
+ $iconFromType = 'icon-file-alt';
+
+ if (array_key_exists($type, $iconMap)) {
+ $iconFromType = $iconMap[$type];
+ }
+
+ return $iconFromType;
+}
+
+/**
+ * @brief Returns a human readable formatted string for filesizes.
+ *
+ * @param int $size filesize in bytes
+ * @return string
+ */
+function userReadableSize($size) {
+ $ret = "";
+ if (is_numeric($size)) {
+ $incr = 0;
+ $k = 1024;
+ $unit = array('bytes', 'KB', 'MB', 'GB', 'TB', 'PB');
+ while (($size / $k) >= 1){
+ $incr++;
+ $size = round($size / $k, 2);
+ }
+ $ret = $size . " " . $unit[$incr];
+ }
+ return $ret;
+}
diff --git a/include/zot.php b/include/zot.php
index d8b9a1485..7bdde836f 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -1078,6 +1078,12 @@ function zot_import($arr, $sender_url) {
$i['notify']['sender']['hash'] = make_xchan_hash($i['notify']['sender']['guid'],$i['notify']['sender']['guid_sig']);
$deliveries = null;
+ if(array_key_exists('message',$i) && array_key_exists('type',$i['message']) && $i['message']['type'] === 'rating') {
+ // rating messages are processed only by directory servers
+ logger('Rating received: ' . print_r($arr,true), LOGGER_DATA);
+ $result = process_rating_delivery($i['notify']['sender'],$arr);
+ }
+
if(array_key_exists('recipients',$i['notify']) && count($i['notify']['recipients'])) {
logger('specific recipients');
$recip_arr = array();
@@ -1097,7 +1103,8 @@ function zot_import($arr, $sender_url) {
// It's a specifically targetted post. If we were sent a public_scope hint (likely),
// get rid of it so that it doesn't get stored and cause trouble.
- if(($i) && is_array($i) && array_key_exists('message',$i) && is_array($i['message']) && array_key_exists('public_scope',$i['message']))
+ if(($i) && is_array($i) && array_key_exists('message',$i) && is_array($i['message'])
+ && $i['message']['type'] === 'activity' && array_key_exists('public_scope',$i['message']))
unset($i['message']['public_scope']);
$deliveries = $r;
@@ -1106,7 +1113,7 @@ function zot_import($arr, $sender_url) {
}
else {
- if(($i['message']) && (array_key_exists('flags',$i['message'])) && (in_array('private',$i['message']['flags']))) {
+ if(($i['message']) && (array_key_exists('flags',$i['message'])) && (in_array('private',$i['message']['flags'])) && $i['message']['type'] === 'activity') {
if(array_key_exists('public_scope',$i['message']) && $i['message']['public_scope'] === 'public') {
// This should not happen but until we can stop it...
logger('private message was delivered with no recipients.');
@@ -1197,6 +1204,7 @@ function zot_import($arr, $sender_url) {
$result = process_profile_delivery($i['notify']['sender'],$arr,$deliveries);
}
+
elseif($i['message']['type'] === 'channel_sync') {
// $arr = get_channelsync_elements($i['message']);
@@ -1456,7 +1464,7 @@ function process_delivery($sender,$arr,$deliveries,$relay,$public = false,$reque
// As a side effect we will also do a preliminary check that we have the top-level-post, otherwise
// processing it is pointless.
- $r = q("select route from item where mid = '%s' and uid = %d limit 1",
+ $r = q("select route, id from item where mid = '%s' and uid = %d limit 1",
dbesc($arr['parent_mid']),
intval($channel['channel_id'])
);
@@ -1493,14 +1501,34 @@ function process_delivery($sender,$arr,$deliveries,$relay,$public = false,$reque
// going downstream check that we have the same upstream provider that
// sent it to us originally. Ignore it if it came from another source
- // (with potentially different permissions)
+ // (with potentially different permissions).
+ // only compare the last hop since it could have arrived at the last location any number of ways.
+ // Always accept empty routes.
+
+ $existing_route = explode(',', $r[0]['route']);
+ $routes = count($existing_route);
+ if($routes) {
+ $last_hop = array_pop($existing_route);
+ $last_prior_route = implode(',',$existing_route);
+ }
+ else {
+ $last_hop = '';
+ $last_prior_route = '';
+ }
$current_route = (($arr['route']) ? $arr['route'] . ',' : '') . $sender['hash'];
- if($r[0]['route'] != $current_route) {
+ if($last_hop && $last_hop != $sender['hash'] && $sender['hash'] != 'undefined') {
+ logger('comment route mismatch: parent route = ' . $r[0]['route'] . ' expected = ' . $current_route, LOGGER_DEBUG);
+ logger('comment route mismatch: parent msg = ' . $r[0]['id'],LOGGER_DEBUG);
$result[] = array($d['hash'],'comment route mismatch',$channel['channel_name'] . ' <' . $channel['channel_address'] . '@' . get_app()->get_hostname() . '>',$arr['mid']);
continue;
}
+
+ // we'll add sender['hash'] onto this when we deliver it. $last_prior_route now has the previously stored route
+ // *except* for the sender['hash'] which would've been the last hop before it got to us.
+
+ $arr['route'] = $last_prior_route;
}
}
@@ -1750,6 +1778,41 @@ function process_mail_delivery($sender,$arr,$deliveries) {
return $result;
}
+function process_rating_delivery($sender,$arr) {
+
+ $dirmode = intval(get_config('system','directory_mode'));
+ if($dirmode == DIRECTORY_MODE_NORMAL)
+ return;
+
+ if(! $arr['target'])
+ return;
+
+ $r = q("select * from xlink where xlink_xchan = '%s' and xlink_target = '%s' limit 1",
+ dbesc($sender['hash']),
+ dbesc($arr['target'])
+ );
+ if($r) {
+ $x = q("update xlink set xlink_rating = %d, xlink_rating_text = '%s', xlink_updated = '%s' where xlink_id = %d",
+ intval($arr['rating']),
+ intval($arr['rating_text']),
+ dbesc(datetime_convert()),
+ intval($r[0]['xlink_id'])
+ );
+ }
+ else {
+ $x = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_updated, xlink_static )
+ values( '%s', '%s', %d, '%s', '%s', 1 ) ",
+ dbesc($sender['hash']),
+ dbesc($arr['target']),
+ intval($arr['rating']),
+ intval($arr['rating_text']),
+ dbesc(datetime_convert())
+ );
+ }
+ return;
+}
+
+
function process_profile_delivery($sender,$arr,$deliveries) {
logger('process_profile_delivery', LOGGER_DEBUG);