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
				
			
		
							
								
								
									
										1
									
								
								boot.php
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								boot.php
									
										
									
									
									
								
							|  | @ -208,6 +208,7 @@ define ( 'TERM_MENTION',   2 ); | ||||||
| define ( 'TERM_CATEGORY',  3 ); | define ( 'TERM_CATEGORY',  3 ); | ||||||
| define ( 'TERM_PCATEGORY', 4 ); | define ( 'TERM_PCATEGORY', 4 ); | ||||||
| define ( 'TERM_FILE',      5 ); | define ( 'TERM_FILE',      5 ); | ||||||
|  | define ( 'TERM_SAVEDSEARCH', 6 ); | ||||||
| 
 | 
 | ||||||
| define ( 'TERM_OBJ_POST',  1 ); | define ( 'TERM_OBJ_POST',  1 ); | ||||||
| define ( 'TERM_OBJ_PHOTO', 2 ); | define ( 'TERM_OBJ_PHOTO', 2 ); | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								database.sql
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								database.sql
									
										
									
									
									
								
							|  | @ -1017,17 +1017,21 @@ CREATE TABLE IF NOT EXISTS `spam` ( | ||||||
| -- | -- | ||||||
| 
 | 
 | ||||||
| CREATE TABLE IF NOT EXISTS `term` ( | CREATE TABLE IF NOT EXISTS `term` ( | ||||||
|   `tid` INT UNSIGNED NOT NULL AUTO_INCREMENT, |   `tid` int(10) unsigned NOT NULL AUTO_INCREMENT, | ||||||
|   `oid` INT UNSIGNED NOT NULL , |   `aid` int(10) unsigned NOT NULL DEFAULT '0', | ||||||
|   `otype` TINYINT( 3 ) UNSIGNED NOT NULL , |   `uid` int(10) unsigned NOT NULL DEFAULT '0', | ||||||
|   `type` TINYINT( 3 ) UNSIGNED NOT NULL , |   `oid` int(10) unsigned NOT NULL, | ||||||
|   `term` CHAR( 255 ) NOT NULL , |   `otype` tinyint(3) unsigned NOT NULL, | ||||||
|   `url` CHAR( 255 ) NOT NULL,  |   `type` tinyint(3) unsigned NOT NULL, | ||||||
|  |   `term` char(255) NOT NULL, | ||||||
|  |   `url` char(255) NOT NULL, | ||||||
|   PRIMARY KEY (`tid`), |   PRIMARY KEY (`tid`), | ||||||
|   KEY `oid` (`oid`), |   KEY `oid` (`oid`), | ||||||
|   KEY `otype` (`otype`), |   KEY `otype` (`otype`), | ||||||
|   KEY `type` (`type`), |   KEY `type` (`type`), | ||||||
|   KEY `term`  ( `term` ) |   KEY `term` (`term`), | ||||||
|  |   KEY `uid` (`uid`), | ||||||
|  |   KEY `aid` (`aid`) | ||||||
| ) ENGINE=MyISAM  DEFAULT CHARSET=utf8; | ) ENGINE=MyISAM  DEFAULT CHARSET=utf8; | ||||||
| 
 | 
 | ||||||
| -- -------------------------------------------------------- | -- -------------------------------------------------------- | ||||||
|  |  | ||||||
|  | @ -1037,7 +1037,8 @@ | ||||||
| 
 | 
 | ||||||
| 		$myurl = $a->get_baseurl() . '/profile/'. $a->user['nickname']; | 		$myurl = $a->get_baseurl() . '/profile/'. $a->user['nickname']; | ||||||
| 		$myurl = substr($myurl,strpos($myurl,'://')+3); | 		$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); | 		$diasp_url = str_replace('/profile/','/u/',$myurl); | ||||||
| 
 | 
 | ||||||
