<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ TagManager
*
* @package energine
* @subpackage core
* @author dr.Pavka
* @copyright ColoCall 2007
* @version $Id: TagManager.class.php,v 1.5 2007/12/18 11:31:47 pavka Exp $
*/
//require_once('core/framework/DBWorker.class.php');
/**
* ÐлаÑÑ - ÑинглÑон Ð´Ð»Ñ ÑабоÑÑ Ñ ÑÑгами
*
* @package energine
* @subpackage core
*/
class TagManager extends DBWorker {
/**
* ÐÐ¼Ñ ÑаблиÑÑ Ñегов
*
*/
const TABLE_NAME = 'share_tags';
/**
* ÐÐ¼Ñ ÑаблиÑÑ ÑвÑзи Ñегов и Ñазделов
*
*/
const MAP_TABLE_NAME = 'share_tag_map';
/**
* @access private
* @static
* @var TagManager единÑй Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа TagManager
*/
private static $instance;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÐµÐ´Ð¸Ð½Ñй Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ ÑкземплÑÑ ÐºÐ»Ð°ÑÑа TagManager
*
* @access public
* @static
* @return TagManager
*/
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new TagManager();
}
return self::$instance;
}
/**
* ÐÑовеÑÑÐµÑ ÑÑÑеÑÑвÑÐµÑ Ð»Ð¸ Ñег Ñ Ñаким именем
*
* @return bool
* @access public
*/
public function tagExists($tagName) {
return (bool)simplifyDBResult($this->dbh->select(self::TABLE_NAME, 'count(tag_id) as cnt', array('tag_name'=>$tagName)), 'cnt', true);
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ñега
*
* @return int
* @access private
*/
private function getTagID($tagName) {
$result = simplifyDBResult($this->dbh->select(self::TABLE_NAME, 'tag_id', array('tag_name'=>$tagName)), 'tag_id', true);
if (empty($result)) {
$result = false;
}
return $result;
}
/**
* Ð¡Ð¾Ð·Ð´Ð°ÐµÑ Ð½Ð¾Ð²Ñй Ñег
*
* @param string
* @return Tag
* @access public
*/
public function createTag($tagName) {
return $this->dbh->modify(QAL::INSERT, self::TABLE_NAME, array('tag_name'=>$tagName, 'tag_text'=>$tagName));
}
/**
* ÐобавлÑÐµÑ Ñег к ÑÑÑаниÑе
*
* @return bool
* @access public
*/
public function addTagToPage($tagName, $pageID) {
if (!$this->tagExists($tagName)) {
$tagID = $this->createTag($tagName);
}
else {
$tagID = $this->getTagID($tagName);
}
$condition = array('smap_id'=>$pageID, 'tag_id'=>$tagID);
$this->dbh->modify(QAL::DELETE, self::MAP_TABLE_NAME, null, $condition);
$this->dbh->modify(QAL::INSERT, self::MAP_TABLE_NAME, $condition);
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð²Ñе Ñеги ÑÑÑаниÑÑ
*
* @return array
* @access public
*/
public function getPageTags($pageID) {
$result = simplifyDBResult(
$this->dbh->selectRequest('SELECT tag_name FROM '.self::MAP_TABLE_NAME.' map '.
'LEFT JOIN '.self::TABLE_NAME.' tags ON tags.tag_id=map.tag_id '.
'WHERE smap_id = '.$pageID
), 'tag_name');
if (!$result) {
$result = array();
}
return $result;
}
/**
* УбиÑÐ°ÐµÑ Ð²Ñе Ñеги ÑÑÑаниÑÑ
*
* @return void
* @access public
*/
public function clearPageTags($pageID) {
$this->dbh->modify(QAL::DELETE, self::MAP_TABLE_NAME, null, array('smap_id'=>$pageID));
}
}