aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authormarijus <mario@localhost.localdomain>2014-02-05 13:43:16 +0100
committermarijus <mario@localhost.localdomain>2014-02-05 13:43:16 +0100
commit9e993bb4fd7e6ff6ba44586479371c163ee6aad8 (patch)
treed3754aa1d251308eb6178fe4ab138463ceaaf135 /include
parent4253581733d4c6c7f0dce5c3ea7566c6af4af936 (diff)
parent0844110f7b154a0fb5102362fe732c2b091222d7 (diff)
downloadvolse-hubzilla-9e993bb4fd7e6ff6ba44586479371c163ee6aad8.tar.gz
volse-hubzilla-9e993bb4fd7e6ff6ba44586479371c163ee6aad8.tar.bz2
volse-hubzilla-9e993bb4fd7e6ff6ba44586479371c163ee6aad8.zip
Merge branch 'master' of https://github.com/friendica/red
Diffstat (limited to 'include')
-rw-r--r--include/ItemObject.php10
-rw-r--r--include/bookmarks.php55
-rw-r--r--include/conversation.php8
-rwxr-xr-xinclude/items.php15
-rw-r--r--include/menu.php37
-rw-r--r--include/permissions.php1
-rwxr-xr-xinclude/text.php2
7 files changed, 113 insertions, 15 deletions
diff --git a/include/ItemObject.php b/include/ItemObject.php
index e9a0b65c0..9b1a6fbcd 100644
--- a/include/ItemObject.php
+++ b/include/ItemObject.php
@@ -171,6 +171,15 @@ class Item extends BaseObject {
);
}
+ $has_bookmarks = false;
+ if(is_array($item['term'])) {
+ foreach($item['term'] as $t) {
+ if($t['type'] == TERM_BOOKMARK)
+ $has_bookmarks = true;
+ }
+ }
+
+
if($this->is_commentable()) {
$like = array( t("I like this \x28toggle\x29"), t("like"));
$dislike = array( t("I don't like this \x28toggle\x29"), t("dislike"));
@@ -237,6 +246,7 @@ class Item extends BaseObject {
'star' => ((feature_enabled($conv->get_profile_owner(),'star_posts')) ? $star : ''),
'tagger' => ((feature_enabled($conv->get_profile_owner(),'commtag')) ? $tagger : ''),
'filer' => ((feature_enabled($conv->get_profile_owner(),'filing')) ? $filer : ''),
+ 'bookmark' => (($conv->get_profile_owner() == local_user() && $has_bookmarks) ? t('Bookmark Links') : ''),
'drop' => $drop,
'multidrop' => ((feature_enabled($conv->get_profile_owner(),'multi_delete')) ? $multidrop : ''),
// end toolbar buttons
diff --git a/include/bookmarks.php b/include/bookmarks.php
new file mode 100644
index 000000000..99cb60e64
--- /dev/null
+++ b/include/bookmarks.php
@@ -0,0 +1,55 @@
+<?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'] = (($sender['xchan_hash'] === $channel['channel_hash']) ? MENU_BOOKMARK : 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;
+ }
+ logger('add_bookmark: menu_id ' . $menu_id);
+ $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)
+ logger('add_bookmark: duplicate menu entry', LOGGER_DEBUG);
+ if(! $r)
+ $r = menu_add_item($menu_id,$channel_id,$iarr);
+ return $r;
+} \ No newline at end of file
diff --git a/include/conversation.php b/include/conversation.php
index 316bc1612..633435871 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -1496,6 +1496,14 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
'title' => t('Events and Calendar'),
'id' => 'events-tab',
);
+
+ $tabs[] = array(
+ 'label' => t('Bookmarks'),
+ 'url' => $a->get_baseurl() . '/bookmarks',
+ 'sel' => ((argv(0) == 'bookmarks') ? 'active' : ''),
+ 'title' => t('Saved Bookmarks'),
+ 'id' => 'bookmarks-tab',
+ );
}
if($is_owner && feature_enabled($a->profile['profile_uid'],'webpages')) {
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 be9831951..105e4216b 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,8 +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_flags)
+ intval($menu_channel_id)
);
if($r)
@@ -101,9 +101,17 @@ function menu_create($arr) {
}
-function menu_list($channel_id, $flags = 0) {
+/**
+ * If $flags is present, check that all the bits in $flags are set
+ * so that MENU_SYSTEM|MENU_BOOKMARK will return entries with both
+ * bits set. We will use this to find system generated bookmarks.
+ */
+
+function menu_list($channel_id, $name = '', $flags = 0) {
- $sel_options = (($flags) ? " and ( menu_flags & " . intval($flags) . " ) " : '');
+ $sel_options = '';
+ $sel_options .= (($name) ? " and menu_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)
@@ -204,7 +212,8 @@ function menu_add_item($menu_id, $uid, $arr) {
$channel = get_app()->get_channel();
}
- if ((! $arr['contact_allow'])
+ if (($channel)
+ && (! $arr['contact_allow'])
&& (! $arr['group_allow'])
&& (! $arr['contact_deny'])
&& (! $arr['group_deny'])) {
@@ -223,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 1b11dfb87..420591c54 100644
--- a/include/permissions.php
+++ b/include/permissions.php
@@ -29,6 +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'), '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/include/text.php b/include/text.php
index dc7d94b6d..266d8952b 100755
--- a/include/text.php
+++ b/include/text.php
@@ -604,7 +604,7 @@ function get_tags($s) {
// bookmarks
- if(preg_match_all('/#\^\[(url|zrl)=(.*?)\](.*?)\[\/(url|zrl)\]/',$s,$match,PREG_SET_ORDER)) {
+ if(preg_match_all('/#\^\[(url|zrl)(.*?)\](.*?)\[\/(url|zrl)\]/',$s,$match,PREG_SET_ORDER)) {
foreach($match as $mtch) {
$ret[] = $mtch[0];
}