| /*		if (get_config('system','use_fulltext_engine')) | /*		if (get_config('system','use_fulltext_engine')) | ||||||
|  | @ -1051,8 +1052,8 @@ | ||||||
| 				dbesc(protect_sprintf('%' . $myurl)), | 				dbesc(protect_sprintf('%' . $myurl)), | ||||||
| 				dbesc(protect_sprintf('%' . $myurl . ']%')), | 				dbesc(protect_sprintf('%' . $myurl . ']%')), | ||||||
| 				dbesc(protect_sprintf('%' . $diasp_url . ']%')) | 				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`)", | ||||||
| 			dbesc(protect_sprintf($myurl)), | 			dbesc(protect_sprintf($myurl)), | ||||||
| 			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); |         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) { | function create_tags_from_item($itemid) { | ||||||
| 	global $a; | 	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="; | 	$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)); | 	$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]; | 	$message = $messages[0]; | ||||||
| 
 | 
 | ||||||
| 	// Clean up all tags
 | 	// 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"]) | 	if ($message["deleted"]) | ||||||
| 		return; | 		return; | ||||||
|  | @ -49,7 +58,7 @@ function create_tags_from_item($itemid) { | ||||||
| 	$pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; | 	$pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; | ||||||
| 	if (preg_match_all($pattern, $data, $matches)) | 	if (preg_match_all($pattern, $data, $matches)) | ||||||
| 		foreach ($matches[1] as $match) | 		foreach ($matches[1] as $match) | ||||||
| 			$tags["#".strtolower($match)] = $searchpath.strtolower($match); | 			$tags["#".strtolower($match)] = ""; // $searchpath.strtolower($match);
 | ||||||
| 
 | 
 | ||||||
| 	$pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism"; | 	$pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism"; | ||||||
| 	if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) { | 	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]; | 			$tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	foreach ($tags as $tag=>$link) | 	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"]), | 		if (substr(trim($tag), 0, 1) == "#") { | ||||||
| 			dbesc($message["edited"]), dbesc($message["commented"]), dbesc($message["received"]), dbesc($message["changed"])); | 			$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) { | function create_tags_from_itemuri($itemuri, $uid) { | ||||||
|  | @ -71,12 +101,16 @@ function create_tags_from_itemuri($itemuri, $uid) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function update_items() { | 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) | 	foreach ($messages as $message) | ||||||
| 		create_tags_from_item($message["id"]); | 		create_tags_from_item($message["id"]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //print_r($tags);
 | ||||||
|  | //print_r($hashtags);
 | ||||||
|  | //print_r($mentions);
 | ||||||
| //update_items();
 | //update_items();
 | ||||||
| //create_tags_from_item(265194);
 | //create_tags_from_item(265194);
 | ||||||
| //create_tags_from_itemuri("infoagent@diasp.org:cce94abd104c06e8", 2);
 | //create_tags_from_itemuri("infoagent@diasp.org:cce94abd104c06e8", 2);
 | ||||||
|  |  | ||||||
|  | @ -689,7 +689,9 @@ function network_content(&$a, $update = 0) { | ||||||
| 				dbesc(protect_sprintf('%' . $diasp_url . ']%')) | 				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)), | ||||||
| 			dbesc(protect_sprintf($myurl)) | 			dbesc(protect_sprintf($myurl)) | ||||||
| 		); | 		); | ||||||
|  |  | ||||||
|  | @ -127,7 +127,7 @@ function search_content(&$a) { | ||||||
| 	if (get_config('system','only_tag_search')) | 	if (get_config('system','only_tag_search')) | ||||||
| 		$tag = true; | 		$tag = true; | ||||||
| 
 | 
 | ||||||
| 	if (get_config('system','use_fulltext_engine')) { | 	/*if (get_config('system','use_fulltext_engine')) { | ||||||
| 		if($tag) | 		if($tag) | ||||||
| 			$sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search))); | 			$sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search))); | ||||||
| 		else | 		else | ||||||
|  | @ -137,15 +137,20 @@ function search_content(&$a) { | ||||||
| 			$sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", 	dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\[')); | 			$sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", 	dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\[')); | ||||||
| 		else | 		else | ||||||
| 			$sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); | 			$sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); | ||||||
| 	} | 	}*/ | ||||||
| 
 | 
 | ||||||
| 	if($tag) { | 	if($tag) { | ||||||
| 		$sql_extra = sprintf(" AND `tag`.`tag` = '%s' ", '#'.dbesc(protect_sprintf($search))); | 		$sql_extra = sprintf(" AND `term`.`term` = '%s' AND `term`.`otype` = %d AND `term`.`type` = %d", | ||||||
| 		$sql_table = "`tag` LEFT JOIN `item` ON `item`.`id` = `tag`.`iid`"; | 					dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); | ||||||
| 	} else | 		$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`"; | 		$sql_table = "`item`"; | ||||||
| 
 | 	} | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 	// Here is the way permissions work in the search module...
 | 	// Here is the way permissions work in the search module...
 | ||||||
| 	// Only public posts can be shown
 | 	// Only public posts can be shown
 | ||||||
|  |  | ||||||
|  | @ -145,18 +145,27 @@ class Item extends BaseObject { | ||||||
| 		call_hooks('render_location',$locate); | 		call_hooks('render_location',$locate); | ||||||
| 		$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate)); | 		$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate)); | ||||||
| 
 | 
 | ||||||
|  | 		$searchpath = $a->get_baseurl()."/search?tag="; | ||||||
| 		$tags=array(); | 		$tags=array(); | ||||||
| 		$hashtags = array(); | 		$hashtags = array(); | ||||||
| 		$mentions = 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) { | 		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) == "#") | 			if ($tag["url"] == "") | ||||||
| 				$hashtags[] = "#<a href=\"".$tag["link"]."\" target=\"external-link\">".substr($tag["tag"], 1)."</a>"; | 				$tag["url"] = $searchpath.strtolower($tag["term"]); | ||||||
| 			elseif (substr($tag["tag"], 0, 1) == "@") | 
 | ||||||
| 				$mentions[] = "@<a href=\"".$tag["link"]."\" target=\"external-link\">".substr($tag["tag"], 1)."</a>"; | 			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){ | 		/*foreach(explode(',',$item['tag']) as $tag){ | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								update.php
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								update.php
									
										
									
									
									
								
							|  | @ -1371,13 +1371,10 @@ ADD INDEX ( `datasize` ) "); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function update_1157() { | function update_1157() { | ||||||
| 	$r = q("CREATE TABLE IF NOT EXISTS `tag` (
 | 	$r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0',
 | ||||||
|   `iid` int(11) NOT NULL, | 		ADD `uid` int(10) unsigned NOT NULL DEFAULT '0', | ||||||
|   `tag` char(255) NOT NULL, | 		ADD INDEX (`uid`), | ||||||
|   `link` char(255) NOT NULL, | 		ADD INDEX (`aid`)");
 | ||||||
|   PRIMARY KEY (`iid`, `tag`), |  | ||||||
|   KEY `tag` (`tag`) |  | ||||||
| ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
 |  | ||||||
| 
 | 
 | ||||||
| 	if(!$r) return UPDATE_FAILED; | 	if(!$r) return UPDATE_FAILED; | ||||||
| 	return UPDATE_SUCCESS; | 	return UPDATE_SUCCESS; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue