]> git.mxchange.org Git - friendica.git/commitdiff
Send notifications for each new post of a contact, option for creating a summary...
authorMichael Vogel <icarus@dabo.de>
Sun, 5 Jan 2014 15:10:02 +0000 (16:10 +0100)
committerMichael Vogel <icarus@dabo.de>
Sun, 5 Jan 2014 15:10:02 +0000 (16:10 +0100)
boot.php
include/enotify.php
include/items.php
mod/contacts.php
mod/crepair.php
update.php
view/templates/contact_edit.tpl
view/templates/crepair.tpl

index 6b130edf9ce37421b76d4bca72a00d40d1381dc7..72eaec8fe58db17bb87739926067901bb4e65202 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -14,7 +14,7 @@ require_once('include/features.php');
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
 define ( 'FRIENDICA_VERSION',      '3.2.1745' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1167      );
+define ( 'DB_UPDATE_VERSION',      1169      );
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
 
@@ -197,6 +197,7 @@ define ( 'NOTIFY_PROFILE',  0x0040 );
 define ( 'NOTIFY_TAGSELF',  0x0080 );
 define ( 'NOTIFY_TAGSHARE', 0x0100 );
 define ( 'NOTIFY_POKE',     0x0200 );
+define ( 'NOTIFY_SHARE',    0x0400 );
 
 define ( 'NOTIFY_SYSTEM',   0x8000 );
 
@@ -395,6 +396,9 @@ if(! class_exists('App')) {
                // array of instanced template engines ('name'=>'instance')
                public $template_engine_instance = array();
 
+               // Used for reducing load to the ostatus completion
+               public $last_ostatus_conversation_url;
+
                private $ldelim = array(
                        'internal' => '',
                        'smarty3' => '{{'
index 72365a762f983ce7c0a576aa4bf57eb9580d9428..c121debe66fabb81b1de777f6d273270df8d1a13 100644 (file)
@@ -58,11 +58,12 @@ function notification($params) {
 
                // Check to see if there was already a tag notify or comment notify for this post.
                // If so don't create a second notification
-               
+
                $p = null;
-               $p = q("select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d limit 1",
+               $p = q("select id from notify where (type = %d or type = %d or type = %d) and link = '%s' and uid = %d limit 1",
                        intval(NOTIFY_TAGSELF),
                        intval(NOTIFY_COMMENT),
+                       intval(NOTIFY_SHARE),
                        dbesc($params['link']),
                        intval($params['uid'])
                );
@@ -70,7 +71,7 @@ function notification($params) {
                        pop_lang();
                        return;
                }
-       
+
 
                // if it's a post figure out who's post it is.
 
@@ -99,7 +100,7 @@ function notification($params) {
                                                $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(t('%1$s commented on [url=%2$s]your %3$s[/url]'),
@@ -114,7 +115,7 @@ function notification($params) {
 
                $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 = $dest_str; 
+               $epreamble = $dest_str;
 
                $sitelink = t('Please visit %s to view and/or reply to the conversation.');
                $tsitelink = sprintf( $sitelink, $siteurl );
@@ -126,11 +127,11 @@ function notification($params) {
                $subject = sprintf( t('[Friendica:Notify] %s posted to your profile wall') , $params['source_name']);
 
                $preamble = sprintf( t('%1$s posted to your profile wall at %2$s') , $params['source_name'], $sitename);
-               
-               $epreamble = sprintf( t('%1$s posted to [url=%2$s]your wall[/url]') , 
+
+               $epreamble = sprintf( t('%1$s posted to [url=%2$s]your wall[/url]') ,
                                                                '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
-                                                               $params['link']); 
-               
+                                                               $params['link']);
+
                $sitelink = t('Please visit %s to view and/or reply to the conversation.');
                $tsitelink = sprintf( $sitelink, $siteurl );
                $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
@@ -140,9 +141,22 @@ function notification($params) {
        if($params['type'] == NOTIFY_TAGSELF) {
                $subject =      sprintf( t('[Friendica:Notify] %s tagged you') , $params['source_name']);
                $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].') , 
+               $epreamble = sprintf( t('%1$s [url=%2$s]tagged you[/url].') ,
                                                                '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
-                                                               $params['link']); 
+                                                               $params['link']);
+
+               $sitelink = t('Please visit %s to view and/or reply to the conversation.');
+               $tsitelink = sprintf( $sitelink, $siteurl );
+               $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
+               $itemlink =  $params['link'];
+       }
+
+       if($params['type'] == NOTIFY_SHARE) {
+               $subject =      sprintf( t('[Friendica:Notify] %s shared a new post') , $params['source_name']);
+               $preamble = sprintf( t('%1$s shared a new post at %2$s') , $params['source_name'], $sitename);
+               $epreamble = sprintf( t('%1$s [url=%2$s]shared a post[/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 );
index a1aad551f6d645ddc13d24fbdd7527557501399b..ffd549ea14eba4c3faa2a1b592d03777d7ac6480 100755 (executable)
@@ -406,7 +406,7 @@ function title_is_body($title, $body) {
 
 
 
-function get_atom_elements($feed,$item) {
+function get_atom_elements($feed, $item, $contact = array()) {
 
        require_once('library/HTMLPurifier.auto.php');
        require_once('include/html2bbcode.php');
@@ -542,7 +542,7 @@ function get_atom_elements($feed,$item) {
                $res['body'] = notags(base64url_decode($res['body']));
        }
 
-       
+
        $res['body'] = limit_body_size($res['body']);
 
        // It isn't certain at this point whether our content is plaintext or html and we'd be foolish to trust 
@@ -846,6 +846,11 @@ function get_atom_elements($feed,$item) {
                };
        }
 
+       if (isset($contact["network"]) AND ($contact["network"] == NETWORK_FEED) AND $contact['fetch_further_information']) {
+               $res["body"] = $res["title"]."\n\n[class=type-link]".fetch_siteinfo($res['plink'])."[/class]";
+               $res["title"] = "";
+       }
+
        $arr = array('feed' => $feed, 'item' => $item, 'result' => $res);
 
        call_hooks('parse_atom', $arr);
@@ -860,6 +865,31 @@ function get_atom_elements($feed,$item) {
        return $res;
 }
 
+function fetch_siteinfo($url) {
+       require_once("mod/parse_url.php");
+
+       // Fetch site infos - but only from the meta data
+       $data = parseurl_getsiteinfo($url, true);
+
+       $text = "";
+
+       if (!is_string($data["text"]) AND (sizeof($data["images"]) == 0) AND ($data["title"] == $url))
+               return("");
+
+       if (is_string($data["title"]))
+               $text .= "[bookmark=".$url."]".trim($data["title"])."[/bookmark]\n";
+
+       if (sizeof($data["images"]) > 0) {
+               $imagedata = $data["images"][0];
+               $text .= '[img='.$imagedata["width"].'x'.$imagedata["height"].']'.$imagedata["src"].'[/img]' . "\n";
+       }
+
+       if (is_string($data["text"]))
+               $text .= "[quote]".$data["text"]."[/quote]";
+
+       return($text);
+}
+
 function encode_rel_links($links) {
        $o = '';
        if(! ((is_array($links)) && (count($links))))
@@ -1100,10 +1130,10 @@ function item_store($arr,$force_parent = false) {
 
        logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
 
-       $r = dbq("INSERT INTO `item` (`" 
-                       . implode("`, `", array_keys($arr)) 
-                       . "`) VALUES ('" 
-                       . implode("', '", array_values($arr)) 
+       $r = dbq("INSERT INTO `item` (`"
+                       . implode("`, `", array_keys($arr))
+                       . "`) VALUES ('"
+                       . implode("', '", array_values($arr))
                        . "')" );
 
        // find the item we just created
@@ -1117,6 +1147,49 @@ function item_store($arr,$force_parent = false) {
                $current_post = $r[0]['id'];
                logger('item_store: created item ' . $current_post);
                create_tags_from_item($r[0]['id']);
+
+               // Only check for notifications on start posts
+               if ($arr['parent-uri'] === $arr['uri']) {
+                       logger('item_store: Check notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+
+                       // Send a notification for every new post?
+                       $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1",
+                               intval($arr['contact-id']),
+                               intval($arr['uid'])
+                       );
+
+                       if(count($r)) {
+                               logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+                               $u = q("SELECT * FROM user WHERE uid = %d LIMIT 1",
+                                       intval($arr['uid']));
+
+                               $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d",
+                                       intval($current_post),
+                                       intval($arr['uid'])
+                               );
+
+                               $a = get_app();
+
+                               require_once('include/enotify.php');
+                               notification(array(
+                                       'type'         => NOTIFY_SHARE,
+                                       'notify_flags' => $u[0]['notify-flags'],
+                                       'language'     => $u[0]['language'],
+                                       'to_name'      => $u[0]['username'],
+                                       'to_email'     => $u[0]['email'],
+                                       'uid'          => $u[0]['uid'],
+                                       'item'         => $item[0],
+                                       'link'         => $a->get_baseurl().'/display/'.$u[0]['nickname'].'/'.$current_post,
+                                       'source_name'  => $item[0]['author-name'],
+                                       'source_link'  => $item[0]['author-link'],
+                                       'source_photo' => $item[0]['author-avatar'],
+                                       'verb'         => ACTIVITY_TAG,
+                                       'otype'        => 'item'
+                               ));
+                               logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+                       }
+               }
+
        } else {
                logger('item_store: could not locate created item');
                return 0;
@@ -1136,9 +1209,9 @@ function item_store($arr,$force_parent = false) {
        if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid))
                $private = 1;
        else
-               $private = $arr['private']; 
+               $private = $arr['private'];
 
-       // Set parent id - and also make sure to inherit the parent's ACL's.
+       // Set parent id - and also make sure to inherit the parent's ACLs.
 
        $r = q("UPDATE `item` SET `parent` = %d, `allow_cid` = '%s', `allow_gid` = '%s',
                `deny_cid` = '%s', `deny_gid` = '%s', `private` = %d, `deleted` = %d WHERE `id` = %d",
@@ -1201,7 +1274,7 @@ function item_store($arr,$force_parent = false) {
        // current post can be deleted if is for a communuty page and no mention are
        // in it.
        if (!$deleted) {
-               
+
                // Store the fresh generated item into the cache
                $cachefile = get_cachefile($arr["guid"]."-".hash("md5", $arr['body']));
 
@@ -2023,7 +2096,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                                // Have we seen it? If not, import it.
 
                                $item_id  = $item->get_id();
-                               $datarray = get_atom_elements($feed,$item);
+                               $datarray = get_atom_elements($feed, $item, $contact);
 
                                if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN))
                                        $datarray['author-name'] = $contact['name'];
@@ -2164,7 +2237,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
 
                                $item_id  = $item->get_id();
 
-                               $datarray = get_atom_elements($feed,$item);
+                               $datarray = get_atom_elements($feed, $item, $contact);
 
                                if(is_array($contact)) {
                                        if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN))
@@ -2894,7 +2967,7 @@ function local_delivery($importer,$data) {
 
        foreach($feed->get_items() as $item) {
 
-               $is_reply = false;              
+               $is_reply = false;
                $item_id = $item->get_id();
                $rawthread = $item->get_item_tags( NAMESPACE_THREAD, 'in-reply-to');
                if(isset($rawthread[0]['attribs']['']['ref'])) {
@@ -2961,7 +3034,7 @@ function local_delivery($importer,$data) {
                                $is_like = false;
                                // remote reply to our post. Import and then notify everybody else.
 
-                               $datarray = get_atom_elements($feed,$item);
+                               $datarray = get_atom_elements($feed, $item);
 
                                $r = q("SELECT `id`, `uid`, `last-child`, `edited`, `body`  FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
                                        dbesc($item_id),
@@ -3426,7 +3499,7 @@ function local_delivery($importer,$data) {
 
                                                // send a notification
                                                require_once('include/enotify.php');
-                                                               
+
                                                notification(array(
                                                        'type'         => NOTIFY_POKE,
                                                        'notify_flags' => $importer['notify-flags'],
index a405cedbc6329b6d80cf937a8788b0b67c39d9c7..f48978aaecadd11c953f2b2f3a6ec5c98f996d18 100644 (file)
@@ -68,7 +68,7 @@ function contacts_init(&$a) {
 }
 
 function contacts_post(&$a) {
-       
+
        if(! local_user())
                return;
 
@@ -103,6 +103,10 @@ function contacts_post(&$a) {
 
        $hidden = intval($_POST['hidden']);
 
+       $notify = intval($_POST['notify']);
+
+       $fetch_further_information = intval($_POST['fetch_further_information']);
+
        $priority = intval($_POST['poll']);
        if($priority > 5 || $priority < 0)
                $priority = 0;
@@ -110,11 +114,13 @@ function contacts_post(&$a) {
        $info = fix_mce_lf(escape_tags(trim($_POST['info'])));
 
        $r = q("UPDATE `contact` SET `profile-id` = %d, `priority` = %d , `info` = '%s',
-               `hidden` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
+               `hidden` = %d, `notify_new_posts` = %d, `fetch_further_information` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
                intval($profile_id),
                intval($priority),
                dbesc($info),
                intval($hidden),
+               intval($notify),
+               intval($fetch_further_information),
                intval($contact_id),
                intval(local_user())
        );
@@ -417,6 +423,8 @@ function contacts_content(&$a) {
                        '$ignored' => (($contact['readonly']) ? t('Currently ignored') : ''),
                        '$archived' => (($contact['archive']) ? t('Currently archived') : ''),
                        '$hidden' => array('hidden', t('Hide this contact from others'), ($contact['hidden'] == 1), t('Replies/likes to your public posts <strong>may</strong> still be visible')),
+                       '$notify' => array('notify', t('Notification for new posts'), ($contact['notify_new_posts'] == 1), t('Send a notification of every new post of this contact')),
+                       '$fetch_further_information' => array('fetch_further_information', t('Fetch further information for feeds'), ($contact['fetch_further_information'] == 1), t('Fetch further information for feeds')),
                        '$photo' => $contact['photo'],
                        '$name' => $contact['name'],
                        '$dir_icon' => $dir_icon,
index ec56d7c284cc3700d3a6ebfd022ef56f44c34df3..171e88f3120f3a510b30a22764609e271d298ccb 100644 (file)
@@ -28,7 +28,7 @@ function crepair_init(&$a) {
                        $o .= '</div>';
                        $a->page['aside'] .= $o;
 
-       }       
+       }
 }
 
 
@@ -59,8 +59,9 @@ function crepair_post(&$a) {
        $poll    = ((x($_POST,'poll')) ? $_POST['poll'] : '');
        $attag   = ((x($_POST,'attag')) ? $_POST['attag'] : '');
        $photo   = ((x($_POST,'photo')) ? $_POST['photo'] : '');
+       $remote_self = ((x($_POST,'remote_self')) ? $_POST['remote_self'] : false);
 
-       $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' 
+       $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' , `remote_self` = %d
                WHERE `id` = %d AND `uid` = %d LIMIT 1",
                dbesc($name),
                dbesc($nick),
@@ -70,6 +71,7 @@ function crepair_post(&$a) {
                dbesc($notify),
                dbesc($poll),
                dbesc($attag),
+               intval($remote_self),
                intval($contact['id']),
                local_user()
        );
@@ -154,6 +156,7 @@ function crepair_content(&$a) {
                '$label_notify' => t('Notification Endpoint URL'),
                '$label_poll' => t('Poll/Feed URL'),
                '$label_photo' => t('New photo from this URL'),
+               '$label_self' => t('Mirror all posts to the wall?'),
                '$contact_name' => $contact['name'],
                '$contact_nick' => $contact['nick'],
                '$contact_id'   => $contact['id'],
@@ -163,6 +166,8 @@ function crepair_content(&$a) {
                '$notify'       => $contact['notify'],
                '$poll'         => $contact['poll'],
                '$contact_attag'  => $contact['attag'],
+               '$contact_self' => array('remote_self', t('Mirror all posts to the wall?'), $contact['remote_self'], 
+                                       t('Shall all posts from this contact posted like your own posts?')),
                '$lbl_submit'   => t('Submit')
        ));
 
index 343be1a4c135de2163d34a8decaafa25a40f6f54..ed631fee4e9fd995d088cb0c17fc6348693dd018 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1167 );
+define( 'UPDATE_VERSION' , 1169 );
 
 /**
  *
@@ -1541,3 +1541,19 @@ function update_1166() {
 
        return UPDATE_SUCCESS;
 }
+
+function update_1167() {
+       $r = q("ALTER TABLE `contact` ADD `notify_new_posts` TINYINT(1) NOT NULL DEFAULT '0'");
+       if (!$r)
+               return UPDATE_FAILED;
+
+       return UPDATE_SUCCESS;
+}
+
+function update_1168() {
+       $r = q("ALTER TABLE `contact` ADD `fetch_further_information` TINYINT(1) NOT NULL DEFAULT '0'");
+       if (!$r)
+               return UPDATE_FAILED;
+
+       return UPDATE_SUCCESS;
+}
index 6d65288e42484eb2bec59eb6f31c7b128be2e06e..dcaeb8c84df0650ac86200f9e0030243cbecf742 100644 (file)
@@ -69,7 +69,8 @@
                </div>
        {{/if}}
        <div id="contact-edit-end" ></div>
-
+       {{include file="field_checkbox.tpl" field=$notify}}
+       {{include file="field_checkbox.tpl" field=$fetch_further_information}}
        {{include file="field_checkbox.tpl" field=$hidden}}
 
 <div id="contact-edit-info-wrapper">
index 8d3ed7df892e0b056756509d50b88896038b2f3f..5278e42f089b0455a9d646815c8df0062c2b7ff0 100644 (file)
@@ -44,6 +44,8 @@
 <input type="text" id="crepair-photo" class="crepair-input" name="photo" value="" />
 <div class="clear"></div>
 
+{{include file="field_checkbox.tpl" field=$contact_self}}
+
 <input type="submit" name="submit" value="{{$lbl_submit}}" />
 
 </form>