]> git.mxchange.org Git - friendica.git/commitdiff
Changing the tag system to the "term" table.
authorMichael Vogel <icarus@dabo.de>
Sun, 13 Jan 2013 13:50:55 +0000 (14:50 +0100)
committerMichael Vogel <icarus@dabo.de>
Sun, 13 Jan 2013 13:50:55 +0000 (14:50 +0100)
boot.php
database.sql
include/api.php
include/tags.php
mod/network.php
mod/search.php
object/Item.php
update.php

index 7bd0fec4db307377a1277990bc0add0cb2b349fb..6864e533d8872cc924020822cf8b57586c0b3a2c 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -204,10 +204,11 @@ define ( 'NOTIFY_SYSTEM',   0x8000 );
 
 define ( 'TERM_UNKNOWN',   0 );
 define ( 'TERM_HASHTAG',   1 );
-define ( 'TERM_MENTION',   2 );   
+define ( 'TERM_MENTION',   2 );
 define ( 'TERM_CATEGORY',  3 );
 define ( 'TERM_PCATEGORY', 4 );
 define ( 'TERM_FILE',      5 );
+define ( 'TERM_SAVEDSEARCH', 6 );
 
 define ( 'TERM_OBJ_POST',  1 );
 define ( 'TERM_OBJ_PHOTO', 2 );
