qa-db-blobs.php 2.99 KB
Newer Older
Gideon Greenspan committed
1
<?php
Scott Vivian committed
2

Gideon Greenspan committed
3 4 5 6 7
/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/

Scott Vivian committed
8

Gideon Greenspan committed
9 10 11 12 13 14 15 16 17
	File: qa-include/qa-db-blobs.php
	Version: See define()s at top of qa-include/qa-base.php
	Description: Database-level access to blobs table for large chunks of data (e.g. images)


	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.
Scott Vivian committed
18

Gideon Greenspan committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32
	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
*/

	if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
		header('Location: ../');
		exit;
	}


Gideon Greenspan committed
33
	function qa_db_blob_create($content, $format, $sourcefilename=null, $userid=null, $cookieid=null, $ip=null)
Gideon Greenspan committed
34
/*
Scott Vivian committed
35
	Create a new blob in the database with $content and $format, other fields as provided
Gideon Greenspan committed
36 37
*/
	{
Gideon Greenspan committed
38
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
39

Gideon Greenspan committed
40 41
		for ($attempt=0; $attempt<10; $attempt++) {
			$blobid=qa_db_random_bigint();
Scott Vivian committed
42

Gideon Greenspan committed
43 44 45 46 47
			if (qa_db_blob_exists($blobid))
				continue;

			qa_db_query_sub(
				'INSERT INTO ^blobs (blobid, format, content, filename, userid, cookieid, createip, created) VALUES (#, $, $, $, $, #, INET_ATON($), NOW())',
Gideon Greenspan committed
48
				$blobid, $format, $content, $sourcefilename, $userid, $cookieid, $ip
Gideon Greenspan committed
49
			);
Scott Vivian committed
50

Gideon Greenspan committed
51 52
			return $blobid;
		}
Scott Vivian committed
53

Gideon Greenspan committed
54 55
		return null;
	}
Scott Vivian committed
56 57


Gideon Greenspan committed
58 59
	function qa_db_blob_read($blobid)
/*
Gideon Greenspan committed
60
	Get the information about blob $blobid from the database
Gideon Greenspan committed
61 62
*/
	{
Gideon Greenspan committed
63
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
64

Gideon Greenspan committed
65 66 67 68 69
		return qa_db_read_one_assoc(qa_db_query_sub(
			'SELECT content, format, filename FROM ^blobs WHERE blobid=#',
			$blobid
		), true);
	}
Scott Vivian committed
70 71


Gideon Greenspan committed
72
	function qa_db_blob_set_content($blobid, $content)
Gideon Greenspan committed
73 74 75
/*
	Change the content of blob $blobid in the database to $content (can also be null)
*/
Gideon Greenspan committed
76 77 78 79 80 81
	{
		qa_db_query_sub(
			'UPDATE ^blobs SET content=$ WHERE blobid=#',
			$content, $blobid
		);
	}
Scott Vivian committed
82 83


Gideon Greenspan committed
84 85 86 87 88
	function qa_db_blob_delete($blobid)
/*
	Delete blob $blobid in the database
*/
	{
Gideon Greenspan committed
89
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
90

Gideon Greenspan committed
91 92 93 94 95 96
		qa_db_query_sub(
			'DELETE FROM ^blobs WHERE blobid=#',
			$blobid
		);
	}

Scott Vivian committed
97

Gideon Greenspan committed
98 99 100 101 102
	function qa_db_blob_exists($blobid)
/*
	Check if blob $blobid exists in the database
*/
	{
Gideon Greenspan committed
103
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
104

Gideon Greenspan committed
105 106 107 108 109 110 111 112 113 114
		return qa_db_read_one_value(qa_db_query_sub(
			'SELECT COUNT(*) FROM ^blobs WHERE blobid=#',
			$blobid
		)) > 0;
	}


/*
	Omit PHP closing tag to help avoid accidental output
*/