Changing the tag system to the "term" table.
This commit is contained in:
		
					parent
					
						
							
								8cef0fa80d
							
						
					
				
			
			
				commit
				
					
						158bfda0ac
					
				
			
		
					 8 changed files with 100 additions and 47 deletions
				
			
		
							
								
								
									
										3
									
								
								boot.php
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								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 );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								database.sql
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								database.sql
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1037,10 +1037,11 @@
 | 
			
		|||
 | 
			
		||||
		$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)),
 | 
			
		||||
| 
						 | 
				
			
			@ -1051,8 +1052,8 @@
 | 
			
		|||
				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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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))
 | 
			
		||||
		);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								update.php
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								update.php
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue