aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/RedDAV/RedBrowser.php9
-rw-r--r--include/bbcode.php4
-rwxr-xr-xinclude/items.php87
-rw-r--r--include/text.php12
4 files changed, 66 insertions, 46 deletions
diff --git a/include/RedDAV/RedBrowser.php b/include/RedDAV/RedBrowser.php
index 709f6339b..9ea2b9808 100644
--- a/include/RedDAV/RedBrowser.php
+++ b/include/RedDAV/RedBrowser.php
@@ -267,6 +267,15 @@ class RedBrowser extends DAV\Browser\Plugin {
get_app()->page['content'] = $html;
load_pdl(get_app());
+
+ $theme_info_file = "view/theme/" . current_theme() . "/php/theme.php";
+ if (file_exists($theme_info_file)){
+ require_once($theme_info_file);
+ if (function_exists(str_replace('-', '_', current_theme()) . '_init')) {
+ $func = str_replace('-', '_', current_theme()) . '_init';
+ $func(get_app());
+ }
+ }
construct_page(get_app());
}
diff --git a/include/bbcode.php b/include/bbcode.php
index 030a1fb49..33017c011 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -575,6 +575,10 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
if (strpos($Text,'[h6]') !== false) {
$Text = preg_replace("(\[h6\](.*?)\[\/h6\])ism",'<h6>$1</h6>',$Text);
}
+ // Check for table of content
+ if (strpos($Text,'[toc]') !== false) {
+ $Text = preg_replace("/\[toc\]/ism",'<ul id="toc"></ul>',$Text);
+ }
// Check for centered text
if (strpos($Text,'[/center]') !== false) {
$Text = preg_replace("(\[center\](.*?)\[\/center\])ism","<div style=\"text-align:center;\">$1</div>",$Text);
diff --git a/include/items.php b/include/items.php
index 4c533aedc..fb2f2586a 100755
--- a/include/items.php
+++ b/include/items.php
@@ -419,6 +419,9 @@ function post_activity_item($arr) {
$arr['verb'] = ((x($arr,'verb')) ? $arr['verb'] : ACTIVITY_POST);
$arr['obj_type'] = ((x($arr,'obj_type')) ? $arr['obj_type'] : ACTIVITY_OBJ_NOTE);
+ if($is_comment)
+ $arr['obj_type'] = ACTIVITY_OBJ_COMMENT;
+
$arr['allow_cid'] = ((x($arr,'allow_cid')) ? $arr['allow_cid'] : $channel['channel_allow_cid']);
$arr['allow_gid'] = ((x($arr,'allow_gid')) ? $arr['allow_gid'] : $channel['channel_allow_gid']);
@@ -834,6 +837,11 @@ function get_item_elements($x) {
$arr['item_flags'] = 0;
+ if(array_key_exists('flags',$x) && in_array('consensus',$x['flags']))
+ $arr['item_flags'] |= ITEM_CONSENSUS;
+
+
+
if(array_key_exists('flags',$x) && in_array('deleted',$x['flags']))
$arr['item_restrict'] = ITEM_DELETED;
if(array_key_exists('flags',$x) && in_array('hidden',$x['flags']))
@@ -1314,6 +1322,8 @@ function encode_item_flags($item) {
$ret[] = 'thread_parent';
if($item['item_flags'] & ITEM_NSFW)
$ret[] = 'nsfw';
+ if($item['item_flags'] & ITEM_CONSENSUS)
+ $ret[] = 'consensus';
if($item['item_private'])
$ret[] = 'private';
@@ -2019,8 +2029,8 @@ function item_store($arr,$allow_exec = false) {
$arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : '');
$arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : '');
$arr['thr_parent'] = ((x($arr,'thr_parent')) ? notags(trim($arr['thr_parent'])) : $arr['parent_mid']);
- $arr['verb'] = ((x($arr,'verb')) ? notags(trim($arr['verb'])) : '');
- $arr['obj_type'] = ((x($arr,'obj_type')) ? notags(trim($arr['obj_type'])) : '');
+ $arr['verb'] = ((x($arr,'verb')) ? notags(trim($arr['verb'])) : ACTIVITY_POST);
+ $arr['obj_type'] = ((x($arr,'obj_type')) ? notags(trim($arr['obj_type'])) : ACTIVITY_OBJ_NOTE);
$arr['object'] = ((x($arr,'object')) ? trim($arr['object']) : '');
$arr['tgt_type'] = ((x($arr,'tgt_type')) ? notags(trim($arr['tgt_type'])) : '');
$arr['target'] = ((x($arr,'target')) ? trim($arr['target']) : '');
@@ -2084,6 +2094,8 @@ function item_store($arr,$allow_exec = false) {
return $ret;
}
+ if($arr['obj_type'] == ACTIVITY_OBJ_NOTE)
+ $arr['obj_type'] = ACTIVITY_OBJ_COMMENT;
// is the new message multi-level threaded?
// even though we don't support it now, preserve the info
@@ -2673,7 +2685,7 @@ function tag_deliver($uid,$item_id) {
* Fetch stuff we need - a channel and an item
*/
- $u = q("select * from channel where channel_id = %d limit 1",
+ $u = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1",
intval($uid)
);
if(! $u)
@@ -2811,7 +2823,7 @@ function tag_deliver($uid,$item_id) {
if($terms)
logger('tag_deliver: post mentions: ' . print_r($terms,true), LOGGER_DATA);
- $link = normalise_link($a->get_baseurl() . '/channel/' . $u[0]['channel_address']);
+ $link = normalise_link($u[0]['xchan_url']);
if($terms) {
foreach($terms as $term) {
@@ -2952,7 +2964,7 @@ function tgroup_check($uid,$item) {
if(! perm_is_allowed($uid,$item['author_xchan'],'tag_deliver'))
return false;
- $u = q("select * from channel where channel_id = %d limit 1",
+ $u = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1",
intval($uid)
);
@@ -2964,7 +2976,7 @@ function tgroup_check($uid,$item) {
if($terms)
logger('tgroup_check: post mentions: ' . print_r($terms,true), LOGGER_DATA);
- $link = normalise_link($a->get_baseurl() . '/channel/' . $u[0]['channel_address']);
+ $link = normalise_link($u[0]['xchan_url']);
if($terms) {
foreach($terms as $term) {
@@ -3939,7 +3951,7 @@ function drop_items($items) {
// $stage = 1 => set deleted flag on the item and perform intial notifications
// $stage = 2 => perform low level delete at a later stage
-function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
+function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = false) {
$a = get_app();
@@ -3959,6 +3971,8 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
$item = $r[0];
+ $linked_item = (($item['resource_id']) ? true : false);
+
$ok_to_delete = false;
// system deletion
@@ -3980,10 +3994,11 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
// hook calls a remote process which loops. We'll delete it properly in a second.
$r = q("UPDATE item SET item_restrict = ( item_restrict | %d ) WHERE id = %d",
- intval(ITEM_DELETED),
+ intval(($linked_item && ! $force) ? ITEM_HIDDEN : ITEM_DELETED),
intval($item['id'])
);
+
$arr = array('item' => $item, 'interactive' => $interactive, 'stage' => $stage);
call_hooks('drop_item', $arr );
@@ -3995,10 +4010,10 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
);
if($items) {
foreach($items as $i)
- delete_item_lowlevel($i,$stage);
+ delete_item_lowlevel($i,$stage,$force);
}
else
- delete_item_lowlevel($item,$stage);
+ delete_item_lowlevel($item,$stage,$force);
if(! $interactive)
return 1;
@@ -4030,8 +4045,9 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) {
// It merely destroys all resources associated with an item.
// Please do not use without a suitable wrapper.
-function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL) {
+function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL,$force = false) {
+ $linked_item = (($item['resource_id']) ? true : false);
switch($stage) {
case DROPITEM_PHASE2:
@@ -4047,7 +4063,7 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL) {
case DROPITEM_PHASE1:
$r = q("UPDATE item SET item_restrict = ( item_restrict | %d ),
changed = '%s', edited = '%s' WHERE id = %d",
- intval(ITEM_DELETED),
+ intval(($linked_item && ! $force) ? ITEM_HIDDEN : ITEM_DELETED),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
intval($item['id'])
@@ -4056,13 +4072,24 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL) {
case DROPITEM_NORMAL:
default:
- $r = q("UPDATE item SET item_restrict = ( item_restrict | %d ), body = '', title = '',
- changed = '%s', edited = '%s' WHERE id = %d",
- intval(ITEM_DELETED),
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- intval($item['id'])
- );
+ if($linked_item && ! $force) {
+ $r = q("UPDATE item SET item_restrict = ( item_restrict | %d ),
+ changed = '%s', edited = '%s' WHERE id = %d",
+ intval(ITEM_HIDDEN),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ intval($item['id'])
+ );
+ }
+ else {
+ $r = q("UPDATE item SET item_restrict = ( item_restrict | %d ), body = '', title = '',
+ changed = '%s', edited = '%s' WHERE id = %d",
+ intval(ITEM_DELETED),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ intval($item['id'])
+ );
+ }
break;
}
@@ -4074,25 +4101,6 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL) {
intval($item['uid'])
);
- // If item is a link to a photo/event resource, nuke all the associated photos/events
- // This only applies to photos uploaded from the photos page. Photos inserted into a post do not
- // generate a resource_id and therefore aren't intimately linked to the item.
-
- if(strlen($item['resource_id'])) {
- if($item['resource_type'] === 'event') {
- q("delete from event where event_hash = '%s' and uid = %d",
- dbesc($item['resource_id']),
- intval($item['uid'])
- );
- }
- elseif($item['resource_type'] === 'photo') {
- q("DELETE FROM `photo` WHERE `resource_id` = '%s' AND `uid` = %d ",
- dbesc($item['resource_id']),
- intval($item['uid'])
- );
- }
- }
-
// network deletion request. Keep the message structure so that we can deliver delete notifications.
// Come back after several days (or perhaps a month) to do the lowlevel delete (DROPITEM_PHASE2).
@@ -4115,8 +4123,7 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL) {
intval(TERM_OBJ_POST)
);
-// FIXME remove notifications for this item
-
+ // FIXME remove notifications for this item
return true;
}
diff --git a/include/text.php b/include/text.php
index 6b579e35c..c130a9b8a 100644
--- a/include/text.php
+++ b/include/text.php
@@ -92,10 +92,10 @@ function z_input_filter($channel_id,$s,$type = 'text/bbcode') {
return escape_tags($s);
if($type == 'text/plain')
return escape_tags($s);
- $r = q("select account_id, account_roles from account left join channel on channel_account_id = account_id where channel_id = %d limit 1",
+ $r = q("select account_id, account_roles, channel_pageflags from account left join channel on channel_account_id = account_id where channel_id = %d limit 1",
intval($channel_id)
);
- if($r && ($r[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE)) {
+ if($r && (($r[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE) || ($r[0]['channel_pageflags'] & PAGE_ALLOWCODE))) {
if(local_user() && (get_account_id() == $r[0]['account_id'])) {
return $s;
}
@@ -620,7 +620,7 @@ function get_tags($s) {
// Match full names against @tags including the space between first and last
// We will look these up afterward to see if they are full names or not recognisable.
- if(preg_match_all('/(@[^ \x0D\x0A,:?]+ [^ \x0D\x0A@,:?]+)([ \x0D\x0A@,:?]|$)/',$s,$match)) {
+ if(preg_match_all('/(@[^ \x0D\x0A,:?\[]+ [^ \x0D\x0A@,:?\[]+)([ \x0D\x0A@,:?\[]|$)/',$s,$match)) {
foreach($match[1] as $mtch) {
if(strstr($mtch,"]")) {
// we might be inside a bbcode color tag - leave it alone
@@ -636,7 +636,7 @@ function get_tags($s) {
// Otherwise pull out single word tags. These can be @nickname, @first_last
// and #hash tags.
- if(preg_match_all('/([@#][^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/',$s,$match)) {
+ if(preg_match_all('/([@#][^ \x0D\x0A,;:?\[]+)([ \x0D\x0A,;:?\[]|$)/',$s,$match)) {
foreach($match[1] as $mtch) {
if(strstr($mtch,"]")) {
// we might be inside a bbcode color tag - leave it alone
@@ -1584,13 +1584,13 @@ function mimetype_select($channel_id, $current = 'text/bbcode') {
'text/plain'
);
- $r = q("select account_id, account_roles from account left join channel on account_id = channel_account_id where
+ $r = q("select account_id, account_roles, channel_pageflags from account left join channel on account_id = channel_account_id where
channel_id = %d limit 1",
intval($channel_id)
);
if($r) {
- if($r[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE) {
+ if(($r[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE) || ($r[0]['channel_pageflags'] & PAGE_ALLOWCODE)) {
if(local_user() && get_account_id() == $r[0]['account_id'])
$x[] = 'application/x-php';
}