Location: PHPKode > projects > Energine > energine-2.2/core2a/framework/TagManager.class.php
<?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));
    }

}
Return current item: Energine