qa-db-blobs.php 3.01 KB
Newer Older
Gideon Greenspan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
<?php
	
/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/

	
	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.
	
	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
/*
Gideon Greenspan 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); }
Gideon Greenspan committed
39 40 41 42 43 44 45 46 47
		
		for ($attempt=0; $attempt<10; $attempt++) {
			$blobid=qa_db_random_bigint();
			
			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 50 51 52 53 54 55 56 57 58 59
			);
		
			return $blobid;
		}
		
		return null;
	}
	
	
	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); }
Gideon Greenspan committed
64 65 66 67 68 69 70 71
		
		return qa_db_read_one_assoc(qa_db_query_sub(
			'SELECT content, format, filename FROM ^blobs WHERE blobid=#',
			$blobid
		), true);
	}
	
	
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 82 83
	{
		qa_db_query_sub(
			'UPDATE ^blobs SET content=$ WHERE blobid=#',
			$content, $blobid
		);
	}
	
	
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); }
Gideon Greenspan committed
90 91 92 93 94 95 96 97 98 99 100 101 102
		
		qa_db_query_sub(
			'DELETE FROM ^blobs WHERE blobid=#',
			$blobid
		);
	}

	
	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); }
Gideon Greenspan committed
104 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
*/