metas.php 6.05 KB
Newer Older
Scott committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	Description: Database-level access to metas tables


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

Scott committed
22
if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
23
	header('Location: ../../');
Scott committed
24 25 26 27 28 29
	exit;
}


/**
 * Set the metadata for user $userid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
30 31 32
 * @param mixed $userid
 * @param string $key
 * @param string $value
Scott committed
33 34 35 36 37 38 39 40 41
 */
function qa_db_usermeta_set($userid, $key, $value)
{
	qa_db_meta_set('usermetas', 'userid', $userid, $key, $value);
}


/**
 * Clear the metadata for user $userid with $key ($key can also be an array of keys)
42 43
 * @param mixed $userid
 * @param string $key
Scott committed
44 45 46 47 48 49 50 51 52 53
 */
function qa_db_usermeta_clear($userid, $key)
{
	qa_db_meta_clear('usermetas', 'userid', $userid, $key);
}


/**
 * Return the metadata value for user $userid with $key ($key can also be an array of keys in which case this
 * returns an array of metadata key => value).
54 55
 * @param mixed $userid
 * @param string $key
Scott committed
56 57 58 59 60 61 62 63 64 65
 * @return array|mixed|null
 */
function qa_db_usermeta_get($userid, $key)
{
	return qa_db_meta_get('usermetas', 'userid', $userid, $key);
}


/**
 * Set the metadata for post $postid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
66 67 68
 * @param int $postid
 * @param string $key
 * @param string $value
Scott committed
69 70 71 72 73 74 75 76 77
 */
function qa_db_postmeta_set($postid, $key, $value)
{
	qa_db_meta_set('postmetas', 'postid', $postid, $key, $value);
}


/**
 * Clear the metadata for post $postid with $key ($key can also be an array of keys)
78 79
 * @param int $postid
 * @param string $key
Scott committed
80 81 82 83 84 85 86 87 88 89
 */
function qa_db_postmeta_clear($postid, $key)
{
	qa_db_meta_clear('postmetas', 'postid', $postid, $key);
}


/**
 * Return the metadata value for post $postid with $key ($key can also be an array of keys in which case this
 * returns an array of metadata key => value).
90 91
 * @param int $postid
 * @param string $key
Scott committed
92 93 94 95 96 97 98 99 100 101
 * @return array|mixed|null
 */
function qa_db_postmeta_get($postid, $key)
{
	return qa_db_meta_get('postmetas', 'postid', $postid, $key);
}


/**
 * Set the metadata for category $categoryid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
102 103 104
 * @param int $categoryid
 * @param string $key
 * @param string $value
Scott committed
105 106 107 108 109 110 111 112 113
 */
function qa_db_categorymeta_set($categoryid, $key, $value)
{
	qa_db_meta_set('categorymetas', 'categoryid', $categoryid, $key, $value);
}


/**
 * Clear the metadata for category $categoryid with $key ($key can also be an array of keys)
114 115
 * @param int $categoryid
 * @param string $key
Scott committed
116 117 118 119 120 121 122 123 124 125
 */
function qa_db_categorymeta_clear($categoryid, $key)
{
	qa_db_meta_clear('categorymetas', 'categoryid', $categoryid, $key);
}


/**
 * Return the metadata value for category $categoryid with $key ($key can also be an array of keys in which
 * case this returns an array of metadata key => value).
126 127
 * @param int $categoryid
 * @param string $key
Scott committed
128 129 130 131 132 133 134 135 136 137
 * @return array|mixed|null
 */
function qa_db_categorymeta_get($categoryid, $key)
{
	return qa_db_meta_get('categorymetas', 'categoryid', $categoryid, $key);
}


/**
 * Set the metadata for tag $tag with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
138 139 140
 * @param string $tag
 * @param string $key
 * @param string $value
Scott committed
141 142 143 144 145 146 147 148 149
 */
function qa_db_tagmeta_set($tag, $key, $value)
{
	qa_db_meta_set('tagmetas', 'tag', $tag, $key, $value);
}


/**
 * Clear the metadata for tag $tag with $key ($key can also be an array of keys)
150 151
 * @param string $tag
 * @param string $key
Scott committed
152 153 154 155 156 157 158 159 160 161
 */
function qa_db_tagmeta_clear($tag, $key)
{
	qa_db_meta_clear('tagmetas', 'tag', $tag, $key);
}


/**
 * Return the metadata value for tag $tag with $key ($key can also be an array of keys in which case this
 * returns an array of metadata key => value).
162 163 164
 * @param string $tag
 * @param string $key
 * @return mixed
Scott committed
165 166 167 168 169 170 171 172 173
 */
function qa_db_tagmeta_get($tag, $key)
{
	return qa_db_meta_get('tagmetas', 'tag', $tag, $key);
}


/**
 * Internal general function to set metadata
174 175 176 177 178
 * @param string $metatable
 * @param string $idcolumn
 * @param string $idvalue
 * @param string $title
 * @param string $content
Scott committed
179 180 181 182 183 184 185 186 187 188 189 190 191
 */
function qa_db_meta_set($metatable, $idcolumn, $idvalue, $title, $content)
{
	qa_db_query_sub(
		'INSERT INTO ^' . $metatable . ' (' . $idcolumn . ', title, content) VALUES ($, $, $) ' .
		'ON DUPLICATE KEY UPDATE content = VALUES(content)',
		$idvalue, $title, $content
	);
}


/**
 * Internal general function to clear metadata
192 193 194 195
 * @param string $metatable
 * @param string $idcolumn
 * @param string $idvalue
 * @param string|array $title
Scott committed
196 197 198 199 200
 */
function qa_db_meta_clear($metatable, $idcolumn, $idvalue, $title)
{
	if (is_array($title)) {
		if (count($title)) {
Scott committed
201
			qa_db_query_sub(
Scott committed
202
				'DELETE FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title IN ($)',
Scott committed
203 204
				$idvalue, $title
			);
Scott committed
205 206 207 208 209 210
		}
	} else {
		qa_db_query_sub(
			'DELETE FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title=$',
			$idvalue, $title
		);
Scott committed
211
	}
Scott committed
212 213 214 215 216
}


/**
 * Internal general function to return metadata
217 218 219 220 221
 * @param string $metatable
 * @param string $idcolumn
 * @param string $idvalue
 * @param string|array $title
 * @return mixed
Scott committed
222 223 224 225 226 227 228
 */
function qa_db_meta_get($metatable, $idcolumn, $idvalue, $title)
{
	if (is_array($title)) {
		if (count($title)) {
			return qa_db_read_all_assoc(qa_db_query_sub(
				'SELECT title, content FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title IN($)',
Scott committed
229
				$idvalue, $title
Scott committed
230 231 232 233 234 235 236 237 238 239 240 241
			), 'title', 'content');
		} else {
			return array();
		}

	} else {
		return qa_db_read_one_value(qa_db_query_sub(
			'SELECT content FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title=$',
			$idvalue, $title
		), true);
	}
}