convert tabs to spaces
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@407 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
parent
5d11ae2fd5
commit
9f53c3325c
13 changed files with 2063 additions and 2063 deletions
|
@ -8,475 +8,475 @@ class SemanticScuttle_Service_Bookmark2Tag extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($db)
|
public function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'bookmarks2tags';
|
$this->tablename = $GLOBALS['tableprefix'] .'bookmarks2tags';
|
||||||
}
|
}
|
||||||
|
|
||||||
function isNotSystemTag($var) {
|
function isNotSystemTag($var) {
|
||||||
if (utf8_substr($var, 0, 7) == 'system:')
|
if (utf8_substr($var, 0, 7) == 'system:')
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function attachTags($bookmarkid, $tags, $fromApi = false, $extension = NULL, $replace = true, $fromImport = false) {
|
function attachTags($bookmarkid, $tags, $fromApi = false, $extension = NULL, $replace = true, $fromImport = false) {
|
||||||
// Make sure that categories is an array of trimmed strings, and that if the categories are
|
// Make sure that categories is an array of trimmed strings, and that if the categories are
|
||||||
// coming in from an API call to add a bookmark, that underscores are converted into strings.
|
// coming in from an API call to add a bookmark, that underscores are converted into strings.
|
||||||
|
|
||||||
if (!is_array($tags)) {
|
if (!is_array($tags)) {
|
||||||
$tags = trim($tags);
|
$tags = trim($tags);
|
||||||
if ($tags != '') {
|
if ($tags != '') {
|
||||||
if (substr($tags, -1) == ',') {
|
if (substr($tags, -1) == ',') {
|
||||||
$tags = substr($tags, 0, -1);
|
$tags = substr($tags, 0, -1);
|
||||||
}
|
}
|
||||||
if ($fromApi) {
|
if ($fromApi) {
|
||||||
$tags = explode(' ', $tags);
|
$tags = explode(' ', $tags);
|
||||||
} else {
|
} else {
|
||||||
$tags = explode(',', $tags);
|
$tags = explode(',', $tags);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$tags = null;
|
$tags = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tags = $tagservice->normalize($tags);
|
$tags = $tagservice->normalize($tags);
|
||||||
|
|
||||||
|
|
||||||
$tags_count = is_array($tags)?count($tags):0;
|
$tags_count = is_array($tags)?count($tags):0;
|
||||||
|
|
||||||
for ($i = 0; $i < $tags_count; $i++) {
|
for ($i = 0; $i < $tags_count; $i++) {
|
||||||
$tags[$i] = trim(strtolower($tags[$i]));
|
$tags[$i] = trim(strtolower($tags[$i]));
|
||||||
if ($fromApi) {
|
if ($fromApi) {
|
||||||
include_once 'SemanticScuttle/functions.php';
|
include_once 'SemanticScuttle/functions.php';
|
||||||
$tags[$i] = convertTag($tags[$i], 'in');
|
$tags[$i] = convertTag($tags[$i], 'in');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($tags_count > 0) {
|
if ($tags_count > 0) {
|
||||||
// Remove system tags
|
// Remove system tags
|
||||||
$tags = array_filter($tags, array($this, "isNotSystemTag"));
|
$tags = array_filter($tags, array($this, "isNotSystemTag"));
|
||||||
|
|
||||||
// Eliminate any duplicate categories
|
// Eliminate any duplicate categories
|
||||||
$temp = array_unique($tags);
|
$temp = array_unique($tags);
|
||||||
$tags = array_values($temp);
|
$tags = array_values($temp);
|
||||||
} else {
|
} else {
|
||||||
// Unfiled
|
// Unfiled
|
||||||
$tags[] = 'system:unfiled';
|
$tags[] = 'system:unfiled';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Media and file types
|
// Media and file types
|
||||||
if (!is_null($extension)) {
|
if (!is_null($extension)) {
|
||||||
include_once 'SemanticScuttle/functions.php';
|
include_once 'SemanticScuttle/functions.php';
|
||||||
|
|
||||||
if ($keys = multi_array_search($extension, $GLOBALS['filetypes'])) {
|
if ($keys = multi_array_search($extension, $GLOBALS['filetypes'])) {
|
||||||
$tags[] = 'system:filetype:'. $extension;
|
$tags[] = 'system:filetype:'. $extension;
|
||||||
$tags[] = 'system:media:'. array_shift($keys);
|
$tags[] = 'system:media:'. array_shift($keys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Imported
|
// Imported
|
||||||
if ($fromImport) {
|
if ($fromImport) {
|
||||||
$tags[] = 'system:imported';
|
$tags[] = 'system:imported';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_transaction('begin');
|
$this->db->sql_transaction('begin');
|
||||||
|
|
||||||
if ($replace) {
|
if ($replace) {
|
||||||
if (!$this->deleteTagsForBookmark($bookmarkid)){
|
if (!$this->deleteTagsForBookmark($bookmarkid)){
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not attach tags (deleting old ones failed)', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not attach tags (deleting old ones failed)', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$bs =SemanticScuttle_Service_Factory::get('Bookmark');
|
$bs =SemanticScuttle_Service_Factory::get('Bookmark');
|
||||||
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
||||||
|
|
||||||
// Create links between tags
|
// Create links between tags
|
||||||
foreach($tags as $key => $tag) {
|
foreach($tags as $key => $tag) {
|
||||||
if(strpos($tag, '=')) {
|
if(strpos($tag, '=')) {
|
||||||
// case "="
|
// case "="
|
||||||
$pieces = explode('=', $tag);
|
$pieces = explode('=', $tag);
|
||||||
$nbPieces = count($pieces);
|
$nbPieces = count($pieces);
|
||||||
if($nbPieces > 1) {
|
if($nbPieces > 1) {
|
||||||
for($i = 0; $i < $nbPieces-1; $i++) {
|
for($i = 0; $i < $nbPieces-1; $i++) {
|
||||||
$bookmark = $bs->getBookmark($bookmarkid);
|
$bookmark = $bs->getBookmark($bookmarkid);
|
||||||
$uId = $bookmark['uId'];
|
$uId = $bookmark['uId'];
|
||||||
$tts->addLinkedTags($pieces[$i], $pieces[$i+1], '=', $uId);
|
$tts->addLinkedTags($pieces[$i], $pieces[$i+1], '=', $uId);
|
||||||
}
|
}
|
||||||
$tags[$key] = $pieces[0]; // Attach just the last tag to the bookmark
|
$tags[$key] = $pieces[0]; // Attach just the last tag to the bookmark
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// case ">"
|
// case ">"
|
||||||
$pieces = explode('>', $tag);
|
$pieces = explode('>', $tag);
|
||||||
$nbPieces = count($pieces);
|
$nbPieces = count($pieces);
|
||||||
if($nbPieces > 1) {
|
if($nbPieces > 1) {
|
||||||
for($i = 0; $i < $nbPieces-1; $i++) {
|
for($i = 0; $i < $nbPieces-1; $i++) {
|
||||||
$bookmark = $bs->getBookmark($bookmarkid);
|
$bookmark = $bs->getBookmark($bookmarkid);
|
||||||
$uId = $bookmark['uId'];
|
$uId = $bookmark['uId'];
|
||||||
$tts->addLinkedTags($pieces[$i], $pieces[$i+1], '>', $uId);
|
$tts->addLinkedTags($pieces[$i], $pieces[$i+1], '>', $uId);
|
||||||
}
|
}
|
||||||
$tags[$key] = $pieces[$nbPieces-1]; // Attach just the last tag to the bookmark
|
$tags[$key] = $pieces[$nbPieces-1]; // Attach just the last tag to the bookmark
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the categories to the DB.
|
// Add the categories to the DB.
|
||||||
for ($i = 0; $i < count($tags); $i++) {
|
for ($i = 0; $i < count($tags); $i++) {
|
||||||
if ($tags[$i] != '') {
|
if ($tags[$i] != '') {
|
||||||
$values = array(
|
$values = array(
|
||||||
'bId' => intval($bookmarkid),
|
'bId' => intval($bookmarkid),
|
||||||
'tag' => $tags[$i]
|
'tag' => $tags[$i]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!$this->hasTag($bookmarkid, $tags[$i])) {
|
if (!$this->hasTag($bookmarkid, $tags[$i])) {
|
||||||
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
if (!($dbresult =& $this->db->sql_query($sql))) {
|
if (!($dbresult =& $this->db->sql_query($sql))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not attach tags', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not attach tags', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->sql_transaction('commit');
|
$this->db->sql_transaction('commit');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteTag($uId, $tag) {
|
function deleteTag($uId, $tag) {
|
||||||
$bs =SemanticScuttle_Service_Factory::get('Bookmark');
|
$bs =SemanticScuttle_Service_Factory::get('Bookmark');
|
||||||
|
|
||||||
$query = 'DELETE FROM '. $this->getTableName();
|
$query = 'DELETE FROM '. $this->getTableName();
|
||||||
$query.= ' USING '. $this->getTableName() .', '. $bs->getTableName();
|
$query.= ' USING '. $this->getTableName() .', '. $bs->getTableName();
|
||||||
$query.= ' WHERE '. $this->getTableName() .'.bId = '. $bs->getTableName() .'.bId';
|
$query.= ' WHERE '. $this->getTableName() .'.bId = '. $bs->getTableName() .'.bId';
|
||||||
$query.= ' AND '. $bs->getTableName() .'.uId = '. $uId;
|
$query.= ' AND '. $bs->getTableName() .'.uId = '. $uId;
|
||||||
$query.= ' AND '. $this->getTableName() .'.tag = "'. $this->db->sql_escape($tag) .'"';
|
$query.= ' AND '. $this->getTableName() .'.tag = "'. $this->db->sql_escape($tag) .'"';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteTagsForBookmark($bookmarkid) {
|
function deleteTagsForBookmark($bookmarkid) {
|
||||||
if (!is_int($bookmarkid)) {
|
if (!is_int($bookmarkid)) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query);
|
message_die(GENERAL_ERROR, 'Could not delete tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'DELETE FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid);
|
$query = 'DELETE FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid);
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow deletion in admin page */
|
/* Allow deletion in admin page */
|
||||||
function deleteTagsForUser($uId) {
|
function deleteTagsForUser($uId) {
|
||||||
$qmask = 'DELETE FROM %s USING %s, %s WHERE %s.bId = %s.bId AND %s.uId = %d';
|
$qmask = 'DELETE FROM %s USING %s, %s WHERE %s.bId = %s.bId AND %s.uId = %d';
|
||||||
$query = sprintf($qmask,
|
$query = sprintf($qmask,
|
||||||
$this->getTableName(),
|
$this->getTableName(),
|
||||||
$this->getTableName(),
|
$this->getTableName(),
|
||||||
$GLOBALS['tableprefix'].'bookmarks',
|
$GLOBALS['tableprefix'].'bookmarks',
|
||||||
$this->getTableName(),
|
$this->getTableName(),
|
||||||
$GLOBALS['tableprefix'].'bookmarks',
|
$GLOBALS['tableprefix'].'bookmarks',
|
||||||
$GLOBALS['tableprefix'].'bookmarks',
|
$GLOBALS['tableprefix'].'bookmarks',
|
||||||
$uId);
|
$uId);
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function &getTagsForBookmark($bookmarkid) {
|
function &getTagsForBookmark($bookmarkid) {
|
||||||
if (!is_numeric($bookmarkid)) {
|
if (!is_numeric($bookmarkid)) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query);
|
message_die(GENERAL_ERROR, 'Could not get tags (invalid bookmarkid)', '', __LINE__, __FILE__, $query);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'SELECT tag FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND LEFT(tag, 7) <> "system:" ORDER BY id ASC';
|
$query = 'SELECT tag FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND LEFT(tag, 7) <> "system:" ORDER BY id ASC';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$tags = array();
|
$tags = array();
|
||||||
while ($row =& $this->db->sql_fetchrow($dbresult)) {
|
while ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
$tags[] = $row['tag'];
|
$tags[] = $row['tag'];
|
||||||
}
|
}
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $tags;
|
return $tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
function &getTags($userid = NULL) {
|
function &getTags($userid = NULL) {
|
||||||
$userservice =SemanticScuttle_Service_Factory::get('User');
|
$userservice =SemanticScuttle_Service_Factory::get('User');
|
||||||
$logged_on_user = $userservice->getCurrentUserId();
|
$logged_on_user = $userservice->getCurrentUserId();
|
||||||
|
|
||||||
$query = 'SELECT T.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B INNER JOIN '. $userservice->getTableName() .' AS U ON B.uId = U.'. $userservice->getFieldName('primary') .' INNER JOIN '. $GLOBALS['tableprefix'] .'bookmarks2tags AS T ON B.bId = T.bId';
|
$query = 'SELECT T.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B INNER JOIN '. $userservice->getTableName() .' AS U ON B.uId = U.'. $userservice->getFieldName('primary') .' INNER JOIN '. $GLOBALS['tableprefix'] .'bookmarks2tags AS T ON B.bId = T.bId';
|
||||||
|
|
||||||
$conditions = array();
|
$conditions = array();
|
||||||
if (!is_null($userid)) {
|
if (!is_null($userid)) {
|
||||||
$conditions['U.'. $userservice->getFieldName('primary')] = intval($userid);
|
$conditions['U.'. $userservice->getFieldName('primary')] = intval($userid);
|
||||||
if ($logged_on_user != $userid)
|
if ($logged_on_user != $userid)
|
||||||
$conditions['B.bStatus'] = 0;
|
$conditions['B.bStatus'] = 0;
|
||||||
} else {
|
} else {
|
||||||
$conditions['B.bStatus'] = 0;
|
$conditions['B.bStatus'] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query .= ' WHERE '. $this->db->sql_build_array('SELECT', $conditions) .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag';
|
$query .= ' WHERE '. $this->db->sql_build_array('SELECT', $conditions) .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Returns the tags related to the specified tags; i.e. attached to the same bookmarks
|
// Returns the tags related to the specified tags; i.e. attached to the same bookmarks
|
||||||
function &getRelatedTags($tags, $for_user = NULL, $logged_on_user = NULL, $limit = 10) {
|
function &getRelatedTags($tags, $for_user = NULL, $logged_on_user = NULL, $limit = 10) {
|
||||||
$conditions = array();
|
$conditions = array();
|
||||||
// Only count the tags that are visible to the current user.
|
// Only count the tags that are visible to the current user.
|
||||||
if ($for_user != $logged_on_user || is_null($for_user))
|
if ($for_user != $logged_on_user || is_null($for_user))
|
||||||
$conditions['B.bStatus'] = 0;
|
$conditions['B.bStatus'] = 0;
|
||||||
|
|
||||||
if (!is_null($for_user))
|
if (!is_null($for_user))
|
||||||
$conditions['B.uId'] = $for_user;
|
$conditions['B.uId'] = $for_user;
|
||||||
|
|
||||||
// Set up the tags, if need be.
|
// Set up the tags, if need be.
|
||||||
if (is_numeric($tags))
|
if (is_numeric($tags))
|
||||||
$tags = NULL;
|
$tags = NULL;
|
||||||
if (!is_array($tags) and !is_null($tags))
|
if (!is_array($tags) and !is_null($tags))
|
||||||
$tags = explode('+', trim($tags));
|
$tags = explode('+', trim($tags));
|
||||||
|
|
||||||
$tagcount = count($tags);
|
$tagcount = count($tags);
|
||||||
for ($i = 0; $i < $tagcount; $i++) {
|
for ($i = 0; $i < $tagcount; $i++) {
|
||||||
$tags[$i] = trim($tags[$i]);
|
$tags[$i] = trim($tags[$i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the SQL query.
|
// Set up the SQL query.
|
||||||
$query_1 = 'SELECT DISTINCTROW T0.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B, '. $this->getTableName() .' AS T0';
|
$query_1 = 'SELECT DISTINCTROW T0.tag, COUNT(B.bId) AS bCount FROM '. $GLOBALS['tableprefix'] .'bookmarks AS B, '. $this->getTableName() .' AS T0';
|
||||||
$query_2 = '';
|
$query_2 = '';
|
||||||
$query_3 = ' WHERE B.bId = T0.bId ';
|
$query_3 = ' WHERE B.bId = T0.bId ';
|
||||||
if (count($conditions) > 0)
|
if (count($conditions) > 0)
|
||||||
$query_4 = ' AND '. $this->db->sql_build_array('SELECT', $conditions);
|
$query_4 = ' AND '. $this->db->sql_build_array('SELECT', $conditions);
|
||||||
else
|
else
|
||||||
$query_4 = '';
|
$query_4 = '';
|
||||||
// Handle the parts of the query that depend on any tags that are present.
|
// Handle the parts of the query that depend on any tags that are present.
|
||||||
for ($i = 1; $i <= $tagcount; $i++) {
|
for ($i = 1; $i <= $tagcount; $i++) {
|
||||||
$query_2 .= ', '. $this->getTableName() .' AS T'. $i;
|
$query_2 .= ', '. $this->getTableName() .' AS T'. $i;
|
||||||
$query_4 .= ' AND T'. $i .'.bId = B.bId AND T'. $i .'.tag = "'. $this->db->sql_escape($tags[$i - 1]) .'" AND T0.tag <> "'. $this->db->sql_escape($tags[$i - 1]) .'"';
|
$query_4 .= ' AND T'. $i .'.bId = B.bId AND T'. $i .'.tag = "'. $this->db->sql_escape($tags[$i - 1]) .'" AND T0.tag <> "'. $this->db->sql_escape($tags[$i - 1]) .'"';
|
||||||
}
|
}
|
||||||
$query_5 = ' AND LEFT(T0.tag, 7) <> "system:" GROUP BY T0.tag ORDER BY bCount DESC, T0.tag';
|
$query_5 = ' AND LEFT(T0.tag, 7) <> "system:" GROUP BY T0.tag ORDER BY bCount DESC, T0.tag';
|
||||||
$query = $query_1 . $query_2 . $query_3 . $query_4 . $query_5;
|
$query = $query_1 . $query_2 . $query_3 . $query_4 . $query_5;
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query_limit($query, $limit)) ){
|
if (! ($dbresult =& $this->db->sql_query_limit($query, $limit)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the most popular tags used for a particular bookmark hash
|
// Returns the most popular tags used for a particular bookmark hash
|
||||||
function &getRelatedTagsByHash($hash, $limit = 20) {
|
function &getRelatedTagsByHash($hash, $limit = 20) {
|
||||||
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
||||||
$sId = $userservice->getCurrentUserId();
|
$sId = $userservice->getCurrentUserId();
|
||||||
// Logged in
|
// Logged in
|
||||||
if ($userservice->isLoggedOn()) {
|
if ($userservice->isLoggedOn()) {
|
||||||
$arrWatch = $userservice->getWatchList($sId);
|
$arrWatch = $userservice->getWatchList($sId);
|
||||||
// From public bookmarks or user's own
|
// From public bookmarks or user's own
|
||||||
$privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')';
|
$privacy = ' AND ((B.bStatus = 0) OR (B.uId = '. $sId .')';
|
||||||
// From shared bookmarks in watchlist
|
// From shared bookmarks in watchlist
|
||||||
foreach ($arrWatch as $w) {
|
foreach ($arrWatch as $w) {
|
||||||
$privacy .= ' OR (B.uId = '. $w .' AND B.bStatus = 1)';
|
$privacy .= ' OR (B.uId = '. $w .' AND B.bStatus = 1)';
|
||||||
}
|
}
|
||||||
$privacy .= ') ';
|
$privacy .= ') ';
|
||||||
// Not logged in
|
// Not logged in
|
||||||
} else {
|
} else {
|
||||||
$privacy = ' AND B.bStatus = 0 ';
|
$privacy = ' AND B.bStatus = 0 ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'SELECT T.tag, COUNT(T.tag) AS bCount FROM '.$GLOBALS['tableprefix'].'bookmarks AS B LEFT JOIN '.$GLOBALS['tableprefix'].'bookmarks2tags AS T ON B.bId = T.bId WHERE B.bHash = "'. $hash .'" '. $privacy .'AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC';
|
$query = 'SELECT T.tag, COUNT(T.tag) AS bCount FROM '.$GLOBALS['tableprefix'].'bookmarks AS B LEFT JOIN '.$GLOBALS['tableprefix'].'bookmarks2tags AS T ON B.bId = T.bId WHERE B.bHash = "'. $hash .'" '. $privacy .'AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) {
|
if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags for this hash', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags for this hash', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function &getAdminTags($limit = 30, $logged_on_user = NULL, $days = NULL) {
|
function &getAdminTags($limit = 30, $logged_on_user = NULL, $days = NULL) {
|
||||||
// look for admin ids
|
// look for admin ids
|
||||||
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
||||||
$adminIds = $userservice->getAdminIds();
|
$adminIds = $userservice->getAdminIds();
|
||||||
|
|
||||||
// ask for their tags
|
// ask for their tags
|
||||||
return $this->getPopularTags($adminIds, $limit, $logged_on_user, $days);
|
return $this->getPopularTags($adminIds, $limit, $logged_on_user, $days);
|
||||||
}
|
}
|
||||||
|
|
||||||
function &getContactTags($user, $limit = 30, $logged_on_user = NULL, $days = NULL) {
|
function &getContactTags($user, $limit = 30, $logged_on_user = NULL, $days = NULL) {
|
||||||
// look for contact ids
|
// look for contact ids
|
||||||
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
||||||
$contacts = $userservice->getWatchlist($user);
|
$contacts = $userservice->getWatchlist($user);
|
||||||
|
|
||||||
// add the user (to show him/her also his/her tags)
|
// add the user (to show him/her also his/her tags)
|
||||||
if(!is_null($logged_on_user)) {
|
if(!is_null($logged_on_user)) {
|
||||||
$contacts[] = $logged_on_user;
|
$contacts[] = $logged_on_user;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ask for their tags
|
// ask for their tags
|
||||||
return $this->getPopularTags($contacts, $limit, $logged_on_user, $days);
|
return $this->getPopularTags($contacts, $limit, $logged_on_user, $days);
|
||||||
}
|
}
|
||||||
|
|
||||||
// $users can be {NULL, an id, an array of id}
|
// $users can be {NULL, an id, an array of id}
|
||||||
function &getPopularTags($user = NULL, $limit = 30, $logged_on_user = NULL, $days = NULL) {
|
function &getPopularTags($user = NULL, $limit = 30, $logged_on_user = NULL, $days = NULL) {
|
||||||
// Only count the tags that are visible to the current user.
|
// Only count the tags that are visible to the current user.
|
||||||
if (($user != $logged_on_user) || is_null($user) || ($user === false))
|
if (($user != $logged_on_user) || is_null($user) || ($user === false))
|
||||||
$privacy = ' AND B.bStatus = 0';
|
$privacy = ' AND B.bStatus = 0';
|
||||||
else
|
else
|
||||||
$privacy = '';
|
$privacy = '';
|
||||||
|
|
||||||
if (is_null($days) || !is_int($days))
|
if (is_null($days) || !is_int($days))
|
||||||
$span = '';
|
$span = '';
|
||||||
else
|
else
|
||||||
$span = ' AND B.bDatetime > "'. date('Y-m-d H:i:s', time() - (86400 * $days)) .'"';
|
$span = ' AND B.bDatetime > "'. date('Y-m-d H:i:s', time() - (86400 * $days)) .'"';
|
||||||
|
|
||||||
$query = 'SELECT T.tag, COUNT(T.bId) AS bCount FROM '. $this->getTableName() .' AS T, '. $GLOBALS['tableprefix'] .'bookmarks AS B WHERE ';
|
$query = 'SELECT T.tag, COUNT(T.bId) AS bCount FROM '. $this->getTableName() .' AS T, '. $GLOBALS['tableprefix'] .'bookmarks AS B WHERE ';
|
||||||
if (is_null($user) || ($user === false)) {
|
if (is_null($user) || ($user === false)) {
|
||||||
$query .= 'B.bId = T.bId AND B.bStatus = 0';
|
$query .= 'B.bId = T.bId AND B.bStatus = 0';
|
||||||
} elseif(is_array($user)) {
|
} elseif(is_array($user)) {
|
||||||
$query .= ' (1 = 0'; //tricks
|
$query .= ' (1 = 0'; //tricks
|
||||||
foreach($user as $u) {
|
foreach($user as $u) {
|
||||||
$query .= ' OR B.uId = '. $this->db->sql_escape($u) .' AND B.bId = T.bId';
|
$query .= ' OR B.uId = '. $this->db->sql_escape($u) .' AND B.bId = T.bId';
|
||||||
}
|
}
|
||||||
$query .= ' )';
|
$query .= ' )';
|
||||||
} else {
|
} else {
|
||||||
$query .= 'B.uId = '. $this->db->sql_escape($user) .' AND B.bId = T.bId'. $privacy;
|
$query .= 'B.uId = '. $this->db->sql_escape($user) .' AND B.bId = T.bId'. $privacy;
|
||||||
}
|
}
|
||||||
$query .= $span .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag';
|
$query .= $span .' AND LEFT(T.tag, 7) <> "system:" GROUP BY T.tag ORDER BY bCount DESC, tag';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) {
|
if (!($dbresult =& $this->db->sql_query_limit($query, $limit))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get popular tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get popular tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasTag($bookmarkid, $tag) {
|
function hasTag($bookmarkid, $tag) {
|
||||||
$query = 'SELECT COUNT(*) AS tCount FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND tag ="'. $this->db->sql_escape($tag) .'"';
|
$query = 'SELECT COUNT(*) AS tCount FROM '. $this->getTableName() .' WHERE bId = '. intval($bookmarkid) .' AND tag ="'. $this->db->sql_escape($tag) .'"';
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ) {
|
if (! ($dbresult =& $this->db->sql_query($query)) ) {
|
||||||
message_die(GENERAL_ERROR, 'Could not find tag', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not find tag', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
if ($row['tCount'] > 0) {
|
if ($row['tCount'] > 0) {
|
||||||
$output = true;
|
$output = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$output = false;
|
$output = false;
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renameTag($userid, $old, $new, $fromApi = false) {
|
function renameTag($userid, $old, $new, $fromApi = false) {
|
||||||
$bookmarkservice =SemanticScuttle_Service_Factory::get('Bookmark');
|
$bookmarkservice =SemanticScuttle_Service_Factory::get('Bookmark');
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
|
|
||||||
if (is_null($userid) || is_null($old) || is_null($new))
|
if (is_null($userid) || is_null($old) || is_null($new))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Find bookmarks with old tag
|
// Find bookmarks with old tag
|
||||||
$bookmarksInfo =& $bookmarkservice->getBookmarks(0, NULL, $userid, $old);
|
$bookmarksInfo =& $bookmarkservice->getBookmarks(0, NULL, $userid, $old);
|
||||||
$bookmarks =& $bookmarksInfo['bookmarks'];
|
$bookmarks =& $bookmarksInfo['bookmarks'];
|
||||||
|
|
||||||
// Delete old tag
|
// Delete old tag
|
||||||
$this->deleteTag($userid, $old);
|
$this->deleteTag($userid, $old);
|
||||||
|
|
||||||
// Attach new tags
|
// Attach new tags
|
||||||
$new = $tagservice->normalize($new);
|
$new = $tagservice->normalize($new);
|
||||||
|
|
||||||
foreach(array_keys($bookmarks) as $key) {
|
foreach(array_keys($bookmarks) as $key) {
|
||||||
$row =& $bookmarks[$key];
|
$row =& $bookmarks[$key];
|
||||||
$this->attachTags($row['bId'], $new, $fromApi, NULL, false);
|
$this->attachTags($row['bId'], $new, $fromApi, NULL, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function &tagCloud($tags = NULL, $steps = 5, $sizemin = 90, $sizemax = 225, $sortOrder = NULL) {
|
function &tagCloud($tags = NULL, $steps = 5, $sizemin = 90, $sizemax = 225, $sortOrder = NULL) {
|
||||||
|
|
||||||
if (is_null($tags) || count($tags) < 1) {
|
if (is_null($tags) || count($tags) < 1) {
|
||||||
$output = false;
|
$output = false;
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
$min = $tags[count($tags) - 1]['bCount'];
|
$min = $tags[count($tags) - 1]['bCount'];
|
||||||
$max = $tags[0]['bCount'];
|
$max = $tags[0]['bCount'];
|
||||||
|
|
||||||
for ($i = 1; $i <= $steps; $i++) {
|
for ($i = 1; $i <= $steps; $i++) {
|
||||||
$delta = ($max - $min) / (2 * $steps - $i);
|
$delta = ($max - $min) / (2 * $steps - $i);
|
||||||
$limit[$i] = $i * $delta + $min;
|
$limit[$i] = $i * $delta + $min;
|
||||||
}
|
}
|
||||||
$sizestep = ($sizemax - $sizemin) / $steps;
|
$sizestep = ($sizemax - $sizemin) / $steps;
|
||||||
foreach ($tags as $row) {
|
foreach ($tags as $row) {
|
||||||
$next = false;
|
$next = false;
|
||||||
for ($i = 1; $i <= $steps; $i++) {
|
for ($i = 1; $i <= $steps; $i++) {
|
||||||
if (!$next && $row['bCount'] <= $limit[$i]) {
|
if (!$next && $row['bCount'] <= $limit[$i]) {
|
||||||
$size = $sizestep * ($i - 1) + $sizemin;
|
$size = $sizestep * ($i - 1) + $sizemin;
|
||||||
$next = true;
|
$next = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$tempArray = array('size' => $size .'%');
|
$tempArray = array('size' => $size .'%');
|
||||||
$row = array_merge($row, $tempArray);
|
$row = array_merge($row, $tempArray);
|
||||||
$output[] = $row;
|
$output[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sortOrder == 'alphabet_asc') {
|
if ($sortOrder == 'alphabet_asc') {
|
||||||
usort($output, create_function('$a,$b','return strcasecmp(utf8_deaccent($a["tag"]), utf8_deaccent($b["tag"]));'));
|
usort($output, create_function('$a,$b','return strcasecmp(utf8_deaccent($a["tag"]), utf8_deaccent($b["tag"]));'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -11,14 +11,14 @@ class SemanticScuttle_Service_Cache extends SemanticScuttle_Service
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function __construct()
|
protected function __construct()
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,165 +8,165 @@ class SemanticScuttle_Service_CommonDescription extends SemanticScuttle_DbServic
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($db)
|
public function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'commondescription';
|
$this->tablename = $GLOBALS['tableprefix'] .'commondescription';
|
||||||
}
|
}
|
||||||
|
|
||||||
function addTagDescription($tag, $desc, $uId, $time) {
|
function addTagDescription($tag, $desc, $uId, $time) {
|
||||||
// Check if no modification
|
// Check if no modification
|
||||||
$lastDesc = $this->getLastTagDescription($tag);
|
$lastDesc = $this->getLastTagDescription($tag);
|
||||||
if($lastDesc['cdDescription'] == $desc) {
|
if($lastDesc['cdDescription'] == $desc) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If modification
|
// If modification
|
||||||
$datetime = gmdate('Y-m-d H:i:s', $time);
|
$datetime = gmdate('Y-m-d H:i:s', $time);
|
||||||
$values = array('tag'=>$tag, 'cdDescription'=>$desc, 'uId'=>$uId, 'cdDatetime'=>$datetime);
|
$values = array('tag'=>$tag, 'cdDescription'=>$desc, 'uId'=>$uId, 'cdDatetime'=>$datetime);
|
||||||
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($sql))) {
|
if (!($dbresult =& $this->db->sql_query($sql))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not add tag description', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not add tag description', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLastTagDescription($tag) {
|
function getLastTagDescription($tag) {
|
||||||
$query = "SELECT *";
|
$query = "SELECT *";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag='".$tag."'";
|
$query.= " WHERE tag='".$tag."'";
|
||||||
$query.= " ORDER BY cdDatetime DESC";
|
$query.= " ORDER BY cdDatetime DESC";
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query_limit($query, 1, 0))) {
|
if (!($dbresult = & $this->db->sql_query_limit($query, 1, 0))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
return $row;
|
return $row;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllTagsDescription($tag) {
|
function getAllTagsDescription($tag) {
|
||||||
$query = "SELECT *";
|
$query = "SELECT *";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag='".$tag."'";
|
$query.= " WHERE tag='".$tag."'";
|
||||||
$query.= " ORDER BY cdDatetime DESC";
|
$query.= " ORDER BY cdDatetime DESC";
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->db->sql_fetchrowset($dbresult);
|
return $this->db->sql_fetchrowset($dbresult);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDescriptionById($cdId) {
|
function getDescriptionById($cdId) {
|
||||||
$query = "SELECT *";
|
$query = "SELECT *";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE cdId='".$cdId."'";
|
$query.= " WHERE cdId='".$cdId."'";
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
return $row;
|
return $row;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addBookmarkDescription($bHash, $title, $desc, $uId, $time) {
|
function addBookmarkDescription($bHash, $title, $desc, $uId, $time) {
|
||||||
// Check if no modification
|
// Check if no modification
|
||||||
$lastDesc = $this->getLastBookmarkDescription($bHash);
|
$lastDesc = $this->getLastBookmarkDescription($bHash);
|
||||||
if($lastDesc['cdTitle'] == $title && $lastDesc['cdDescription'] == $desc) {
|
if($lastDesc['cdTitle'] == $title && $lastDesc['cdDescription'] == $desc) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If modification
|
// If modification
|
||||||
$datetime = gmdate('Y-m-d H:i:s', $time);
|
$datetime = gmdate('Y-m-d H:i:s', $time);
|
||||||
$values = array('bHash'=>$bHash, 'cdTitle'=>$title, 'cdDescription'=>$desc, 'uId'=>$uId, 'cdDatetime'=>$datetime);
|
$values = array('bHash'=>$bHash, 'cdTitle'=>$title, 'cdDescription'=>$desc, 'uId'=>$uId, 'cdDatetime'=>$datetime);
|
||||||
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($sql))) {
|
if (!($dbresult =& $this->db->sql_query($sql))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not add bookmark description', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not add bookmark description', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLastBookmarkDescription($bHash) {
|
function getLastBookmarkDescription($bHash) {
|
||||||
$query = "SELECT *";
|
$query = "SELECT *";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE bHash='".$bHash."'";
|
$query.= " WHERE bHash='".$bHash."'";
|
||||||
$query.= " ORDER BY cdDatetime DESC";
|
$query.= " ORDER BY cdDatetime DESC";
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query_limit($query, 1, 0))) {
|
if (!($dbresult = & $this->db->sql_query_limit($query, 1, 0))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get bookmark description', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get bookmark description', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
return $row;
|
return $row;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllBookmarksDescription($bHash) {
|
function getAllBookmarksDescription($bHash) {
|
||||||
$query = "SELECT *";
|
$query = "SELECT *";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE bHash='".$bHash."'";
|
$query.= " WHERE bHash='".$bHash."'";
|
||||||
$query.= " ORDER BY cdDatetime DESC";
|
$query.= " ORDER BY cdDatetime DESC";
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get bookmark descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get bookmark descriptions', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->db->sql_fetchrowset($dbresult);
|
return $this->db->sql_fetchrowset($dbresult);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteDescriptionsForUser($uId){
|
function deleteDescriptionsForUser($uId){
|
||||||
$query = 'DELETE FROM '. $this->getTableName() . ' WHERE uId = '. intval($uId);
|
$query = 'DELETE FROM '. $this->getTableName() . ' WHERE uId = '. intval($uId);
|
||||||
|
|
||||||
$this->db->sql_transaction('begin');
|
$this->db->sql_transaction('begin');
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not delete user descriptions', '',
|
message_die(GENERAL_ERROR, 'Could not delete user descriptions', '',
|
||||||
__LINE__, __FILE__, $query, $this->db);
|
__LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
class SemanticScuttle_Service_SearchHistory extends SemanticScuttle_DbService
|
class SemanticScuttle_Service_SearchHistory extends SemanticScuttle_DbService
|
||||||
{
|
{
|
||||||
var $sizeSearchHistory;
|
var $sizeSearchHistory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the single service instance
|
* Returns the single service instance
|
||||||
|
@ -10,121 +10,121 @@ class SemanticScuttle_Service_SearchHistory extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($db)
|
public function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'searchhistory';
|
$this->tablename = $GLOBALS['tableprefix'] .'searchhistory';
|
||||||
if(isset($GLOBALS['sizeSearchHistory'])) {
|
if(isset($GLOBALS['sizeSearchHistory'])) {
|
||||||
$this->sizeSearchHistory = $GLOBALS['sizeSearchHistory'];
|
$this->sizeSearchHistory = $GLOBALS['sizeSearchHistory'];
|
||||||
} else {
|
} else {
|
||||||
$this->sizeSearchHistory = 10;
|
$this->sizeSearchHistory = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addSearch($terms, $range, $nbResults, $uId=0) {
|
function addSearch($terms, $range, $nbResults, $uId=0) {
|
||||||
if(strlen($terms) == 0) {
|
if(strlen($terms) == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$datetime = gmdate('Y-m-d H:i:s', time());
|
$datetime = gmdate('Y-m-d H:i:s', time());
|
||||||
|
|
||||||
//Insert values
|
//Insert values
|
||||||
$values = array('shTerms'=>$terms, 'shRange'=>$range, 'shDatetime'=>$datetime, 'shNbResults'=>$nbResults, 'uId'=>$uId);
|
$values = array('shTerms'=>$terms, 'shRange'=>$range, 'shDatetime'=>$datetime, 'shNbResults'=>$nbResults, 'uId'=>$uId);
|
||||||
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$sql = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
$this->db->sql_transaction('begin');
|
$this->db->sql_transaction('begin');
|
||||||
if (!($dbresult = & $this->db->sql_query($sql))) {
|
if (!($dbresult = & $this->db->sql_query($sql))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not insert search history', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not insert search history', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->sizeSearchHistory != -1 &&
|
if($this->sizeSearchHistory != -1 &&
|
||||||
$this->countSearches() > $this->sizeSearchHistory) {
|
$this->countSearches() > $this->sizeSearchHistory) {
|
||||||
$this->deleteOldestSearch();
|
$this->deleteOldestSearch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllSearches($range = NULL, $uId = NULL, $nb = NULL, $start = NULL, $distinct = false, $withResults = false) {
|
function getAllSearches($range = NULL, $uId = NULL, $nb = NULL, $start = NULL, $distinct = false, $withResults = false) {
|
||||||
$sql = 'SELECT DISTINCT(shTerms), shId, shRange, shNbResults, shDatetime, uId';
|
$sql = 'SELECT DISTINCT(shTerms), shId, shRange, shNbResults, shDatetime, uId';
|
||||||
$sql.= ' FROM '. $this->getTableName();
|
$sql.= ' FROM '. $this->getTableName();
|
||||||
$sql.= ' WHERE 1=1';
|
$sql.= ' WHERE 1=1';
|
||||||
if($range != NULL) {
|
if($range != NULL) {
|
||||||
$sql.= ' AND shRange = "'.$range.'"';
|
$sql.= ' AND shRange = "'.$range.'"';
|
||||||
} else {
|
} else {
|
||||||
$sql.= ' AND shRange = "all"';
|
$sql.= ' AND shRange = "all"';
|
||||||
}
|
}
|
||||||
if($uId != NULL) {
|
if($uId != NULL) {
|
||||||
$sql.= ' AND uId = '.$uId;
|
$sql.= ' AND uId = '.$uId;
|
||||||
}
|
}
|
||||||
if($withResults = true) {
|
if($withResults = true) {
|
||||||
$sql.= ' AND shNbResults > 0';
|
$sql.= ' AND shNbResults > 0';
|
||||||
}
|
}
|
||||||
if($distinct) {
|
if($distinct) {
|
||||||
$sql.= ' GROUP BY shTerms';
|
$sql.= ' GROUP BY shTerms';
|
||||||
}
|
}
|
||||||
$sql.= ' ORDER BY shId DESC';
|
$sql.= ' ORDER BY shId DESC';
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query_limit($sql, $nb, $start))) {
|
if (!($dbresult = & $this->db->sql_query_limit($sql, $nb, $start))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get searches', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get searches', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$searches = array();
|
$searches = array();
|
||||||
while ($row = & $this->db->sql_fetchrow($dbresult)) {
|
while ($row = & $this->db->sql_fetchrow($dbresult)) {
|
||||||
$searches[] = $row;
|
$searches[] = $row;
|
||||||
}
|
}
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $searches;
|
return $searches;
|
||||||
}
|
}
|
||||||
|
|
||||||
function countSearches() {
|
function countSearches() {
|
||||||
$sql = 'SELECT COUNT(*) AS `total` FROM '. $this->getTableName();
|
$sql = 'SELECT COUNT(*) AS `total` FROM '. $this->getTableName();
|
||||||
if (!($dbresult = & $this->db->sql_query($sql)) || (!($row = & $this->db->sql_fetchrow($dbresult)))) {
|
if (!($dbresult = & $this->db->sql_query($sql)) || (!($row = & $this->db->sql_fetchrow($dbresult)))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get total searches', '', __LINE__, __FILE__, $sql, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get total searches', '', __LINE__, __FILE__, $sql, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $row['total'];
|
return $row['total'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function allows to limit the number of saved searches
|
/* This function allows to limit the number of saved searches
|
||||||
by deleting the oldest one */
|
by deleting the oldest one */
|
||||||
function deleteOldestSearch() {
|
function deleteOldestSearch() {
|
||||||
$sql = 'DELETE FROM '.$this->getTableName();
|
$sql = 'DELETE FROM '.$this->getTableName();
|
||||||
$sql.= ' ORDER BY shId ASC LIMIT 1'; // warning: here the limit is important
|
$sql.= ' ORDER BY shId ASC LIMIT 1'; // warning: here the limit is important
|
||||||
|
|
||||||
$this->db->sql_transaction('begin');
|
$this->db->sql_transaction('begin');
|
||||||
if (!($dbresult = & $this->db->sql_query($sql))) {
|
if (!($dbresult = & $this->db->sql_query($sql))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteSearchHistoryForUser($uId) {
|
function deleteSearchHistoryForUser($uId) {
|
||||||
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete search history', '',
|
message_die(GENERAL_ERROR, 'Could not delete search history', '',
|
||||||
__LINE__, __FILE__, $query, $this->db);
|
__LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -8,121 +8,121 @@ class SemanticScuttle_Service_Tag extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($db)
|
public function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'tags';
|
$this->tablename = $GLOBALS['tableprefix'] .'tags';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDescription($tag, $uId) {
|
function getDescription($tag, $uId) {
|
||||||
$query = 'SELECT tag, uId, tDescription';
|
$query = 'SELECT tag, uId, tDescription';
|
||||||
$query.= ' FROM '.$this->getTableName();
|
$query.= ' FROM '.$this->getTableName();
|
||||||
$query.= ' WHERE tag = "'.$tag.'"';
|
$query.= ' WHERE tag = "'.$tag.'"';
|
||||||
$query.= ' AND uId = "'.$uId.'"';
|
$query.= ' AND uId = "'.$uId.'"';
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
return $row;
|
return $row;
|
||||||
} else {
|
} else {
|
||||||
return array('tDescription'=>'');
|
return array('tDescription'=>'');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function existsDescription($tag, $uId) {
|
function existsDescription($tag, $uId) {
|
||||||
$query = 'SELECT tag, uId, tDescription';
|
$query = 'SELECT tag, uId, tDescription';
|
||||||
$query.= ' FROM '.$this->getTableName();
|
$query.= ' FROM '.$this->getTableName();
|
||||||
$query.= ' WHERE tag = "'.$tag.'"';
|
$query.= ' WHERE tag = "'.$tag.'"';
|
||||||
$query.= ' AND uId = "'.$uId.'"';
|
$query.= ' AND uId = "'.$uId.'"';
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
if ($row =& $this->db->sql_fetchrow($dbresult)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllDescriptions($tag) {
|
function getAllDescriptions($tag) {
|
||||||
$query = 'SELECT tag, uId, tDescription';
|
$query = 'SELECT tag, uId, tDescription';
|
||||||
$query.= ' FROM '.$this->getTableName();
|
$query.= ' FROM '.$this->getTableName();
|
||||||
$query.= ' WHERE tag = "'.$tag.'"';
|
$query.= ' WHERE tag = "'.$tag.'"';
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get tag description', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->db->sql_fetchrowset($dbresult);
|
return $this->db->sql_fetchrowset($dbresult);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateDescription($tag, $uId, $desc) {
|
function updateDescription($tag, $uId, $desc) {
|
||||||
if($this->existsDescription($tag, $uId)) {
|
if($this->existsDescription($tag, $uId)) {
|
||||||
$query = 'UPDATE '.$this->getTableName();
|
$query = 'UPDATE '.$this->getTableName();
|
||||||
$query.= ' SET tDescription="'.$this->db->sql_escape($desc).'"';
|
$query.= ' SET tDescription="'.$this->db->sql_escape($desc).'"';
|
||||||
$query.= ' WHERE tag="'.$tag.'" AND uId="'.$uId.'"';
|
$query.= ' WHERE tag="'.$tag.'" AND uId="'.$uId.'"';
|
||||||
} else {
|
} else {
|
||||||
$values = array('tag'=>$tag, 'uId'=>$uId, 'tDescription'=>$desc);
|
$values = array('tag'=>$tag, 'uId'=>$uId, 'tDescription'=>$desc);
|
||||||
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_transaction('begin');
|
$this->db->sql_transaction('begin');
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete bookmarks', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->db->sql_transaction('commit');
|
$this->db->sql_transaction('commit');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renameTag($uId, $oldName, $newName) {
|
function renameTag($uId, $oldName, $newName) {
|
||||||
$newname = $this->normalize($newName);
|
$newname = $this->normalize($newName);
|
||||||
|
|
||||||
$query = 'UPDATE `'. $this->getTableName() .'`';
|
$query = 'UPDATE `'. $this->getTableName() .'`';
|
||||||
$query.= ' SET tag="'.$newName.'"';
|
$query.= ' SET tag="'.$newName.'"';
|
||||||
$query.= ' WHERE tag="'.$oldName.'"';
|
$query.= ' WHERE tag="'.$oldName.'"';
|
||||||
$query.= ' AND uId="'.$uId.'"';
|
$query.= ' AND uId="'.$uId.'"';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* normalize the input tags which could be a string or an array*/
|
/* normalize the input tags which could be a string or an array*/
|
||||||
function normalize($tags) {
|
function normalize($tags) {
|
||||||
//clean tags from strange characters
|
//clean tags from strange characters
|
||||||
$tags = str_replace(array('"', '\'', '/'), "_", $tags);
|
$tags = str_replace(array('"', '\'', '/'), "_", $tags);
|
||||||
|
|
||||||
//normalize
|
//normalize
|
||||||
if(!is_array($tags)) {
|
if(!is_array($tags)) {
|
||||||
$tags = strtolower(trim($tags));
|
$tags = strtolower(trim($tags));
|
||||||
} else {
|
} else {
|
||||||
for($i=0; $i<count($tags); $i++) {
|
for($i=0; $i<count($tags); $i++) {
|
||||||
$tags[$i] = strtolower(trim($tags[$i]));
|
$tags[$i] = strtolower(trim($tags[$i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $tags;
|
return $tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -8,376 +8,376 @@ class SemanticScuttle_Service_Tag2Tag extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function __construct(&$db)
|
function __construct(&$db)
|
||||||
{
|
{
|
||||||
$this->db =& $db;
|
$this->db =& $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'tags2tags';
|
$this->tablename = $GLOBALS['tableprefix'] .'tags2tags';
|
||||||
}
|
}
|
||||||
|
|
||||||
function addLinkedTags($tag1, $tag2, $relationType, $uId) {
|
function addLinkedTags($tag1, $tag2, $relationType, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
$tag2 = $tagservice->normalize($tag2);
|
$tag2 = $tagservice->normalize($tag2);
|
||||||
|
|
||||||
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
||||||
|| ($relationType != ">" && $relationType != "=")
|
|| ($relationType != ">" && $relationType != "=")
|
||||||
|| !is_numeric($uId) || $uId<=0
|
|| !is_numeric($uId) || $uId<=0
|
||||||
|| ($this->existsLinkedTags($tag1, $tag2, $relationType, $uId))) {
|
|| ($this->existsLinkedTags($tag1, $tag2, $relationType, $uId))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> $relationType, 'uId'=> $uId);
|
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> $relationType, 'uId'=> $uId);
|
||||||
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
//die($query);
|
//die($query);
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not attach tag to tag', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not attach tag to tag', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->db->sql_transaction('commit');
|
$this->db->sql_transaction('commit');
|
||||||
|
|
||||||
// Update stats and cache
|
// Update stats and cache
|
||||||
$this->update($tag1, $tag2, $relationType, $uId);
|
$this->update($tag1, $tag2, $relationType, $uId);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return linked tags just for admin users
|
// Return linked tags just for admin users
|
||||||
function getAdminLinkedTags($tag, $relationType, $inverseRelation = false, $stopList = array()) {
|
function getAdminLinkedTags($tag, $relationType, $inverseRelation = false, $stopList = array()) {
|
||||||
// look for admin ids
|
// look for admin ids
|
||||||
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
$userservice = SemanticScuttle_Service_Factory :: get('User');
|
||||||
$adminIds = $userservice->getAdminIds();
|
$adminIds = $userservice->getAdminIds();
|
||||||
|
|
||||||
//ask for their linked tags
|
//ask for their linked tags
|
||||||
return $this->getLinkedTags($tag, $relationType, $adminIds, $inverseRelation, $stopList);
|
return $this->getLinkedTags($tag, $relationType, $adminIds, $inverseRelation, $stopList);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the target linked tags. If inverseRelation is true, return the source linked tags.
|
// Return the target linked tags. If inverseRelation is true, return the source linked tags.
|
||||||
function getLinkedTags($tag, $relationType, $uId = null, $inverseRelation = false, $stopList = array()) {
|
function getLinkedTags($tag, $relationType, $uId = null, $inverseRelation = false, $stopList = array()) {
|
||||||
// Set up the SQL query.
|
// Set up the SQL query.
|
||||||
if($inverseRelation) {
|
if($inverseRelation) {
|
||||||
$queriedTag = "tag1";
|
$queriedTag = "tag1";
|
||||||
$givenTag = "tag2";
|
$givenTag = "tag2";
|
||||||
} else {
|
} else {
|
||||||
$queriedTag = "tag2";
|
$queriedTag = "tag2";
|
||||||
$givenTag = "tag1";
|
$givenTag = "tag1";
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = "SELECT DISTINCT ". $queriedTag ." as 'tag'";
|
$query = "SELECT DISTINCT ". $queriedTag ." as 'tag'";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE 1=1";
|
$query.= " WHERE 1=1";
|
||||||
if($tag !=null) {
|
if($tag !=null) {
|
||||||
$query.= " AND ". $givenTag ." = '". $tag ."'";
|
$query.= " AND ". $givenTag ." = '". $tag ."'";
|
||||||
}
|
}
|
||||||
if($relationType) {
|
if($relationType) {
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
}
|
}
|
||||||
if(is_array($uId)) {
|
if(is_array($uId)) {
|
||||||
$query.= " AND ( 1=0 "; //tricks always false
|
$query.= " AND ( 1=0 "; //tricks always false
|
||||||
foreach($uId as $u) {
|
foreach($uId as $u) {
|
||||||
$query.= " OR uId = '".$u."'";
|
$query.= " OR uId = '".$u."'";
|
||||||
}
|
}
|
||||||
$query.= " ) ";
|
$query.= " ) ";
|
||||||
} elseif($uId != null) {
|
} elseif($uId != null) {
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
}
|
}
|
||||||
//die($query);
|
//die($query);
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rowset = $this->db->sql_fetchrowset($dbresult);
|
$rowset = $this->db->sql_fetchrowset($dbresult);
|
||||||
$output = array();
|
$output = array();
|
||||||
foreach($rowset as $row) {
|
foreach($rowset as $row) {
|
||||||
if(!in_array($row['tag'], $stopList)) {
|
if(!in_array($row['tag'], $stopList)) {
|
||||||
$output[] = $row['tag'];
|
$output[] = $row['tag'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//bijective case for '='
|
//bijective case for '='
|
||||||
if($relationType == '=' && $inverseRelation == false) {
|
if($relationType == '=' && $inverseRelation == false) {
|
||||||
//$stopList[] = $tag;
|
//$stopList[] = $tag;
|
||||||
$bijectiveOutput = $this->getLinkedTags($tag, $relationType, $uId, true, $stopList);
|
$bijectiveOutput = $this->getLinkedTags($tag, $relationType, $uId, true, $stopList);
|
||||||
$output = array_merge($output, $bijectiveOutput);
|
$output = array_merge($output, $bijectiveOutput);
|
||||||
//$output = array_unique($output); // remove duplication
|
//$output = array_unique($output); // remove duplication
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns all linked tags (all descendants if relation is >,
|
* Returns all linked tags (all descendants if relation is >,
|
||||||
* all synonyms if relation is = )
|
* all synonyms if relation is = )
|
||||||
* $stopList allows to avoid cycle (a > b > a) between tags
|
* $stopList allows to avoid cycle (a > b > a) between tags
|
||||||
*/
|
*/
|
||||||
function getAllLinkedTags($tag1, $relationType, $uId, $stopList=array()) {
|
function getAllLinkedTags($tag1, $relationType, $uId, $stopList=array()) {
|
||||||
if(in_array($tag1, $stopList) || $tag1 == '') {
|
if(in_array($tag1, $stopList) || $tag1 == '') {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to find data in cache
|
// try to find data in cache
|
||||||
$tcs = SemanticScuttle_Service_Factory::get('TagCache');
|
$tcs = SemanticScuttle_Service_Factory::get('TagCache');
|
||||||
if(count($stopList) == 0) {
|
if(count($stopList) == 0) {
|
||||||
$activatedCache = true;
|
$activatedCache = true;
|
||||||
} else {
|
} else {
|
||||||
$activatedCache = false;
|
$activatedCache = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// look for existing links
|
// look for existing links
|
||||||
$stopList[] = $tag1;
|
$stopList[] = $tag1;
|
||||||
$linkedTags = $this->getLinkedTags($tag1, $relationType, $uId, false, $stopList);
|
$linkedTags = $this->getLinkedTags($tag1, $relationType, $uId, false, $stopList);
|
||||||
if($relationType != '=') {
|
if($relationType != '=') {
|
||||||
$linkedTags = array_merge($linkedTags, $this->getLinkedTags($tag1, '=', $uId, false, $stopList));
|
$linkedTags = array_merge($linkedTags, $this->getLinkedTags($tag1, '=', $uId, false, $stopList));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(count($linkedTags) == 0) {
|
if(count($linkedTags) == 0) {
|
||||||
return array();
|
return array();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// use cache if possible
|
// use cache if possible
|
||||||
if($activatedCache) {
|
if($activatedCache) {
|
||||||
if($relationType == '>') {
|
if($relationType == '>') {
|
||||||
$output = $tcs->getChildren($tag1, $uId);
|
$output = $tcs->getChildren($tag1, $uId);
|
||||||
} elseif($relationType == '=') {
|
} elseif($relationType == '=') {
|
||||||
$output = $tcs->getSynonyms($tag1, $uId);
|
$output = $tcs->getSynonyms($tag1, $uId);
|
||||||
}
|
}
|
||||||
if(count($output)>0) {
|
if(count($output)>0) {
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// else compute the links
|
// else compute the links
|
||||||
$output = array();
|
$output = array();
|
||||||
|
|
||||||
foreach($linkedTags as $linkedTag) {
|
foreach($linkedTags as $linkedTag) {
|
||||||
$allLinkedTags = $this->getAllLinkedTags($linkedTag, $relationType, $uId, $stopList);
|
$allLinkedTags = $this->getAllLinkedTags($linkedTag, $relationType, $uId, $stopList);
|
||||||
$output[] = $linkedTag;
|
$output[] = $linkedTag;
|
||||||
if(is_array($allLinkedTags)) {
|
if(is_array($allLinkedTags)) {
|
||||||
$output = array_merge($output, $allLinkedTags);
|
$output = array_merge($output, $allLinkedTags);
|
||||||
} else {
|
} else {
|
||||||
$output[] = $allLinkedTags;
|
$output[] = $allLinkedTags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// and save in cache
|
// and save in cache
|
||||||
if($activatedCache == true && $uId>0) {
|
if($activatedCache == true && $uId>0) {
|
||||||
$tcs->updateTag($tag1, $relationType, $output, $uId);
|
$tcs->updateTag($tag1, $relationType, $output, $uId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//$output = array_unique($output); // remove duplication
|
//$output = array_unique($output); // remove duplication
|
||||||
return $output;
|
return $output;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOrphewTags($relationType, $uId = 0, $limit = null, $orderBy = null) {
|
function getOrphewTags($relationType, $uId = 0, $limit = null, $orderBy = null) {
|
||||||
$query = "SELECT DISTINCT tts.tag1 as tag";
|
$query = "SELECT DISTINCT tts.tag1 as tag";
|
||||||
$query.= " FROM `". $this->getTableName() ."` tts";
|
$query.= " FROM `". $this->getTableName() ."` tts";
|
||||||
if($orderBy != null) {
|
if($orderBy != null) {
|
||||||
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
||||||
$query.= ", ".$tsts->getTableName() ." tsts";
|
$query.= ", ".$tsts->getTableName() ." tsts";
|
||||||
}
|
}
|
||||||
$query.= " WHERE tts.tag1 <> ALL";
|
$query.= " WHERE tts.tag1 <> ALL";
|
||||||
$query.= " (SELECT DISTINCT tag2 FROM `". $this->getTableName() ."`";
|
$query.= " (SELECT DISTINCT tag2 FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE relationType = '".$relationType."'";
|
$query.= " WHERE relationType = '".$relationType."'";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
}
|
}
|
||||||
$query.= ")";
|
$query.= ")";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND tts.uId = '".$uId."'";
|
$query.= " AND tts.uId = '".$uId."'";
|
||||||
}
|
}
|
||||||
|
|
||||||
switch($orderBy) {
|
switch($orderBy) {
|
||||||
case "nb":
|
case "nb":
|
||||||
$query.= " AND tts.tag1 = tsts.tag1";
|
$query.= " AND tts.tag1 = tsts.tag1";
|
||||||
$query.= " AND tsts.relationType = '".$relationType."'";
|
$query.= " AND tsts.relationType = '".$relationType."'";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND tsts.uId = ".$uId;
|
$query.= " AND tsts.uId = ".$uId;
|
||||||
}
|
}
|
||||||
$query.= " ORDER BY tsts.nb DESC";
|
$query.= " ORDER BY tsts.nb DESC";
|
||||||
break;
|
break;
|
||||||
case "depth": // by nb of descendants
|
case "depth": // by nb of descendants
|
||||||
$query.= " AND tts.tag1 = tsts.tag1";
|
$query.= " AND tts.tag1 = tsts.tag1";
|
||||||
$query.= " AND tsts.relationType = '".$relationType."'";
|
$query.= " AND tsts.relationType = '".$relationType."'";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND tsts.uId = ".$uId;
|
$query.= " AND tsts.uId = ".$uId;
|
||||||
}
|
}
|
||||||
$query.= " ORDER BY tsts.depth DESC";
|
$query.= " ORDER BY tsts.depth DESC";
|
||||||
break;
|
break;
|
||||||
case "nbupdate":
|
case "nbupdate":
|
||||||
$query.= " AND tts.tag1 = tsts.tag1";
|
$query.= " AND tts.tag1 = tsts.tag1";
|
||||||
$query.= " AND tsts.relationType = '".$relationType."'";
|
$query.= " AND tsts.relationType = '".$relationType."'";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND tsts.uId = ".$uId;
|
$query.= " AND tsts.uId = ".$uId;
|
||||||
}
|
}
|
||||||
$query.= " ORDER BY tsts.nbupdate DESC";
|
$query.= " ORDER BY tsts.nbupdate DESC";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($limit != null) {
|
if($limit != null) {
|
||||||
$query.= " LIMIT 0,".$limit;
|
$query.= " LIMIT 0,".$limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMenuTags($uId) {
|
function getMenuTags($uId) {
|
||||||
if(strlen($GLOBALS['menuTag']) < 1) {
|
if(strlen($GLOBALS['menuTag']) < 1) {
|
||||||
return array();
|
return array();
|
||||||
} else {
|
} else {
|
||||||
// we don't use the getAllLinkedTags function in order to improve performance
|
// we don't use the getAllLinkedTags function in order to improve performance
|
||||||
$query = "SELECT tag2 as 'tag', COUNT(tag2) as 'count'";
|
$query = "SELECT tag2 as 'tag', COUNT(tag2) as 'count'";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '".$GLOBALS['menuTag']."'";
|
$query.= " WHERE tag1 = '".$GLOBALS['menuTag']."'";
|
||||||
$query.= " AND relationType = '>'";
|
$query.= " AND relationType = '>'";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
}
|
}
|
||||||
$query.= " GROUP BY tag2";
|
$query.= " GROUP BY tag2";
|
||||||
$query.= " ORDER BY count DESC";
|
$query.= " ORDER BY count DESC";
|
||||||
$query.= " LIMIT 0, ".$GLOBALS['maxSizeMenuBlock'];
|
$query.= " LIMIT 0, ".$GLOBALS['maxSizeMenuBlock'];
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$output = $this->db->sql_fetchrowset($dbresult);
|
$output = $this->db->sql_fetchrowset($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function existsLinkedTags($tag1, $tag2, $relationType, $uId) {
|
function existsLinkedTags($tag1, $tag2, $relationType, $uId) {
|
||||||
|
|
||||||
//$tag1 = mysql_real_escape_string($tag1);
|
//$tag1 = mysql_real_escape_string($tag1);
|
||||||
//$tag2 = mysql_real_escape_string($tag2);
|
//$tag2 = mysql_real_escape_string($tag2);
|
||||||
|
|
||||||
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND tag2 = '".$tag2."'";
|
$query.= " AND tag2 = '".$tag2."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
//echo($query."<br>\n");
|
//echo($query."<br>\n");
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLinks($uId) {
|
function getLinks($uId) {
|
||||||
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE 1=1";
|
$query.= " WHERE 1=1";
|
||||||
if($uId > 0) {
|
if($uId > 0) {
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->db->sql_fetchrowset($this->db->sql_query($query));
|
return $this->db->sql_fetchrowset($this->db->sql_query($query));
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeLinkedTags($tag1, $tag2, $relationType, $uId) {
|
function removeLinkedTags($tag1, $tag2, $relationType, $uId) {
|
||||||
if(($tag1 != '' && $tag1 == $tag2) ||
|
if(($tag1 != '' && $tag1 == $tag2) ||
|
||||||
($relationType != ">" && $relationType != "=" && $relationType != "") ||
|
($relationType != ">" && $relationType != "=" && $relationType != "") ||
|
||||||
($tag1 == '' && $tag2 == '')) {
|
($tag1 == '' && $tag2 == '')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$query = 'DELETE FROM '. $this->getTableName();
|
$query = 'DELETE FROM '. $this->getTableName();
|
||||||
$query.= ' WHERE 1=1';
|
$query.= ' WHERE 1=1';
|
||||||
$query.= strlen($tag1)>0 ? ' AND tag1 = "'. $tag1 .'"' : '';
|
$query.= strlen($tag1)>0 ? ' AND tag1 = "'. $tag1 .'"' : '';
|
||||||
$query.= strlen($tag2)>0 ? ' AND tag2 = "'. $tag2 .'"' : '';
|
$query.= strlen($tag2)>0 ? ' AND tag2 = "'. $tag2 .'"' : '';
|
||||||
$query.= strlen($relationType)>0 ? ' AND relationType = "'. $relationType .'"' : '';
|
$query.= strlen($relationType)>0 ? ' AND relationType = "'. $relationType .'"' : '';
|
||||||
$query.= strlen($uId)>0 ? ' AND uId = "'. $uId .'"' : '';
|
$query.= strlen($uId)>0 ? ' AND uId = "'. $uId .'"' : '';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not remove tag relation', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not remove tag relation', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Update stats and cache
|
// Update stats and cache
|
||||||
$this->update($tag1, $tag2, $relationType, $uId);
|
$this->update($tag1, $tag2, $relationType, $uId);
|
||||||
|
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeLinkedTagsForUser($uId) {
|
function removeLinkedTagsForUser($uId) {
|
||||||
$query = 'DELETE FROM '. $this->getTableName();
|
$query = 'DELETE FROM '. $this->getTableName();
|
||||||
$query.= ' WHERE uId = "'. $uId .'"';
|
$query.= ' WHERE uId = "'. $uId .'"';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not remove tag relation', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not remove tag relation', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Update stats and cache
|
// Update stats and cache
|
||||||
$this->update('', '', '', $uId);
|
$this->update('', '', '', $uId);
|
||||||
|
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renameTag($uId, $oldName, $newName) {
|
function renameTag($uId, $oldName, $newName) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$newName = $tagservice->normalize($newName);
|
$newName = $tagservice->normalize($newName);
|
||||||
|
|
||||||
$query = 'UPDATE `'. $this->getTableName() .'`';
|
$query = 'UPDATE `'. $this->getTableName() .'`';
|
||||||
$query.= ' SET tag1="'.$newName.'"';
|
$query.= ' SET tag1="'.$newName.'"';
|
||||||
$query.= ' WHERE tag1="'.$oldName.'"';
|
$query.= ' WHERE tag1="'.$oldName.'"';
|
||||||
$query.= ' AND uId="'.$uId.'"';
|
$query.= ' AND uId="'.$uId.'"';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
|
|
||||||
$query = 'UPDATE `'. $this->getTableName() .'`';
|
$query = 'UPDATE `'. $this->getTableName() .'`';
|
||||||
$query.= ' SET tag2="'.$newName.'"';
|
$query.= ' SET tag2="'.$newName.'"';
|
||||||
$query.= ' WHERE tag2="'.$oldName.'"';
|
$query.= ' WHERE tag2="'.$oldName.'"';
|
||||||
$query.= ' AND uId="'.$uId.'"';
|
$query.= ' AND uId="'.$uId.'"';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
|
|
||||||
|
|
||||||
// Update stats and cache
|
// Update stats and cache
|
||||||
$this->update($oldName, NULL, '=', $uId);
|
$this->update($oldName, NULL, '=', $uId);
|
||||||
$this->update($oldName, NULL, '>', $uId);
|
$this->update($oldName, NULL, '>', $uId);
|
||||||
$this->update($newName, NULL, '=', $uId);
|
$this->update($newName, NULL, '=', $uId);
|
||||||
$this->update($newName, NULL, '>', $uId);
|
$this->update($newName, NULL, '>', $uId);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function update($tag1, $tag2, $relationType, $uId) {
|
function update($tag1, $tag2, $relationType, $uId) {
|
||||||
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
||||||
$tsts->updateStat($tag1, $relationType, $uId);
|
$tsts->updateStat($tag1, $relationType, $uId);
|
||||||
|
|
||||||
$tcs = SemanticScuttle_Service_Factory::get('TagCache');
|
$tcs = SemanticScuttle_Service_Factory::get('TagCache');
|
||||||
$tcs->deleteByUser($uId);
|
$tcs->deleteByUser($uId);
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
|
|
||||||
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
$tsts =SemanticScuttle_Service_Factory::get('TagStat');
|
||||||
$tsts->deleteAll();
|
$tsts->deleteAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -20,338 +20,338 @@ class SemanticScuttle_Service_TagCache extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function __construct($db)
|
protected function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db =$db;
|
$this->db =$db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'tagscache';
|
$this->tablename = $GLOBALS['tableprefix'] .'tagscache';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChildren($tag1, $uId) {
|
function getChildren($tag1, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
|
|
||||||
if($tag1 == '') return false;
|
if($tag1 == '') return false;
|
||||||
|
|
||||||
$query = "SELECT DISTINCT tag2 as 'tag'";
|
$query = "SELECT DISTINCT tag2 as 'tag'";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE relationType = '>'";
|
$query.= " WHERE relationType = '>'";
|
||||||
$query.= " AND tag1 = '".$tag1."'";
|
$query.= " AND tag1 = '".$tag1."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
//die($query);
|
//die($query);
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$rowset = $this->db->sql_fetchrowset($dbresult);
|
$rowset = $this->db->sql_fetchrowset($dbresult);
|
||||||
$output = array();
|
$output = array();
|
||||||
foreach($rowset as $row) {
|
foreach($rowset as $row) {
|
||||||
$output[] = $row['tag'];
|
$output[] = $row['tag'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addChild($tag1, $tag2, $uId) {
|
function addChild($tag1, $tag2, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
$tag2 = $tagservice->normalize($tag2);
|
$tag2 = $tagservice->normalize($tag2);
|
||||||
|
|
||||||
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
||||||
|| ($this->existsChild($tag1, $tag2, $uId))) {
|
|| ($this->existsChild($tag1, $tag2, $uId))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> '>', 'uId'=> $uId);
|
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> '>', 'uId'=> $uId);
|
||||||
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
//die($query);
|
//die($query);
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not add tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not add tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->db->sql_transaction('commit');
|
$this->db->sql_transaction('commit');
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeChild($tag1, $tag2, $uId) {
|
function removeChild($tag1, $tag2, $uId) {
|
||||||
if(($tag1 != '' && $tag1 == $tag2) ||
|
if(($tag1 != '' && $tag1 == $tag2) ||
|
||||||
($tag1 == '' && $tag2 == '' && $uId == '')) {
|
($tag1 == '' && $tag2 == '' && $uId == '')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'DELETE FROM '. $this->getTableName();
|
$query = 'DELETE FROM '. $this->getTableName();
|
||||||
$query.= ' WHERE 1=1';
|
$query.= ' WHERE 1=1';
|
||||||
$query.= strlen($tag1)>0 ? ' AND tag1 = "'. $tag1 .'"' : '';
|
$query.= strlen($tag1)>0 ? ' AND tag1 = "'. $tag1 .'"' : '';
|
||||||
$query.= strlen($tag2)>0 ? ' AND tag2 = "'. $tag2 .'"' : '';
|
$query.= strlen($tag2)>0 ? ' AND tag2 = "'. $tag2 .'"' : '';
|
||||||
$query.= ' AND relationType = ">"';
|
$query.= ' AND relationType = ">"';
|
||||||
$query.= strlen($uId)>0 ? ' AND uId = "'. $uId .'"' : '';
|
$query.= strlen($uId)>0 ? ' AND uId = "'. $uId .'"' : '';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not remove tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not remove tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeChildren($tag1, $uId) {
|
function removeChildren($tag1, $uId) {
|
||||||
$this->removeChild($tag1, NULL, $uId);
|
$this->removeChild($tag1, NULL, $uId);
|
||||||
}
|
}
|
||||||
|
|
||||||
function existsChild($tag1, $tag2, $uId) {
|
function existsChild($tag1, $tag2, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
$tag2 = $tagservice->normalize($tag2);
|
$tag2 = $tagservice->normalize($tag2);
|
||||||
|
|
||||||
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND tag2 = '".$tag2."'";
|
$query.= " AND tag2 = '".$tag2."'";
|
||||||
$query.= " AND relationType = '>'";
|
$query.= " AND relationType = '>'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
//echo($query."<br>\n");
|
//echo($query."<br>\n");
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Synonyms of a same concept are a group. A group has one main synonym called key
|
* Synonyms of a same concept are a group. A group has one main synonym called key
|
||||||
* and a list of synonyms called values.
|
* and a list of synonyms called values.
|
||||||
*/
|
*/
|
||||||
function addSynonym($tag1, $tag2, $uId) {
|
function addSynonym($tag1, $tag2, $uId) {
|
||||||
|
|
||||||
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0
|
||||||
|| ($this->existsSynonym($tag1, $tag2, $uId))) {
|
|| ($this->existsSynonym($tag1, $tag2, $uId))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$case1 = '0'; // not in DB
|
$case1 = '0'; // not in DB
|
||||||
if($this->_isSynonymKey($tag1, $uId)) {
|
if($this->_isSynonymKey($tag1, $uId)) {
|
||||||
$case1 = 'key';
|
$case1 = 'key';
|
||||||
} elseif($this->_isSynonymValue($tag1, $uId)) {
|
} elseif($this->_isSynonymValue($tag1, $uId)) {
|
||||||
$case1 = 'value';
|
$case1 = 'value';
|
||||||
}
|
}
|
||||||
|
|
||||||
$case2 = '0'; // not in DB
|
$case2 = '0'; // not in DB
|
||||||
if($this->_isSynonymKey($tag2, $uId)) {
|
if($this->_isSynonymKey($tag2, $uId)) {
|
||||||
$case2 = 'key';
|
$case2 = 'key';
|
||||||
} elseif($this->_isSynonymValue($tag2, $uId)) {
|
} elseif($this->_isSynonymValue($tag2, $uId)) {
|
||||||
$case2 = 'value';
|
$case2 = 'value';
|
||||||
}
|
}
|
||||||
$case = $case1.$case2;
|
$case = $case1.$case2;
|
||||||
|
|
||||||
// all the possible cases
|
// all the possible cases
|
||||||
switch ($case) {
|
switch ($case) {
|
||||||
case 'keykey':
|
case 'keykey':
|
||||||
$values = $this->_getSynonymValues($tag2, $uId);
|
$values = $this->_getSynonymValues($tag2, $uId);
|
||||||
$this->removeSynonymGroup($tag2, $uId);
|
$this->removeSynonymGroup($tag2, $uId);
|
||||||
foreach($values as $value) {
|
foreach($values as $value) {
|
||||||
$this->addSynonym($tag1, $value['tag'], $uId);
|
$this->addSynonym($tag1, $value['tag'], $uId);
|
||||||
}
|
}
|
||||||
$this->addSynonym($tag1, $tag2, $uId);
|
$this->addSynonym($tag1, $tag2, $uId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'valuekey':
|
case 'valuekey':
|
||||||
$key = $this->_getSynonymKey($tag1, $uId);
|
$key = $this->_getSynonymKey($tag1, $uId);
|
||||||
$this->addSynonym($key, $tag2, $uId);
|
$this->addSynonym($key, $tag2, $uId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'keyvalue':
|
case 'keyvalue':
|
||||||
$this->addSynonym($tag2, $tag1, $uId);
|
$this->addSynonym($tag2, $tag1, $uId);
|
||||||
break;
|
break;
|
||||||
case 'valuevalue':
|
case 'valuevalue':
|
||||||
$key1 = $this->_getSynonymKey($tag1, $uId);
|
$key1 = $this->_getSynonymKey($tag1, $uId);
|
||||||
$key2 = $this->_getSynonymKey($tag2, $uId);
|
$key2 = $this->_getSynonymKey($tag2, $uId);
|
||||||
$this->addSynonym($key1, $key2, $uId);
|
$this->addSynonym($key1, $key2, $uId);
|
||||||
break;
|
break;
|
||||||
case '0value':
|
case '0value':
|
||||||
$key = $this->_getSynonymKey($tag2, $uId);
|
$key = $this->_getSynonymKey($tag2, $uId);
|
||||||
$this->addSynonym($key, $tag1, $uId);
|
$this->addSynonym($key, $tag1, $uId);
|
||||||
break;
|
break;
|
||||||
case 'value0':
|
case 'value0':
|
||||||
$this->addSynonym($tag2, $tag1, $uId);
|
$this->addSynonym($tag2, $tag1, $uId);
|
||||||
break;
|
break;
|
||||||
case '0key':
|
case '0key':
|
||||||
$this->addSynonym($tag2, $tag1, $uId);
|
$this->addSynonym($tag2, $tag1, $uId);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> '=', 'uId'=> $uId);
|
$values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> '=', 'uId'=> $uId);
|
||||||
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
$query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values);
|
||||||
//die($query);
|
//die($query);
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
$this->db->sql_transaction('rollback');
|
$this->db->sql_transaction('rollback');
|
||||||
message_die(GENERAL_ERROR, 'Could not add tag cache synonymy', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not add tag cache synonymy', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->db->sql_transaction('commit');
|
$this->db->sql_transaction('commit');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeSynonymGroup($tag1, $uId) {
|
function removeSynonymGroup($tag1, $uId) {
|
||||||
$query = 'DELETE FROM '. $this->getTableName();
|
$query = 'DELETE FROM '. $this->getTableName();
|
||||||
$query.= ' WHERE 1=1';
|
$query.= ' WHERE 1=1';
|
||||||
$query.= ' AND tag1 = "'. $tag1 .'"';
|
$query.= ' AND tag1 = "'. $tag1 .'"';
|
||||||
$query.= ' AND relationType = "="';
|
$query.= ' AND relationType = "="';
|
||||||
$query.= ' AND uId = "'. $uId .'"';
|
$query.= ' AND uId = "'. $uId .'"';
|
||||||
|
|
||||||
if (!($dbresult =& $this->db->sql_query($query))) {
|
if (!($dbresult =& $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not remove tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not remove tag cache inference', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _isSynonymKey($tag1, $uId) {
|
function _isSynonymKey($tag1, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
|
|
||||||
$query = "SELECT tag1 FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag1 FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '='";
|
$query.= " AND relationType = '='";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _isSynonymValue($tag2, $uId) {
|
function _isSynonymValue($tag2, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag2 = $tagservice->normalize($tag2);
|
$tag2 = $tagservice->normalize($tag2);
|
||||||
|
|
||||||
$query = "SELECT tag2 FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag2 FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag2 = '" .$tag2 ."'";
|
$query.= " WHERE tag2 = '" .$tag2 ."'";
|
||||||
$query.= " AND relationType = '='";
|
$query.= " AND relationType = '='";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSynonyms($tag1, $uId) {
|
function getSynonyms($tag1, $uId) {
|
||||||
$values = array();
|
$values = array();
|
||||||
if($this->_isSynonymKey($tag1, $uId)) {
|
if($this->_isSynonymKey($tag1, $uId)) {
|
||||||
$values = $this->_getSynonymValues($tag1, $uId);
|
$values = $this->_getSynonymValues($tag1, $uId);
|
||||||
} elseif($this->_isSynonymValue($tag1, $uId)) {
|
} elseif($this->_isSynonymValue($tag1, $uId)) {
|
||||||
$key = $this->_getSynonymKey($tag1, $uId);
|
$key = $this->_getSynonymKey($tag1, $uId);
|
||||||
$values = $this->_getSynonymValues($key, $uId, $tag1);
|
$values = $this->_getSynonymValues($key, $uId, $tag1);
|
||||||
$values[] = $key;
|
$values[] = $key;
|
||||||
}
|
}
|
||||||
return $values;
|
return $values;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _getSynonymKey($tag2, $uId) {
|
function _getSynonymKey($tag2, $uId) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag2 = $tagservice->normalize($tag2);
|
$tag2 = $tagservice->normalize($tag2);
|
||||||
|
|
||||||
if($this->_isSynonymKey($tag2)) return $tag2;
|
if($this->_isSynonymKey($tag2)) return $tag2;
|
||||||
|
|
||||||
if($tag2 == '') return false;
|
if($tag2 == '') return false;
|
||||||
|
|
||||||
$query = "SELECT DISTINCT tag1 as 'tag'";
|
$query = "SELECT DISTINCT tag1 as 'tag'";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE relationType = '='";
|
$query.= " WHERE relationType = '='";
|
||||||
$query.= " AND tag2 = '".$tag2."'";
|
$query.= " AND tag2 = '".$tag2."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
//die($query);
|
//die($query);
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$row = $this->db->sql_fetchrow($dbresult);
|
$row = $this->db->sql_fetchrow($dbresult);
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $row['tag'];
|
return $row['tag'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return values associated with a key.
|
* Return values associated with a key.
|
||||||
* $tagExcepted allows to hide a value.
|
* $tagExcepted allows to hide a value.
|
||||||
*/
|
*/
|
||||||
function _getSynonymValues($tag1, $uId, $tagExcepted = NULL) {
|
function _getSynonymValues($tag1, $uId, $tagExcepted = NULL) {
|
||||||
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
$tagservice =SemanticScuttle_Service_Factory::get('Tag');
|
||||||
$tag1 = $tagservice->normalize($tag1);
|
$tag1 = $tagservice->normalize($tag1);
|
||||||
$tagExcepted = $tagservice->normalize($tagExcepted);
|
$tagExcepted = $tagservice->normalize($tagExcepted);
|
||||||
|
|
||||||
if($tag1 == '') return false;
|
if($tag1 == '') return false;
|
||||||
|
|
||||||
$query = "SELECT DISTINCT tag2 as 'tag'";
|
$query = "SELECT DISTINCT tag2 as 'tag'";
|
||||||
$query.= " FROM `". $this->getTableName() ."`";
|
$query.= " FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE relationType = '='";
|
$query.= " WHERE relationType = '='";
|
||||||
$query.= " AND tag1 = '".$tag1."'";
|
$query.= " AND tag1 = '".$tag1."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
$query.= $tagExcepted!=''?" AND tag2!='".$tagExcepted."'":"";
|
$query.= $tagExcepted!=''?" AND tag2!='".$tagExcepted."'":"";
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not get related tags', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rowset = $this->db->sql_fetchrowset($dbresult);
|
$rowset = $this->db->sql_fetchrowset($dbresult);
|
||||||
|
|
||||||
$output = array();
|
$output = array();
|
||||||
foreach($rowset as $row) {
|
foreach($rowset as $row) {
|
||||||
$output[] = $row['tag'];
|
$output[] = $row['tag'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_freeresult($dbresult);
|
$this->db->sql_freeresult($dbresult);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function existsSynonym($tag1, $tag2, $uId) {
|
function existsSynonym($tag1, $tag2, $uId) {
|
||||||
if($this->_getSynonymKey($tag1, $uId) == $tag2 || $this->_getSynonymKey($tag2, $uId) == $tag1) {
|
if($this->_getSynonymKey($tag1, $uId) == $tag2 || $this->_getSynonymKey($tag2, $uId) == $tag1) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function updateTag($tag1, $relationType, $otherTags, $uId) {
|
function updateTag($tag1, $relationType, $otherTags, $uId) {
|
||||||
if($relationType == '=') {
|
if($relationType == '=') {
|
||||||
if($this->getSynonyms($tag1, $uId)) { // remove previous data avoiding unconstistency
|
if($this->getSynonyms($tag1, $uId)) { // remove previous data avoiding unconstistency
|
||||||
$this->removeSynonymGroup($tag1, $uId);
|
$this->removeSynonymGroup($tag1, $uId);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($otherTags as $tag2) {
|
foreach($otherTags as $tag2) {
|
||||||
$this->addSynonym($tag1, $tag2, $uId);
|
$this->addSynonym($tag1, $tag2, $uId);
|
||||||
}
|
}
|
||||||
} elseif($relationType == '>') {
|
} elseif($relationType == '>') {
|
||||||
if(count($this->getChildren($tag1, $uId))>0) { // remove previous data avoiding unconstistency
|
if(count($this->getChildren($tag1, $uId))>0) { // remove previous data avoiding unconstistency
|
||||||
$this->removeChildren($tag1);
|
$this->removeChildren($tag1);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($otherTags as $tag2) {
|
foreach($otherTags as $tag2) {
|
||||||
$this->addChild($tag1, $tag2, $uId);
|
$this->addChild($tag1, $tag2, $uId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteByUser($uId) {
|
function deleteByUser($uId) {
|
||||||
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete user tags cache', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not delete user tags cache', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -8,191 +8,191 @@ class SemanticScuttle_Service_TagStat extends SemanticScuttle_DbService
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function __construct($db)
|
protected function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->tablename = $GLOBALS['tableprefix'] .'tagsstats';
|
$this->tablename = $GLOBALS['tableprefix'] .'tagsstats';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNbChildren($tag1, $relationType, $uId) {
|
function getNbChildren($tag1, $relationType, $uId) {
|
||||||
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
||||||
$query = "SELECT tag1, relationType, uId FROM `". $tts->getTableName() ."`";
|
$query = "SELECT tag1, relationType, uId FROM `". $tts->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query));
|
return $this->db->sql_numrows($this->db->sql_query($query));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNbDescendants($tag1, $relationType, $uId) {
|
function getNbDescendants($tag1, $relationType, $uId) {
|
||||||
$query = "SELECT nb FROM `". $this->getTableName() ."`";
|
$query = "SELECT nb FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
$dbresults =& $this->db->sql_query($query);
|
$dbresults =& $this->db->sql_query($query);
|
||||||
$row = $this->db->sql_fetchrow($dbresults);
|
$row = $this->db->sql_fetchrow($dbresults);
|
||||||
if($row['nb'] == null) {
|
if($row['nb'] == null) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return (int) $row['nb'];
|
return (int) $row['nb'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMaxDepth($tag1, $relationType, $uId) {
|
function getMaxDepth($tag1, $relationType, $uId) {
|
||||||
$query = "SELECT depth FROM `". $this->getTableName() ."`";
|
$query = "SELECT depth FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
$dbresults =& $this->db->sql_query($query);
|
$dbresults =& $this->db->sql_query($query);
|
||||||
$row = $this->db->sql_fetchrow($dbresults);
|
$row = $this->db->sql_fetchrow($dbresults);
|
||||||
if($row['depth'] == null) {
|
if($row['depth'] == null) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return (int) $row['depth'];
|
return (int) $row['depth'];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNbUpdates($tag1, $relationType, $uId) {
|
function getNbUpdates($tag1, $relationType, $uId) {
|
||||||
$query = "SELECT nbupdate FROM `". $this->getTableName() ."`";
|
$query = "SELECT nbupdate FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
$dbresults =& $this->db->sql_query($query);
|
$dbresults =& $this->db->sql_query($query);
|
||||||
$row = $this->db->sql_fetchrow($dbresults);
|
$row = $this->db->sql_fetchrow($dbresults);
|
||||||
if($row['nbupdate'] == null) {
|
if($row['nbupdate'] == null) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return (int) $row['nbupdate'];
|
return (int) $row['nbupdate'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function existStat($tag1, $relationType, $uId) {
|
function existStat($tag1, $relationType, $uId) {
|
||||||
$query = "SELECT tag1, relationType, uId FROM `". $this->getTableName() ."`";
|
$query = "SELECT tag1, relationType, uId FROM `". $this->getTableName() ."`";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
return $this->db->sql_numrows($this->db->sql_query($query))>0;
|
return $this->db->sql_numrows($this->db->sql_query($query))>0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createStat($tag1, $relationType, $uId) {
|
function createStat($tag1, $relationType, $uId) {
|
||||||
$query = "INSERT INTO `". $this->getTableName() ."`";
|
$query = "INSERT INTO `". $this->getTableName() ."`";
|
||||||
$query.= "(tag1, relationType, uId)";
|
$query.= "(tag1, relationType, uId)";
|
||||||
$query.= " VALUES ('".$tag1."','".$relationType."','".$uId."')";
|
$query.= " VALUES ('".$tag1."','".$relationType."','".$uId."')";
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateStat($tag1, $relationType, $uId=null, $stoplist=array()) {
|
function updateStat($tag1, $relationType, $uId=null, $stoplist=array()) {
|
||||||
if(in_array($tag1, $stoplist)) {
|
if(in_array($tag1, $stoplist)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
||||||
$linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId);
|
$linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId);
|
||||||
$nbDescendants = 0;
|
$nbDescendants = 0;
|
||||||
$maxDepth = 0;
|
$maxDepth = 0;
|
||||||
foreach($linkedTags as $linkedTag) {
|
foreach($linkedTags as $linkedTag) {
|
||||||
$nbDescendants+= 1 + $this->getNbDescendants($linkedTag, $relationType, $uId);
|
$nbDescendants+= 1 + $this->getNbDescendants($linkedTag, $relationType, $uId);
|
||||||
$maxDepth = max($maxDepth, 1 + $this->getMaxDepth($linkedTag, $relationType, $uId));
|
$maxDepth = max($maxDepth, 1 + $this->getMaxDepth($linkedTag, $relationType, $uId));
|
||||||
}
|
}
|
||||||
$this->setNbDescendants($tag1, $relationType, $uId, $nbDescendants);
|
$this->setNbDescendants($tag1, $relationType, $uId, $nbDescendants);
|
||||||
$this->setMaxDepth($tag1, $relationType, $uId, $maxDepth);
|
$this->setMaxDepth($tag1, $relationType, $uId, $maxDepth);
|
||||||
$this->increaseNbUpdate($tag1, $relationType, $uId);
|
$this->increaseNbUpdate($tag1, $relationType, $uId);
|
||||||
|
|
||||||
// propagation to the precedent tags
|
// propagation to the precedent tags
|
||||||
$linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId, true);
|
$linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId, true);
|
||||||
$stoplist[] = $tag1;
|
$stoplist[] = $tag1;
|
||||||
foreach($linkedTags as $linkedTag) {
|
foreach($linkedTags as $linkedTag) {
|
||||||
$this->updateStat($linkedTag, $relationType, $uId, $stoplist);
|
$this->updateStat($linkedTag, $relationType, $uId, $stoplist);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateAllStat() {
|
function updateAllStat() {
|
||||||
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
$tts =SemanticScuttle_Service_Factory::get('Tag2Tag');
|
||||||
|
|
||||||
$query = "SELECT tag1, uId FROM `". $tts->getTableName() ."`";
|
$query = "SELECT tag1, uId FROM `". $tts->getTableName() ."`";
|
||||||
$query.= " WHERE relationType = '>'";
|
$query.= " WHERE relationType = '>'";
|
||||||
|
|
||||||
//die($query);
|
//die($query);
|
||||||
|
|
||||||
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
if (! ($dbresult =& $this->db->sql_query($query)) ){
|
||||||
message_die(GENERAL_ERROR, 'Could not update stats', '', __LINE__, __FILE__, $query, $this->db);
|
message_die(GENERAL_ERROR, 'Could not update stats', '', __LINE__, __FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rowset = $this->db->sql_fetchrowset($dbresult);
|
$rowset = $this->db->sql_fetchrowset($dbresult);
|
||||||
foreach($rowset as $row) {
|
foreach($rowset as $row) {
|
||||||
$this->updateStat($row['tag1'], '>', $row['uId']);
|
$this->updateStat($row['tag1'], '>', $row['uId']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setNbDescendants($tag1, $relationType, $uId, $nb) {
|
function setNbDescendants($tag1, $relationType, $uId, $nb) {
|
||||||
if(!$this->existStat($tag1, $relationType, $uId)) {
|
if(!$this->existStat($tag1, $relationType, $uId)) {
|
||||||
$this->createStat($tag1, $relationType, $uId);
|
$this->createStat($tag1, $relationType, $uId);
|
||||||
}
|
}
|
||||||
$query = "UPDATE `". $this->getTableName() ."`";
|
$query = "UPDATE `". $this->getTableName() ."`";
|
||||||
$query.= " SET nb = ". $nb;
|
$query.= " SET nb = ". $nb;
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setMaxDepth($tag1, $relationType, $uId, $depth) {
|
function setMaxDepth($tag1, $relationType, $uId, $depth) {
|
||||||
if(!$this->existStat($tag1, $relationType, $uId)) {
|
if(!$this->existStat($tag1, $relationType, $uId)) {
|
||||||
$this->createStat($tag1, $relationType, $uId);
|
$this->createStat($tag1, $relationType, $uId);
|
||||||
}
|
}
|
||||||
$query = "UPDATE `". $this->getTableName() ."`";
|
$query = "UPDATE `". $this->getTableName() ."`";
|
||||||
$query.= " SET depth = ". $depth;
|
$query.= " SET depth = ". $depth;
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
function increaseNbUpdate($tag1, $relationType, $uId) {
|
function increaseNbUpdate($tag1, $relationType, $uId) {
|
||||||
if(!$this->existStat($tag1, $relationType, $uId)) {
|
if(!$this->existStat($tag1, $relationType, $uId)) {
|
||||||
$this->createStat($tag1, $relationType, $uId);
|
$this->createStat($tag1, $relationType, $uId);
|
||||||
}
|
}
|
||||||
$query = "UPDATE `". $this->getTableName() ."`";
|
$query = "UPDATE `". $this->getTableName() ."`";
|
||||||
$query.= " SET nbupdate = nbupdate + 1";
|
$query.= " SET nbupdate = nbupdate + 1";
|
||||||
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
$query.= " WHERE tag1 = '" .$tag1 ."'";
|
||||||
$query.= " AND relationType = '". $relationType ."'";
|
$query.= " AND relationType = '". $relationType ."'";
|
||||||
$query.= " AND uId = '".$uId."'";
|
$query.= " AND uId = '".$uId."'";
|
||||||
|
|
||||||
//die($query);
|
//die($query);
|
||||||
|
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteTagStatForUser($uId) {
|
function deleteTagStatForUser($uId) {
|
||||||
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
$query = 'DELETE FROM '. $this->getTableName() .' WHERE uId = '. intval($uId);
|
||||||
|
|
||||||
if (!($dbresult = & $this->db->sql_query($query))) {
|
if (!($dbresult = & $this->db->sql_query($query))) {
|
||||||
message_die(GENERAL_ERROR, 'Could not delete tag stats', '', __LINE__,
|
message_die(GENERAL_ERROR, 'Could not delete tag stats', '', __LINE__,
|
||||||
__FILE__, $query, $this->db);
|
__FILE__, $query, $this->db);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAll() {
|
function deleteAll() {
|
||||||
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
$query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
|
||||||
$this->db->sql_query($query);
|
$this->db->sql_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
{
|
{
|
||||||
protected $basedir;
|
protected $basedir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the single service instance
|
* Returns the single service instance
|
||||||
|
@ -10,48 +10,48 @@ class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Service
|
* @return SemanticScuttle_Service
|
||||||
*/
|
*/
|
||||||
public static function getInstance($db)
|
public static function getInstance($db)
|
||||||
{
|
{
|
||||||
static $instance;
|
static $instance;
|
||||||
if (!isset($instance)) {
|
if (!isset($instance)) {
|
||||||
$instance = new self($db);
|
$instance = new self($db);
|
||||||
}
|
}
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->basedir = $GLOBALS['TEMPLATES_DIR'];
|
$this->basedir = $GLOBALS['TEMPLATES_DIR'];
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTemplate($template, $vars = NULL) {
|
function loadTemplate($template, $vars = NULL) {
|
||||||
if (substr($template, -4) != '.php')
|
if (substr($template, -4) != '.php')
|
||||||
$template .= '.php';
|
$template .= '.php';
|
||||||
$tpl =& new Template($this->basedir .'/'. $template, $vars, $this);
|
$tpl =& new Template($this->basedir .'/'. $template, $vars, $this);
|
||||||
$tpl->parse();
|
$tpl->parse();
|
||||||
return $tpl;
|
return $tpl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Template {
|
class Template {
|
||||||
var $vars = array();
|
var $vars = array();
|
||||||
var $file = '';
|
var $file = '';
|
||||||
var $templateservice;
|
var $templateservice;
|
||||||
|
|
||||||
function Template($file, $vars = NULL, &$templateservice) {
|
function Template($file, $vars = NULL, &$templateservice) {
|
||||||
$this->vars = $vars;
|
$this->vars = $vars;
|
||||||
$this->file = $file;
|
$this->file = $file;
|
||||||
$this->templateservice = $templateservice;
|
$this->templateservice = $templateservice;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parse() {
|
function parse() {
|
||||||
if (isset($this->vars))
|
if (isset($this->vars))
|
||||||
extract($this->vars);
|
extract($this->vars);
|
||||||
include($this->file);
|
include($this->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
function includeTemplate($name) {
|
function includeTemplate($name) {
|
||||||
return $this->templateservice->loadTemplate($name, $this->vars);
|
return $this->templateservice->loadTemplate($name, $this->vars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue