]> git.mxchange.org Git - friendica.git/commitdiff
notify and alias are now in gcontact as well - the contact expansion in mod/item...
authorMichael Vogel <icarus@dabo.de>
Thu, 7 Jan 2016 22:43:16 +0000 (23:43 +0100)
committerMichael Vogel <icarus@dabo.de>
Thu, 7 Jan 2016 22:43:16 +0000 (23:43 +0100)
include/dbstructure.php
include/socgraph.php
mod/display.php
mod/item.php

index 1b414c70fbc02f8dab4c8306f2b02cac434ea699..4b2cdb251c46dfb6a6367f5cd76d8766b31cba4e 100644 (file)
@@ -672,6 +672,8 @@ function db_definition() {
                                        "nsfw" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "notify" => array("type" => "text", "not null" => "1"),
+                                       "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
                                        "server_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
index a9cbedd667d0ed48607925c49289be00c8f106df..0082cb43b2b7742caa2ca9a7ea9223a677d0efd9 100644 (file)
@@ -227,6 +227,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                $server_url = $x[0]["server_url"];
                $nick = $x[0]["nick"];
                $addr = $x[0]["addr"];
+               $alias =  $x[0]["alias"];
+               $notify =  $x[0]["notify"];
        } else {
                $created = "0000-00-00 00:00:00";
                $server_url = "";
@@ -234,6 +236,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                $urlparts = parse_url($profile_url);
                $nick = end(explode("/", $urlparts["path"]));
                $addr = "";
+               $alias = "";
+               $notify = "";
        }
 
        if ((($network == "") OR ($name == "") OR ($addr == "") OR ($profile_photo == "") OR ($server_url == "") OR $alternate)
@@ -246,6 +250,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                $name = $data["name"];
                $nick = $data["nick"];
                $addr = $data["addr"];
+               $alias = $data["alias"];
+               $notify = $data["notify"];
                $profile_url = $data["url"];
                $profile_photo = $data["photo"];
                $server_url = $data["baseurl"];
@@ -301,12 +307,19 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                if (($addr == "") AND ($x[0]['addr'] != ""))
                        $addr = $x[0]['addr'];
 
+               if (($alias == "") AND ($x[0]['alias'] != ""))
+                       $alias = $x[0]['alias'];
+
+               if (($notify == "") AND ($x[0]['notify'] != ""))
+                       $notify = $x[0]['notify'];
+
                if (($generation == 0) AND ($x[0]['generation'] > 0))
                        $generation = $x[0]['generation'];
 
                if($x[0]['name'] != $name || $x[0]['photo'] != $profile_photo || $x[0]['updated'] < $updated) {
                        q("UPDATE `gcontact` SET `name` = '%s', `addr` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `server_url` = '%s',
-                               `updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s', `generation` = %d
+                               `updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s', `generation` = %d,
+                               `alias` = '$s', `notify` = '%s'
                                WHERE (`generation` >= %d OR `generation` = 0) AND `nurl` = '%s'",
                                dbesc($name),
                                dbesc($addr),
@@ -320,6 +333,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                                dbesc($about),
                                dbesc($keywords),
                                dbesc($gender),
+                               dbesc($alias),
+                               dbesc($notify),
                                intval($generation),
                                intval($generation),
                                dbesc(normalise_link($profile_url))
@@ -331,8 +346,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                        dbesc(normalise_link($profile_url))
                );
                if(!$x) {
-                       q("INSERT INTO `gcontact` (`name`, `nick`, `addr`, `network`, `url`, `nurl`, `photo`, `connect`, `server_url`, `created`, `updated`, `location`, `about`, `keywords`, `gender`, `generation`)
-                               VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
+                       q("INSERT INTO `gcontact` (`name`, `nick`, `addr`, `network`, `url`, `nurl`, `photo`, `connect`, `server_url`, `created`, `updated`, `location`, `about`, `keywords`, `gender`, `alias`, `notify`, `generation`)
+                               VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
                                dbesc($name),
                                dbesc($nick),
                                dbesc($addr),
@@ -348,6 +363,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                                dbesc($about),
                                dbesc($keywords),
                                dbesc($gender),
+                               dbesc($alias),
+                               dbesc($notify),
                                intval($generation)
                        );
                        $x = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
@@ -1536,7 +1553,7 @@ function update_gcontact($contact) {
        if (!$gcontact_id)
                return false;
 
-       $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, `hide`, `nsfw`, `network`
+       $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, `hide`, `nsfw`, `network`, `alias`, `notify`
                FROM `gcontact` WHERE `id` = %d LIMIT 1",
                intval($gcontact_id));
 
@@ -1579,22 +1596,30 @@ function update_gcontact($contact) {
        if ($contact["network"] =="")
                $contact["network"] = $r[0]["network"];
 
+       if ($contact["alias"] =="")
+               $contact["alias"] = $r[0]["alias"];
+
+       if ($contact["notify"] =="")
+               $contact["notify"] = $r[0]["notify"];
+
        if ($contact["network"] == NETWORK_STATUSNET)
                $contact["network"] = NETWORK_OSTATUS;
 
        if (($contact["photo"] != $r[0]["photo"]) OR ($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["addr"] != $r[0]["addr"]) OR
                ($contact["birthday"] != $r[0]["birthday"]) OR ($contact["gender"] != $r[0]["gender"]) OR ($contact["keywords"] != $r[0]["keywords"]) OR
                ($contact["hide"] != $r[0]["hide"]) OR ($contact["nsfw"] != $r[0]["nsfw"]) OR ($contact["network"] != $r[0]["network"]) OR
+               ($contact["alias"] != $r[0]["alias"]) OR ($contact["notify"] != $r[0]["notify"]) OR
                ($contact["location"] != $r[0]["location"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["generation"] < $r[0]["generation"])) {
 
                q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s',
                                        `birthday` = '%s', `gender` = '%s', `keywords` = %d, `hide` = %d, `nsfw` = %d,
+                                       `alias` = '%s', `notify` = '%s',
                                        `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s'
                                WHERE `nurl` = '%s' AND (`generation` = 0 OR `generation` >= %d)",
                        dbesc($contact["photo"]), dbesc($contact["name"]), dbesc($contact["nick"]),
                        dbesc($contact["addr"]), dbesc($contact["network"]),
                        dbesc($contact["birthday"]), dbesc($contact["gender"]), dbesc($contact["keywords"]),
-                       intval($contact["hide"]), intval($contact["nsfw"]),
+                       intval($contact["hide"]), intval($contact["nsfw"]), dbesc($contact["alias"]), dbesc($contact["notify"]),
                        dbesc($contact["location"]), dbesc($contact["about"]), intval($contact["generation"]), dbesc(datetime_convert()),
                        dbesc(normalise_link($contact["url"])), intval($contact["generation"]));
        }
index c173c5a9124152f430c78462599604e3cf878bf3..6ff599e2c74957e4fec8e0caea4973748e53d7b7 100644 (file)
@@ -180,6 +180,7 @@ function display_fetchauthor($a, $item) {
        }
 
        // Fetching profile data from global contacts
+       // @todo: should override everything else (but not Feeds)
        $r = q("SELECT `photo`, `nick`, `addr`, `location`, `about`, `gender` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($profiledata["url"])));
        if (count($r)) {
                if ($profiledata["photo"] == "")
index 2d2a5710fe9e6ea1f794e375e3c33c70890337ba..56c5ccad95828a946bb1652470b77b931f0853f9 100644 (file)
@@ -137,15 +137,25 @@ function item_post(&$a) {
                                AND (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) {
                                $parent_contact = null;
 
-                               // @todo: Use gcontact
-                               require_once("include/Scrape.php");
-                               $probed_contact = probe_url($thrparent[0]["author-link"]);
-                               if ($probed_contact["network"] != NETWORK_FEED) {
-                                       $parent_contact = $probed_contact;
-                                       $parent_contact["nurl"] = normalise_link($probed_contact["url"]);
-                                       $parent_contact["thumb"] = $probed_contact["photo"];
-                                       $parent_contact["micro"] = $probed_contact["photo"];
-                                       $parent_contact["addr"] = $probed_contact["addr"];
+                               $r = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+                                       dbesc(normalise_link($thrparent[0]["author-link"])));
+                               if (count($r)) {
+                                       $parent_contact = $r[0];
+                                       $parent_contact["thumb"] = $parent_contact["photo"];
+                                       $parent_contact["micro"] = $parent_contact["photo"];
+                                       unset($parent_contact["id"]);
+                               }
+
+                               if (!isset($parent_contact["nick"])) {
+                                       require_once("include/Scrape.php");
+                                       $probed_contact = probe_url($thrparent[0]["author-link"]);
+                                       if ($probed_contact["network"] != NETWORK_FEED) {
+                                               $parent_contact = $probed_contact;
+                                               $parent_contact["nurl"] = normalise_link($probed_contact["url"]);
+                                               $parent_contact["thumb"] = $probed_contact["photo"];
+                                               $parent_contact["micro"] = $probed_contact["photo"];
+                                               $parent_contact["addr"] = $probed_contact["addr"];
+                                       }
                                }
                                logger('no contact found: '.print_r($thrparent, true), LOGGER_DEBUG);
                        } else
@@ -1062,6 +1072,8 @@ function item_content(&$a) {
  * @return boolean true if replaced, false if not replaced
  */
 function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "") {
+       require_once("include/Scrape.php");
+       require_once("include/socgraph.php");
 
        $replaced = false;
        $r = null;
@@ -1096,10 +1108,112 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                $stat = false;
                //get the person's name
                $name = substr($tag,1);
+
+               // Try to detect the contact in various ways
+               if ((strpos($name,'@')) || (strpos($name,'http://'))) {
+                       // Is it in format @user@domain.tld or @http://domain.tld/...?
+
+                       // First check the contact table for the address
+                       $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact` WHERE `addr` = '%s' AND `uid` = %d LIMIT 1",
+                                       dbesc($name),
+                                       intval($profile_uid)
+                       );
+
+                       // Then check in the contact table for the url
+                       if (!$r)
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `notify`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1",
+                                               dbesc(normalise_link($name)),
+                                               intval($profile_uid)
+                               );
+
+                       // Then check in the global contacts for the address
+                       if (!$r)
+                               $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `addr` = '%s' LIMIT 1", dbesc($name));
+
+                       // Then check in the global contacts for the url
+                       if (!$r)
+                               $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($name)));
+
+                       // If the data isn't complete then refetch the data
+                       if ($r AND ($r[0]["network"] == NETWORK_OSTATUS) AND (($r[0]["notify"] == "") OR ($r[0]["alias"] == "")))
+                               $r = false;
+
+                       if (!$r) {
+                               $probed = probe_url($name);
+                               if (isset($probed["url"])) {
+                                       update_gcontact($probed);
+                                       $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+                                               dbesc(normalise_link($probed["url"])));
+                               }
+                       }
+               } elseif (!$r) {
+                       $newname = str_replace('_',' ',$name);
+                       $r = false;
+                       if (strrpos($name,'+')) {
+                               // Is it in format @nick+number?
+                               $tagcid = intval(substr($name,strrpos($name,'+') + 1));
+
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                                               intval($tagcid),
+                                               intval($profile_uid)
+                               );
+                       }
+
+                       //select someone by attag or nick and the name passed in the current network
+                       if(!$r AND ($network != ""))
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `network` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+                                               dbesc($name),
+                                               dbesc($name),
+                                               dbesc($network),
+                                               intval($profile_uid)
+                               );
+
+                       //select someone from this user's contacts by name in the current network
+                       if (!$r AND ($network != ""))
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1",
+                                               dbesc($newname),
+                                               dbesc($network),
+                                               intval($profile_uid)
+                               );
+
+                       //select someone by attag or nick and the name passed in
+                       if(!$r)
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+                                               dbesc($name),
+                                               dbesc($name),
+                                               intval($profile_uid)
+                               );
+
+
+                       //select someone from this user's contacts by name
+                       if(!$r)
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
+                                               dbesc($newname),
+                                               intval($profile_uid)
+                               );
+               }
+
+               if ($r) {
+                       if(strlen($inform) AND (isset($r[0]["notify"]) OR isset($r[0]["id"])))
+                               $inform .= ',';
+
+                       if (isset($r[0]["id"]))
+                               $inform .= 'cid:' . $r[0]["id"];
+                       elseif (isset($r[0]["notify"]))
+                               $inform  .= $r[0]["notify"];
+
+                       $profile = $r[0]["url"];
+                       $alias   = $r[0]["alias"];
+                       $newname = $r[0]["nick"];
+                       if (($newname == "") OR (($r[0]["network"] != NETWORK_OSTATUS) AND ($r[0]["network"] != NETWORK_TWITTER)
+                               AND ($r[0]["network"] != NETWORK_STATUSNET) AND ($r[0]["network"] != NETWORK_APPNET)))
+                               $newname = $r[0]["name"];
+               }
+
+/*
                //is it a link or a full dfrn address?
                if((strpos($name,'@')) || (strpos($name,'http://'))) {
                        $newname = $name;
-
                        //get the profile links
                        $links = @lrdd($name);
                        if(count($links)) {
@@ -1176,6 +1290,8 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                                        );
                                }
                        }
+*/
+
 /*                     } elseif(strstr($name,'_') || strstr($name,' ')) { //no id
                                //get the real name
                                $newname = str_replace('_',' ',$name);
@@ -1192,6 +1308,8 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                                                intval($profile_uid)
                                );
                        }*/
+
+/*
                        //$r is set, if someone could be selected
                        if(count($r)) {
                                $profile = $r[0]['url'];
@@ -1211,29 +1329,10 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                                $inform .= 'cid:' . $r[0]['id'];
                        }
                }
-
-               if(!isset($profile)) {
-                       $r = q("SELECT `url` FROM `gcontact` WHERE `addr` = '%s' LIMIT 1",
-                               dbesc($name));
-                       if ($r)
-                               $profile = $r[0]["url"];
-               }
-
+*/
                //if there is an url for this persons profile
                if(isset($profile)) {
 
-                       $r = q("SELECT `nick`, `name`, `network` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
-                               dbesc(normalise_link($profile)));
-                       if ($r) {
-                               $newname = $r[0]["name"];
-
-                               //set newname to nick
-                               if(($r[0]['network'] === NETWORK_OSTATUS) OR ($r[0]['network'] === NETWORK_TWITTER)
-                                       OR ($r[0]['network'] === NETWORK_STATUSNET) OR ($r[0]['network'] === NETWORK_APPNET)) {
-                                       $newname = $r[0]['nick'];
-                               }
-                       }
-
                        $replaced = true;
                        //create profile link
                        $profile = str_replace(',','%2c',$profile);