| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- <?php
 
- namespace Elgg\Database;
 
- use Elgg\Cache\Pool;
 
- use Elgg\Database;
 
- /**
 
-  * Normalization for strings used in metadata and annoations tables.
 
-  * 
 
-  * WARNING: API IN FLUX. DO NOT USE DIRECTLY.
 
-  *
 
-  * @access private
 
-  *
 
-  * @package    Elgg.Core
 
-  * @subpackage Database
 
-  * @since      1.10.0
 
-  * 
 
-  * @access private
 
-  */
 
- class MetastringsTable {
 
- 	/** @var Pool */
 
- 	private $cache;
 
- 	/** @var Database */
 
- 	private $db;
 
- 	/**
 
- 	 * Constructor
 
- 	 * 
 
- 	 * @param Pool     $cache A cache for this table.
 
- 	 * @param Database $db    The database.
 
- 	 */
 
- 	public function __construct(Pool $cache, Database $db) {
 
- 		$this->cache = $cache;
 
- 		$this->db = $db;
 
- 	}
 
- 	/**
 
- 	 * Gets the metastring identifier for a value.
 
- 	 *
 
- 	 * Elgg normalizes the names and values of annotations and metadata. This function
 
- 	 * provides the identifier used as the index in the metastrings table. Plugin
 
- 	 * developers should only use this if denormalizing names/values for performance
 
- 	 * reasons (to avoid multiple joins on the metastrings table).
 
- 	 *
 
- 	 * @param string $string         The value
 
- 	 * @param bool   $case_sensitive Should the retrieval be case sensitive?
 
- 	 *                               If not, there may be more than one result
 
- 	 *
 
- 	 * @return int|array metastring id or array of ids
 
- 	 */
 
- 	function getId($string, $case_sensitive = true) {
 
- 		if ($case_sensitive) {
 
- 			return $this->getIdCaseSensitive($string);
 
- 		} else {
 
- 			return $this->getIdCaseInsensitive($string);
 
- 		}
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Gets the id associated with this string, case-sensitively.
 
- 	 * Will add the string to the table if not present.
 
- 	 * 
 
- 	 * @param string $string The value
 
- 	 * 
 
- 	 * @return int
 
- 	 */
 
- 	private function getIdCaseSensitive($string) {
 
- 		$string = (string)$string;
 
- 		return $this->cache->get($string, function() use ($string) {
 
- 			$escaped_string = $this->db->sanitizeString($string);
 
- 			$query = "SELECT * FROM {$this->getTableName()} WHERE string = BINARY '$escaped_string' LIMIT 1";
 
- 			$results = $this->db->getData($query);
 
- 			if (isset($results[0])) {
 
- 				return $results[0]->id;
 
- 			} else {
 
- 				return $this->add($string);
 
- 			}
 
- 		});
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Gets all ids associated with this string when taken case-insensitively.
 
- 	 * Will add the string to the table if not present.
 
- 	 * 
 
- 	 * @param string $string The value
 
- 	 * 
 
- 	 * @return int[]
 
- 	 */
 
- 	private function getIdCaseInsensitive($string) {
 
- 		$string = (string)$string;
 
- 		// caching doesn't work for case insensitive requests
 
- 		$escaped_string = $this->db->sanitizeString($string);
 
- 		$query = "SELECT * FROM {$this->getTableName()} WHERE string = '$escaped_string'";
 
- 		$results = $this->db->getData($query);
 
- 		$ids = array();
 
- 		foreach ($results as $result) {
 
- 			$ids[] = $result->id;
 
- 		}
 
- 		if (empty($ids)) {
 
- 			$ids[] = $this->add($string);
 
- 		}
 
- 		return $ids;
 
- 	}	
 
- 	
 
- 	/**
 
- 	 * Add a metastring.
 
- 	 *
 
- 	 * @warning You should not call this directly. Use elgg_get_metastring_id().
 
- 	 *
 
- 	 * @param string $string The value to be normalized
 
- 	 * @return int The identifier for this string
 
- 	 */
 
- 	function add($string) {
 
- 		$escaped_string = $this->db->sanitizeString(trim($string));
 
- 	
 
- 		return $this->db->insertData("INSERT INTO {$this->getTableName()} (string) VALUES ('$escaped_string')");
 
- 	}
 
- 	
 
- 	/**
 
- 	 * The full name of the metastrings table, including prefix.
 
- 	 * 
 
- 	 * @return string
 
- 	 */
 
- 	public function getTableName() {
 
- 		return $this->db->getTablePrefix() . "metastrings";
 
- 	}
 
- }
 
 
  |