index f7fdfa3d9ee42fd3170d3901a67b746d0536192d..99d60429aeabf6737a0d8e99835ba9756d50089f 100644 (file)
@@ -1017,18 +1017,22 @@ CREATE TABLE IF NOT EXISTS `spam` (
 --
 
 CREATE TABLE IF NOT EXISTS `term` (
-  `tid` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-  `oid` INT UNSIGNED NOT NULL ,
-  `otype` TINYINT( 3 ) UNSIGNED NOT NULL ,
-  `type` TINYINT( 3 ) UNSIGNED NOT NULL ,
-  `term` CHAR( 255 ) NOT NULL ,
-  `url` CHAR( 255 ) NOT NULL, 
+  `tid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `aid` int(10) unsigned NOT NULL DEFAULT '0',
+  `uid` int(10) unsigned NOT NULL DEFAULT '0',
+  `oid` int(10) unsigned NOT NULL,
+  `otype` tinyint(3) unsigned NOT NULL,
+  `type` tinyint(3) unsigned NOT NULL,
+  `term` char(255) NOT NULL,
+  `url` char(255) NOT NULL,
   PRIMARY KEY (`tid`),
-  KEY `oid` ( `oid` ),
-  KEY `otype` ( `otype` ),
-  KEY `type`  ( `type` ),
-  KEY `term`  ( `term` )
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+  KEY `oid` (`oid`),
+  KEY `otype` (`otype`),
+  KEY `type` (`type`),
+  KEY `term` (`term`),
+  KEY `uid` (`uid`),
+  KEY `aid` (`aid`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
 
 -- --------------------------------------------------------
 
index 1b33378b0a59fb92a955d3322bda93b763120db1..4efb0c614a32523fd1502c07e59a43e682dea8be 100644 (file)
 
                $myurl = $a->get_baseurl() . '/profile/'. $a->user['nickname'];
                $myurl = substr($myurl,strpos($myurl,'://')+3);
-               $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
+               //$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
+               $myurl = str_replace('www.','',$myurl);
                $diasp_url = str_replace('/profile/','/u/',$myurl);
 
-               /*if (get_config('system','use_fulltext_engine'))
+/*             if (get_config('system','use_fulltext_engine'))
                        $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ",
                                dbesc(protect_sprintf($myurl)),
                                dbesc(protect_sprintf($myurl)),
                                dbesc(protect_sprintf('%' . $myurl)),
                                dbesc(protect_sprintf('%' . $myurl . ']%')),
                                dbesc(protect_sprintf('%' . $diasp_url . ']%'))
-                       );*/
-
+                       );
+*/
                $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)",
                        dbesc(protect_sprintf($myurl)),
                        dbesc(protect_sprintf($myurl))
index aabe40d1c6327428b08fc823a986ba0c9390b177..6a5728a9ba54115aad3e01eb8cba87658dc18c35 100644 (file)
@@ -12,12 +12,17 @@ if(is_null($db)) {
         unset($db_host, $db_user, $db_pass, $db_data);
 };
 
-$a->set_baseurl(get_config('system','url'));
+$a->set_baseurl("https://pirati.ca");
 */
 
 function create_tags_from_item($itemid) {
        global $a;
 
+       $profile_base = $a->get_baseurl();
+       $profile_data = parse_url($profile_base);
+       $profile_base_friendica = $profile_data['host'].$profile_data['path']."/profile/";
+       $profile_base_diaspora = $profile_data['host'].$profile_data['path']."/u/";
+
        $searchpath = $a->get_baseurl()."/search?tag=";
 
        $messages = q("SELECT `uri`, `uid`, `id`, `created`, `edited`, `commented`, `received`, `changed`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
@@ -28,7 +33,11 @@ function create_tags_from_item($itemid) {
        $message = $messages[0];
 
        // Clean up all tags
-       q("DELETE FROM `tag` WHERE `iid` = %d", intval($itemid));
+       q("DELETE FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)",
+               intval(TERM_OBJ_POST),
+               intval($itemid),
+               intval(TERM_HASHTAG),
+               intval(TERM_MENTION));
 
        if ($message["deleted"])
                return;
@@ -49,7 +58,7 @@ function create_tags_from_item($itemid) {
        $pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism";
        if (preg_match_all($pattern, $data, $matches))
                foreach ($matches[1] as $match)
-                       $tags["#".strtolower($match)] = $searchpath.strtolower($match);
+                       $tags["#".strtolower($match)] = ""; // $searchpath.strtolower($match);
 
        $pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism";
        if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
@@ -57,10 +66,31 @@ function create_tags_from_item($itemid) {
                        $tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
        }
 
-       foreach ($tags as $tag=>$link)
-               $r = q("INSERT INTO `tag` (`iid`, `tag`, `link`, `created`, `edited`, `commented`, `received`, `changed`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
-                       intval($itemid), dbesc($tag), dbesc($link), dbesc($message["created"]),
-                       dbesc($message["edited"]), dbesc($message["commented"]), dbesc($message["received"]), dbesc($message["changed"]));
+       foreach ($tags as $tag=>$link) {
+
+               if (substr(trim($tag), 0, 1) == "#") {
+                       $type = TERM_HASHTAG;
+                       $term = substr($tag, 1);
+               } elseif (substr(trim($tag), 0, 1) == "@") {
+                       $type = TERM_MENTION;
+                       $term = substr($tag, 1);
+               } else { // This shouldn't happen
+                       $type = TERM_HASHTAG;
+                       $term = $tag;
+               }
+
+               $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`) VALUES (%d, %d, %d, %d, '%s', '%s')",
+                       intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term), dbesc($link));
+
+               // Search for mentions
+               if ((substr($tag, 0, 1) == '@') AND (strpos($link, $profile_base_friendica) OR strpos($link, $profile_base_diaspora))) {
+                       $users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link);
+                       foreach ($users AS $user) {
+                               if ($user["uid"] == $message["uid"])
+                                       q("UPDATE `item` SET `mention` = 1 WHERE `id` = %d", intval($itemid));
+                       }
+               }
+       }
 }
 
 function create_tags_from_itemuri($itemuri, $uid) {
@@ -71,12 +101,16 @@ function create_tags_from_itemuri($itemuri, $uid) {
 }
 
 function update_items() {
-       $messages = q("SELECT `id` FROM `item` where tag !='' ORDER BY `created` DESC LIMIT 100");
+       //$messages = q("SELECT `id` FROM `item` where tag !='' ORDER BY `created` DESC limit 10");
+       $messages = q("SELECT `id` FROM `item` where tag !=''");
 
        foreach ($messages as $message)
                create_tags_from_item($message["id"]);
 }
 
+//print_r($tags);
+//print_r($hashtags);
+//print_r($mentions);
 //update_items();
 //create_tags_from_item(265194);
 //create_tags_from_itemuri("infoagent@diasp.org:cce94abd104c06e8", 2);
index ecef7c1dfbb85c60a78d799d8f27534d41167343..4a8b54762c6601ee5ff8124909299d953701471f 100644 (file)
@@ -689,7 +689,9 @@ function network_content(&$a, $update = 0) {
                                dbesc(protect_sprintf('%' . $diasp_url . ']%'))
                        );*/
 
-               $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)",
+               //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s') OR `mention`)",
+               //$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `mention`)",
+               $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where `author-link` IN ('https://%s', 'http://%s'))",
                        dbesc(protect_sprintf($myurl)),
                        dbesc(protect_sprintf($myurl))
                );
index aedd6394031f15ca6a06971623c98b5cc45f1962..c6d5989fb5b485c0f3f9b94193ba5ee1fe522041 100644 (file)
@@ -23,7 +23,7 @@ function search_saved_searches() {
                        );
                }
 
-               
+
                $tpl = get_markup_template("saved_searches_aside.tpl");
 
                $o .= replace_macros($tpl, array(
@@ -32,7 +32,7 @@ function search_saved_searches() {
                        '$searchbox' => '',
                        '$saved'         => $saved,
                ));
-       }               
+       }
 
        return $o;
 
@@ -127,7 +127,7 @@ function search_content(&$a) {
        if (get_config('system','only_tag_search'))
                $tag = true;
 
-       if (get_config('system','use_fulltext_engine')) {
+       /*if (get_config('system','use_fulltext_engine')) {
                if($tag)
                        $sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search)));
                else
@@ -137,15 +137,20 @@ function search_content(&$a) {
                        $sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ",  dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\['));
                else
                        $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
-       }
+       }*/
 
        if($tag) {
-               $sql_extra = sprintf(" AND `tag`.`tag` = '%s' ", '#'.dbesc(protect_sprintf($search)));
-               $sql_table = "`tag` LEFT JOIN `item` ON `item`.`id` = `tag`.`iid`";
-       } else
+               $sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d",
+                                       dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG));
+               $sql_table = "`term` LEFT JOIN `item` ON `item`.`id` = `term`.`oid` AND `item`.`uid` = `term`.`uid` ";
+       } else {
+               if (get_config('system','use_fulltext_engine')) {
+                       $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search)));
+               } else {
+                       $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
+               }
                $sql_table = "`item`";
-
-
+       }
 
        // Here is the way permissions work in the search module...
        // Only public posts can be shown
index 215c987b19e73a9d806fe3358bdd284aaf973dc3..648b5580714b1ab35766c86647fecac24855b594 100644 (file)
@@ -145,18 +145,27 @@ class Item extends BaseObject {
                call_hooks('render_location',$locate);
                $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
 
+               $searchpath = $a->get_baseurl()."/search?tag=";
                $tags=array();
                $hashtags = array();
                $mentions = array();
 
-               $taglist = q("select tag,link from tag where iid=%d", intval($item['id']));
+               $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)",
+                               intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION));
 
                foreach($taglist as $tag) {
-                       $tags[] = substr($tag["tag"], 0, 1)."<a href=\"".$tag["link"]."\" target=\"external-link\">".substr($tag["tag"], 1)."</a>";
-                       if (substr($tag["tag"], 0, 1) == "#")
-                               $hashtags[] = "#<a href=\"".$tag["link"]."\" target=\"external-link\">".substr($tag["tag"], 1)."</a>";
-                       elseif (substr($tag["tag"], 0, 1) == "@")
-                               $mentions[] = "@<a href=\"".$tag["link"]."\" target=\"external-link\">".substr($tag["tag"], 1)."</a>";
+
+                       if ($tag["url"] == "")
+                               $tag["url"] = $searchpath.strtolower($tag["term"]);
+
+                       if ($tag["type"] == TERM_HASHTAG) {
+                               $hashtags[] = "#<a href=\"".$tag["url"]."\" target=\"external-link\">".$tag["term"]."</a>";
+                               $prefix = "#";
+                       } elseif ($tag["type"] == TERM_MENTION) {
+                               $mentions[] = "@<a href=\"".$tag["url"]."\" target=\"external-link\">".$tag["term"]."</a>";
+                               $prefix = "@";
+                       }
+                       $tags[] = $prefix."<a href=\"".$tag["url"]."\" target=\"external-link\">".$tag["term"]."</a>";
                }
 
                /*foreach(explode(',',$item['tag']) as $tag){
index 04ae451a1ce34e57711ac6ea465e9deb8b55b38c..4bee3a3bc1bb05ef5167b2e986c82d46c7b9156c 100644 (file)
@@ -1371,13 +1371,10 @@ ADD INDEX ( `datasize` ) ");
 }
 
 function update_1157() {
-       $r = q("CREATE TABLE IF NOT EXISTS `tag` (
-  `iid` int(11) NOT NULL,
-  `tag` char(255) NOT NULL,
-  `link` char(255) NOT NULL,
-  PRIMARY KEY (`iid`, `tag`),
-  KEY `tag` (`tag`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
+       $r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0',
+               ADD `uid` int(10) unsigned NOT NULL DEFAULT '0',
+               ADD INDEX (`uid`),
+               ADD INDEX (`aid`)");
 
        if(!$r) return UPDATE_FAILED;
        return UPDATE_SUCCESS;