diff options
-rwxr-xr-x | boot.php | 2 | ||||
-rw-r--r-- | include/bookmarks.php | 53 | ||||
-rwxr-xr-x | include/items.php | 15 | ||||
-rw-r--r-- | include/menu.php | 27 | ||||
-rw-r--r-- | include/permissions.php | 2 | ||||
-rw-r--r-- | mod/bookmarks.php | 40 | ||||
-rw-r--r-- | mod/parse_url.php | 2 |
7 files changed, 126 insertions, 15 deletions
@@ -270,7 +270,7 @@ define ( 'PERMS_W_STORAGE', 0x02000); define ( 'PERMS_R_PAGES', 0x04000); define ( 'PERMS_W_PAGES', 0x08000); define ( 'PERMS_A_REPUBLISH', 0x10000); -define ( 'PERMS_A_BOOMARK', 0x20000); +define ( 'PERMS_A_BOOKMARK', 0x20000); // General channel permissions diff --git a/include/bookmarks.php b/include/bookmarks.php new file mode 100644 index 000000000..62ec9fcab --- /dev/null +++ b/include/bookmarks.php @@ -0,0 +1,53 @@ +<?php /** @file */ + +require_once('include/menu.php'); + +function bookmark_add($channel,$sender,$taxonomy,$private) { + + $iarr = array(); + $channel_id = $channel['channel_id']; + + if($private) + $iarr['contact_allow'] = array($channel['channel_hash']); + $iarr['mitem_link'] = $taxonomy['url']; + $iarr['mitem_desc'] = $taxonomy['term']; + $iarr['mitem_flags'] = 0; + + $m = @parse_url($taxonomy['url']); + $zrl = false; + if($m['host']) { + $r = q("select hubloc_url from hubloc where hubloc_host = '%s' limit 1", + dbesc($m['host']) + ); + if($r) + $zrl = true; + } + + if($zrl) + $iarr['mitem_flags'] |= MENU_ITEM_ZID; + + $arr = array(); + $arr['menu_name'] = substr($sender['xchan_hash'],0,16) . ' ' . $sender['xchan_name']; + $arr['menu_desc'] = sprintf( t('%1$s\'s bookmarks'), $sender['xchan_name']); + $arr['menu_flags'] = MENU_SYSTEM|MENU_BOOKMARK; + $arr['menu_channel_id'] = $channel_id; + + $x = menu_list($arr['menu_channel_id'],$arr['menu_name'],$arr['menu_flags']); + if($x) + $menu_id = $x[0]['menu_id']; + else + $menu_id = menu_create($arr); + if(! $menu_id) { + logger('bookmark_add: unable to create menu ' . $arr['menu_name']); + return; + } + + $r = q("select * from menu_item where mitem_link = '%s' and mitem_menu_id = %d and mitem_channel_id = %d limit 1", + dbesc($iarr['mitem_link']), + intval($menu_id), + intval($channel_id) + ); + if(! $r) + $r = menu_add_item($menu_id,$channel_id,$iarr); + return $r; +}
\ No newline at end of file diff --git a/include/items.php b/include/items.php index 7b11a1c3c..860d714d1 100755 --- a/include/items.php +++ b/include/items.php @@ -2169,6 +2169,21 @@ function tag_deliver($uid,$item_id) { $item = $i[0]; + + $terms = get_terms_oftype($item['term'],TERM_BOOKMARK); + + if($terms && (! $i[0]['item_restrict'])) { + logger('tag_deliver: found bookmark'); + if(perm_is_allowed($u[0]['channel_id'],$i[0]['author_xchan'],'bookmark') && ($i[0]['author_xchan'] != $u[0]['channel_hash'])) { + require_once('include/bookmarks.php'); + require_once('include/Contact.php'); + $s = channelx_by_hash($i[0]['author_xchan']); + foreach($terms as $t) { + bookmark_add($u[0],$s[0],$t,$i[0]['item_private']); + } + } + } + if(($item['source_xchan']) && ($item['item_flags'] & ITEM_UPLINK) && ($item['item_flags'] & ITEM_THREAD_TOP) && ($item['edited'] != $item['created'])) { // this is an update to a post which was already processed by us and has a second delivery chain // Just start the second delivery chain to deliver the updated post diff --git a/include/menu.php b/include/menu.php index 7522f69a3..e5bd4a680 100644 --- a/include/menu.php +++ b/include/menu.php @@ -26,11 +26,12 @@ function menu_fetch($name,$uid,$observer_xchan) { function menu_render($menu) { if(! $menu) return ''; + for($x = 0; $x < count($menu['items']); $x ++) - if($menu['items']['mitem_flags'] & MENU_ITEM_ZID) - $menu['items']['mitem_link'] = zid($menu['items']['mitem_link']); - if($menu['items']['mitem_flags'] & MENU_ITEM_NEWWIN) - $menu['items']['newwin'] = '1'; + if($menu['items'][$x]['mitem_flags'] & MENU_ITEM_ZID) + $menu['items'][$x]['mitem_link'] = zid($menu['items'][$x]['mitem_link']); + if($menu['items'][$x]['mitem_flags'] & MENU_ITEM_NEWWIN) + $menu['items'][$x]['newwin'] = '1'; return replace_macros(get_markup_template('usermenu.tpl'),array( '$menu' => $menu['menu'], @@ -74,7 +75,7 @@ function menu_create($arr) { $r = q("select * from menu where menu_name = '%s' and menu_channel_id = %d limit 1", dbesc($menu_name), - intval($menu_channel_id), + intval($menu_channel_id) ); if($r) @@ -106,9 +107,11 @@ function menu_create($arr) { * bits set. We will use this to find system generated bookmarks. */ -function menu_list($channel_id, $flags = 0) { +function menu_list($channel_id, $name = '', $flags = 0) { - $sel_options = (($flags) ? " and ( menu_flags & " . intval($flags) . " ) = " . intval($flags) . " " : ''); + $sel_options = ''; + $sel_options .= (($name) ? " and name = '" . protect_sprintf(dbesc($name)) . "' " : ''); + $sel_options .= (($flags) ? " and menu_flags = " . intval($flags) . " " : ''); $r = q("select * from menu where menu_channel_id = %d $sel_options order by menu_name", intval($channel_id) @@ -229,11 +232,11 @@ function menu_add_item($menu_id, $uid, $arr) { $str_contact_deny = perms2str($arr['contact_deny']); } - - $allow_cid = perms2str($arr['allow_cid']); - $allow_gid = perms2str($arr['allow_gid']); - $deny_cid = perms2str($arr['deny_cid']); - $deny_gid = perms2str($arr['deny_gid']); +// unused +// $allow_cid = perms2str($arr['allow_cid']); +// $allow_gid = perms2str($arr['allow_gid']); +// $deny_cid = perms2str($arr['deny_cid']); +// $deny_gid = perms2str($arr['deny_gid']); $r = q("insert into menu_item ( mitem_link, mitem_desc, mitem_flags, allow_cid, allow_gid, deny_cid, deny_gid, mitem_channel_id, mitem_menu_id, mitem_order ) values ( '%s', '%s', %d, '%s', '%s', '%s', '%s', %d, %d, %d ) ", dbesc($mitem_link), diff --git a/include/permissions.php b/include/permissions.php index 060ed841c..420591c54 100644 --- a/include/permissions.php +++ b/include/permissions.php @@ -29,7 +29,7 @@ function get_perms() { 'write_pages' => array('channel_w_pages', intval(PERMS_W_PAGES), false, t('Can edit my "public" pages'), ''), 'republish' => array('channel_a_republish', intval(PERMS_A_REPUBLISH), false, t('Can source my "public" posts in derived channels'), t('Somewhat advanced - very useful in open communities')), - 'bookmark' => array('channel_a_bookmark', intval(PERMS_A_BOOKMARK), false, t('Can send me bookmarks'), ''), + 'bookmark' => array('channel_a_bookmark', intval(PERMS_A_BOOKMARK), false, t('Can send me bookmarks'), 'Bookmarks from this person will automatically be saved'), 'delegate' => array('channel_a_delegate', intval(PERMS_A_DELEGATE), false, t('Can administer my channel resources'), t('Extremely advanced. Leave this alone unless you know what you are doing')), ); $ret = array('global_permissions' => $global_perms); diff --git a/mod/bookmarks.php b/mod/bookmarks.php new file mode 100644 index 000000000..25bf39a7a --- /dev/null +++ b/mod/bookmarks.php @@ -0,0 +1,40 @@ +<?php + +function bookmarks_content(&$a) { + if(! local_user()) { + notice( t('Permission denied.') . EOL); + return; + } + + + require_once('include/menu.php'); + + $o = '<h3>' . t('My Bookmarks') . '</h3>'; + + $x = menu_list(local_user(),'',MENU_BOOKMARK); + + if($x) { + foreach($x as $xx) { + $y = menu_fetch($xx['menu_name'],local_user(),get_observer_hash()); + $o .= menu_render($y); + } + } + + $o .= '<h3>' . t('My Connections Bookmarks') . '</h3>'; + + + $x = menu_list(local_user(),'',MENU_SYSTEM|MENU_BOOKMARK); + + if($x) { + foreach($x as $xx) { + $y = menu_fetch($xx['menu_name'],local_user(),get_observer_hash()); + $o .= menu_render($y); + } + } + + + + return $o; + +} + diff --git a/mod/parse_url.php b/mod/parse_url.php index c206c24ec..340e1a67e 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -252,7 +252,7 @@ function parse_url_content(&$a) { logger('parse_url: ' . $url); - $template = $br . '[url=%s]%s[/url]%s' . $br; + $template = $br . '#^[url=%s]%s[/url]%s' . $br; $arr = array('url' => $url, 'text' => ''); |