Update blob streaming to match the current API and use the PBMS PHP extension.
This commit is contained in:

committed by
Marc Delisle

parent
e65625ce1e
commit
f8653e5803
@@ -32,52 +32,7 @@
|
||||
// necessary variables exist
|
||||
if ($bsDB && $bsTable && $bsReference && $bsNewMIMEType)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration exists
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// if BS plugins exist
|
||||
if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
|
||||
{
|
||||
$pbms_ref_tbl = $PMA_Config->get('PBMS_NAME') . '_reference';
|
||||
$pbms_cust_content_type_tbl = $PMA_Config->get('PBMS_NAME') . '_custom_content_type';
|
||||
|
||||
// if specified DB is selected
|
||||
if (PMA_DBI_select_db($bsDB))
|
||||
{
|
||||
$query = "SELECT * FROM " . PMA_backquote($pbms_ref_tbl);
|
||||
$query .= " WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
|
||||
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// if record exists
|
||||
if ($data = PMA_DBI_fetch_assoc($result))
|
||||
{
|
||||
$query = "SELECT count(*) FROM " . PMA_backquote($pbms_cust_content_type_tbl);
|
||||
$query .= " WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
|
||||
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// if record exists
|
||||
if ($data = PMA_DBI_fetch_assoc($result))
|
||||
{
|
||||
if (1 == $data['count(*)'])
|
||||
{
|
||||
$query = "UPDATE " . PMA_backquote($pbms_cust_content_type_tbl) . " SET Content_type='";
|
||||
$query .= PMA_sqlAddslashes($bsNewMIMEType) . "' WHERE Blob_url='" . PMA_sqlAddslashes($bsReference) . "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
$query = "INSERT INTO " . PMA_backquote($pbms_cust_content_type_tbl) . " (Blob_url, Content_type)";
|
||||
$query .= " VALUES('" . PMA_sqlAddslashes($bsReference) . "', '" . PMA_sqlAddslashes($bsNewMIMEType) . "')";
|
||||
}
|
||||
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// if query execution succeeded
|
||||
if ($result)
|
||||
if (PMA_BS_SetContentType($bsDB, $bsTable, $bsReference, $bsNewMIMEType))
|
||||
{
|
||||
// determine redirector page
|
||||
$newLoc = $cfg['PmaAbsoluteUri'] . 'sql.php?' . PMA_generate_common_url ('','', '&') . (isset($bsDB) ? '&db=' . urlencode($bsDB) : '') . (isset($bsTable) ? '&table=' . urlencode($bsTable) : '') . (isset($token) ? '&token=' . urlencode($token) : '') . (isset($goto) ? '&goto=' . urlencode($goto) : '') . '&reload=1&purge=1';
|
||||
@@ -89,11 +44,7 @@
|
||||
</script>
|
||||
<?php
|
||||
} // end if ($result)
|
||||
} // end if ($data = PMA_DBI_fetch_assoc($result))
|
||||
} // end if ($data = PMA_DBI_fetch_assoc($result))
|
||||
} // end if (PMA_DBI_select_db($bsDB))
|
||||
} // end if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
|
||||
} // end if (!empty($PMA_Config))
|
||||
|
||||
} // end if ($bsDB && $bsTable && $bsReference && $bsNewMIMEType)
|
||||
|
||||
?>
|
||||
|
@@ -9,13 +9,6 @@
|
||||
*/
|
||||
require_once './libraries/common.inc.php';
|
||||
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// retrieve BS server variables from PMA configuration
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
if (empty($bs_server)) die('No blob streaming server configured!');
|
||||
|
||||
// Check URL parameters
|
||||
PMA_checkParameters(array('reference', 'c_type'));
|
||||
|
||||
@@ -30,7 +23,9 @@ $reference = $_REQUEST['reference'];
|
||||
*/
|
||||
$c_type = preg_replace('/[^A-Za-z0-9/_-]/', '_', $_REQUEST['c_type']);
|
||||
|
||||
$filename = 'http://' . $bs_server . '/' . $reference;
|
||||
// Get the blob streaming URL
|
||||
$filename = PMA_BS_getURL($reference);
|
||||
if (empty($filename)) die('No blob streaming server configured!');
|
||||
|
||||
$hdrs = get_headers($filename, 1);
|
||||
|
||||
|
@@ -27,21 +27,13 @@
|
||||
// if media type and BS reference are specified
|
||||
if (isset($mediaType) && isset($bsReference))
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration exists
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// retrieve BS server variables from PMA configuration
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
if (empty($bs_server)) die('No blob streaming server configured!');
|
||||
|
||||
$bs_file_path = "http://" . $bs_server . '/' . $bsReference;
|
||||
|
||||
if (isset($customType) && $customType)
|
||||
|
||||
$bs_file_path = 'bs_disp_as_mime_type.php' . PMA_generate_common_url(array('reference' => $bsReference, 'c_type' => $mediaType));
|
||||
else {
|
||||
// Get the BLOB streaming URL
|
||||
$bs_file_path = PMA_BS_getURL($bsReference);
|
||||
if (empty($bs_file_path)) die('No blob streaming server configured!');
|
||||
}
|
||||
|
||||
?>
|
||||
<html>
|
||||
@@ -69,7 +61,6 @@
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
} // end if (!empty($PMA_Config))
|
||||
} // end if (isset($mediaType) && isset($bsReference))
|
||||
|
||||
?>
|
||||
|
@@ -19,9 +19,6 @@ require_once './libraries/common.inc.php';
|
||||
require_once './libraries/Table.class.php';
|
||||
require_once './libraries/mysql_charsets.lib.php';
|
||||
|
||||
// add blobstreaming library functions
|
||||
require_once "./libraries/blobstreaming.lib.php";
|
||||
|
||||
/**
|
||||
* Rename/move or copy database
|
||||
*/
|
||||
@@ -260,65 +257,6 @@ if (strlen($db) && (! empty($db_rename) || ! empty($db_copy))) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable/Disable/Repair BLOB Repository Monitoring for current database
|
||||
*/
|
||||
if (strlen($db) > 0 && !empty($db_blob_streaming_op))
|
||||
{
|
||||
// load PMA_Config
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
|
||||
{
|
||||
// if Blobstreaming plugins exist, begin checking for Blobstreaming tables
|
||||
if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
|
||||
{
|
||||
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
$bs_tables = $bs_tables[$db];
|
||||
|
||||
$oneBSTableExists = FALSE;
|
||||
|
||||
// check if at least one blobstreaming table exists
|
||||
foreach ($bs_tables as $table_key=>$tbl)
|
||||
if ($bs_tables[$table_key]['Exists'])
|
||||
{
|
||||
$oneBSTableExists = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
switch ($db_blob_streaming_op)
|
||||
{
|
||||
// enable BLOB repository monitoring
|
||||
case "enable":
|
||||
// if blobstreaming tables do not exist, create them
|
||||
if (!$oneBSTableExists)
|
||||
PMA_BS_CreateTables($db);
|
||||
break;
|
||||
// disable BLOB repository monitoring
|
||||
case "disable":
|
||||
// if at least one blobstreaming table exists, execute drop
|
||||
if ($oneBSTableExists)
|
||||
PMA_BS_DropTables($db);
|
||||
break;
|
||||
// repair BLOB repository
|
||||
case "repair":
|
||||
// check if a blobstreaming table is missing
|
||||
foreach ($bs_tables as $table_key=>$tbl)
|
||||
if (!$bs_tables[$table_key]['Exists'])
|
||||
{
|
||||
PMA_DBI_select_db($db);
|
||||
PMA_DBI_query(PMA_BS_GetTableStruct($table_key));
|
||||
}
|
||||
}
|
||||
|
||||
// refresh side menu
|
||||
PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . 'db_operations.php?' . PMA_generate_common_url ('','', '&') . (isset($db) ? '&db=' . urlencode($db) : '') . (isset($token) ? '&token=' . urlencode($token) : '') . (isset($goto) ? '&goto=' . urlencode($goto) : '') . 'reload=1&purge=1');
|
||||
} // end if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST'))
|
||||
} // end if ($PMA_Config->get('PBXT_NAME') !== strtolower($db))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Settings for relations stuff
|
||||
|
@@ -150,25 +150,16 @@ $hidden_fields = array();
|
||||
$odd_row = true;
|
||||
$sum_row_count_pre = '';
|
||||
|
||||
// for blobstreaming
|
||||
// added by rajk - for blobstreaming
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
if (!empty($PMA_Config))
|
||||
$session_bs_tables = $PMA_Config->get('BLOBSTREAMING_TABLES'); // list of blobstreaming tables
|
||||
|
||||
$tableReductionCount = 0; // the amount to reduce the table count by
|
||||
|
||||
foreach ($tables as $keyname => $each_table) {
|
||||
if (isset($session_bs_tables))
|
||||
{
|
||||
// compare table name against blobstreaming tables
|
||||
foreach ($session_bs_tables as $table_key=>$table_val)
|
||||
// if the table is a blobstreaming table, reduce table count and skip outer foreach loop
|
||||
if ($table_key == $keyname)
|
||||
{
|
||||
|
||||
if (PMA_BS_IsHiddenTable($keyname)) {
|
||||
$tableReductionCount++;
|
||||
continue 2;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get valid statistics whatever is the table type
|
||||
|
@@ -285,111 +285,23 @@ class PMA_File
|
||||
// if request is an upload to the BLOB repository
|
||||
if ($is_bs_upload)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration is loaded
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// load BS variables from PMA configuration
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
$curlExists = $PMA_Config->get('CURL_EXISTS');
|
||||
$bs_database = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
$bs_database = $bs_database[$_REQUEST['db']];
|
||||
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
// determine if plugins and curl exist
|
||||
if ($pluginsExist && $curlExists)
|
||||
{
|
||||
foreach ($bs_database as $table_key=>$table)
|
||||
{
|
||||
if (!$bs_database[$table_key]['Exists'])
|
||||
{
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
$allBSTablesExist = FALSE;
|
||||
|
||||
// if necessary BS tables exist
|
||||
if ($allBSTablesExist)
|
||||
{
|
||||
// setup bs variables for uploading
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
$bs_db = $_REQUEST['db'];
|
||||
$bs_table = $_REQUEST['table'];
|
||||
|
||||
// setup file handle and related variables
|
||||
$tmp_file = fopen($file['tmp_name'], 'r');
|
||||
$tmp_filename = $file['tmp_name'];
|
||||
$tmp_file_type = $file['type'];
|
||||
$tmp_file_size = $file['size'];
|
||||
|
||||
if (!$tmp_file_type)
|
||||
$tmp_file_type = NULL;
|
||||
|
||||
// if none of the required variables contain data, return with an unknown error message
|
||||
if (!$bs_server || !$bs_db || !$bs_table || !$tmp_file || !$tmp_file_size)
|
||||
|
||||
if (!$bs_db || !$bs_table)
|
||||
{
|
||||
$this->_error_message = __('Unknown error in file upload.');
|
||||
$this->_error_message = $GLOBALS['strUploadErrorUnknown'];
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
$bs_server_path = 'http://' . $bs_server . '/' . $bs_db . '/' . $bs_table;
|
||||
$blob_url = PMA_BS_UpLoadFile($bs_db, $bs_table, $tmp_file_type, $tmp_filename);
|
||||
PMA_File::setRecentBLOBReference($blob_url);
|
||||
|
||||
// init curl handle
|
||||
$curlHnd = curl_init ($bs_server_path);
|
||||
|
||||
// if curl handle init successful
|
||||
if ($curlHnd)
|
||||
{
|
||||
// specify custom header
|
||||
$customHeader = array(
|
||||
"Accept-Language: en-us;en;q=0;5",
|
||||
"Accept-Charset: ISO-8859-1;utf-8;q=0.7,*;q=0.7",
|
||||
"Content-type: $tmp_file_type"
|
||||
);
|
||||
|
||||
// specify CURL options in array
|
||||
$curlOptArr = array(
|
||||
CURLOPT_PUT => TRUE,
|
||||
CURLOPT_HEADER => TRUE,
|
||||
CURLOPT_HTTPHEADER => $customHeader,
|
||||
CURLOPT_INFILESIZE => $tmp_file_size,
|
||||
CURLOPT_INFILE => $tmp_file,
|
||||
CURLOPT_RETURNTRANSFER => TRUE
|
||||
);
|
||||
|
||||
// pass array of options to curl handle setup function
|
||||
curl_setopt_array($curlHnd, $curlOptArr);
|
||||
|
||||
// execute curl request and retrieve error message(s) (if any)
|
||||
$ret = curl_exec($curlHnd);
|
||||
$errRet = curl_error($curlHnd);
|
||||
|
||||
// close curl handle
|
||||
curl_close($curlHnd);
|
||||
|
||||
// split entire string into array of lines
|
||||
$retArr = explode("\r\n", $ret);
|
||||
|
||||
// check each line as a valid string of a BLOB reference
|
||||
foreach ($retArr as $value)
|
||||
if (strlen($value) > strlen("~*$bs_db/~") && "~*$bs_db/~" == substr($value, 0, strlen($bs_db) + 4))
|
||||
{
|
||||
// is a valid reference, so set as current and break
|
||||
PMA_File::setRecentBLOBReference($value);
|
||||
break;
|
||||
}
|
||||
|
||||
// close file handle
|
||||
if ($tmp_file)
|
||||
fclose($tmp_file);
|
||||
} // end if ($curlHnd)
|
||||
} // end if ($allBSTablesExist)
|
||||
} // end if ($PMA_Config)
|
||||
} // end if ($is_bs_upload)
|
||||
|
||||
// check for file upload errors
|
||||
@@ -493,47 +405,9 @@ class PMA_File
|
||||
// is a request to upload file to BLOB repository using uploadDir mechanism
|
||||
if ($is_bs_upload)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if the PMA configuration was loaded
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// load BS variables from PMA configuration
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
$curlExists = $PMA_Config->get('CURL_EXISTS');
|
||||
$bs_database = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
$bs_database = $bs_database[$_REQUEST['db']];
|
||||
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
// if plugins and curl exist
|
||||
if ($pluginsExist && $curlExists)
|
||||
{
|
||||
foreach ($bs_database as $table_key=>$table)
|
||||
{
|
||||
if (!$bs_database[$table_key]['Exists'])
|
||||
{
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
$allBSTablesExist = FALSE;
|
||||
|
||||
// if necessary BS tables exist
|
||||
if ($allBSTablesExist)
|
||||
{
|
||||
// load BS variables
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
$bs_db = $_REQUEST['db'];
|
||||
$bs_table = $_REQUEST['table'];
|
||||
|
||||
// setup uploadDir mechanism and file variables
|
||||
$tmp_filename = $GLOBALS['cfg']['UploadDir'] . '/' . $_REQUEST['fields_uploadlocal_' . $key]['multi_edit'][$primary];
|
||||
$tmp_file = fopen($tmp_filename, 'r');
|
||||
$tmp_file_size = filesize($tmp_filename);
|
||||
|
||||
// check if fileinfo library exists
|
||||
if ($PMA_Config->get('FILEINFO_EXISTS'))
|
||||
@@ -555,66 +429,15 @@ class PMA_File
|
||||
if (!$tmp_file_type)
|
||||
$tmp_file_type = NULL;
|
||||
|
||||
// necessary variables aren't loaded, return error message (unknown error)
|
||||
if (!$bs_server || !$bs_db || !$bs_table || !$tmp_file || !$tmp_file_size)
|
||||
|
||||
if (!$bs_db || !$bs_table)
|
||||
{
|
||||
$this->_error_message = __('Unknown error in file upload.');
|
||||
$this->_error_message = $GLOBALS['strUploadErrorUnknown'];
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
$bs_server_path = 'http://' . $bs_server . '/' . $bs_db . '/' . $bs_table;
|
||||
$blob_url = PMA_BS_UpLoadFile($bs_db, $bs_table, $tmp_file_type, $tmp_filename);
|
||||
PMA_File::setRecentBLOBReference($blob_url);
|
||||
|
||||
// init curl handle
|
||||
$curlHnd = curl_init ($bs_server_path);
|
||||
|
||||
// curl handle exists
|
||||
if ($curlHnd)
|
||||
{
|
||||
// specify custom header
|
||||
$customHeader = array(
|
||||
"Accept-Language: en-us;en;q=0;5",
|
||||
"Accept-Charset: ISO-8859-1;utf-8;q=0.7,*;q=0.7",
|
||||
"Content-type: $tmp_file_type"
|
||||
);
|
||||
|
||||
// specify custom curl options
|
||||
$curlOptArr = array(
|
||||
CURLOPT_PUT => TRUE,
|
||||
CURLOPT_HEADER => TRUE,
|
||||
CURLOPT_HTTPHEADER => $customHeader,
|
||||
CURLOPT_INFILESIZE => $tmp_file_size,
|
||||
CURLOPT_INFILE => $tmp_file,
|
||||
CURLOPT_RETURNTRANSFER => TRUE
|
||||
);
|
||||
|
||||
// setup custom curl options (as specified in above array)
|
||||
curl_setopt_array($curlHnd, $curlOptArr);
|
||||
|
||||
// execute curl request and retrieve error message(s) (if any)
|
||||
$ret = curl_exec($curlHnd);
|
||||
$errRet = curl_error($curlHnd);
|
||||
|
||||
// close curl handle
|
||||
curl_close($curlHnd);
|
||||
|
||||
// split return string into lines
|
||||
$retArr = explode("\r\n", $ret);
|
||||
|
||||
// check subsequent lines for valid BLOB reference string
|
||||
foreach ($retArr as $value)
|
||||
if (strlen($value) > strlen("~*$bs_db/~") && "~*$bs_db/~" == substr($value, 0, strlen($bs_db) + 4))
|
||||
{
|
||||
// is a valid reference, so set as current and break
|
||||
PMA_File::setRecentBLOBReference($value);
|
||||
break;
|
||||
}
|
||||
|
||||
// close file handle
|
||||
if ($tmp_file)
|
||||
fclose($tmp_file);
|
||||
} // end if ($curlHnd)
|
||||
} // end if ($allBSTablesExist)
|
||||
} // end if ($PMA_Config)
|
||||
} // end if ($is_bs_upload)
|
||||
|
||||
return $this->setLocalSelectedFile($_REQUEST['fields_uploadlocal_' . $key]['multi_edit'][$primary]);
|
||||
@@ -633,47 +456,6 @@ class PMA_File
|
||||
// is a request to upload file to BLOB repository using uploadDir mechanism
|
||||
if ($is_bs_upload)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if the PMA configuration was loaded
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// load BS variables from PMA configuration
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
$curlExists = $PMA_Config->get('CURL_EXISTS');
|
||||
$bs_database = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
$bs_database = $bs_database[$_REQUEST['db']];
|
||||
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
// if plugins and curl exist
|
||||
if ($pluginsExist && $curlExists)
|
||||
{
|
||||
foreach ($bs_database as $table_key=>$table)
|
||||
{
|
||||
if (!$bs_database[$table_key]['Exists'])
|
||||
{
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
$allBSTablesExist = FALSE;
|
||||
|
||||
if ($allBSTablesExist)
|
||||
{
|
||||
// load BS variables
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
$bs_db = $_REQUEST['db'];
|
||||
$bs_table = $_REQUEST['table'];
|
||||
|
||||
// setup uploadDir mechanism and file variables
|
||||
$tmp_filename = $GLOBALS['cfg']['UploadDir'] . '/' . $_REQUEST['fields_uploadlocal_' . $key]['multi_edit'][$primary];
|
||||
$tmp_file = fopen($tmp_filename, 'r');
|
||||
$tmp_file_size = filesize($tmp_filename);
|
||||
|
||||
// check if fileinfo library exists
|
||||
if ($PMA_Config->get('FILEINFO_EXISTS'))
|
||||
{
|
||||
@@ -694,66 +476,16 @@ class PMA_File
|
||||
if (!$tmp_file_type)
|
||||
$tmp_file_type = NULL;
|
||||
|
||||
// necessary variables aren't loaded, return error message (unknown error)
|
||||
if (!$bs_server || !$bs_db || !$bs_table || !$tmp_file || !$tmp_file_size)
|
||||
$bs_db = $_REQUEST['db'];
|
||||
$bs_table = $_REQUEST['table'];
|
||||
if (!$bs_db || !$bs_table)
|
||||
{
|
||||
$this->_error_message = __('Unknown error in file upload.');
|
||||
$this->_error_message = $GLOBALS['strUploadErrorUnknown'];
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
$bs_server_path = 'http://' . $bs_server . '/' . $bs_db . '/' . $bs_table;
|
||||
$blob_url = PMA_BS_UpLoadFile($bs_db, $bs_table, $tmp_file_type, $tmp_filename);
|
||||
PMA_File::setRecentBLOBReference($blob_url);
|
||||
|
||||
// init curl handle
|
||||
$curlHnd = curl_init ($bs_server_path);
|
||||
|
||||
// if curl handle exists
|
||||
if ($curlHnd)
|
||||
{
|
||||
// specify custom header
|
||||
$customHeader = array(
|
||||
"Accept-Language: en-us;en;q=0;5",
|
||||
"Accept-Charset: ISO-8859-1;utf-8;q=0.7,*;q=0.7",
|
||||
"Content-type: $tmp_file_type"
|
||||
);
|
||||
|
||||
// specify custom curl options
|
||||
$curlOptArr = array(
|
||||
CURLOPT_PUT => TRUE,
|
||||
CURLOPT_HEADER => TRUE,
|
||||
CURLOPT_HTTPHEADER => $customHeader,
|
||||
CURLOPT_INFILESIZE => $tmp_file_size,
|
||||
CURLOPT_INFILE => $tmp_file,
|
||||
CURLOPT_RETURNTRANSFER => TRUE
|
||||
);
|
||||
|
||||
// setup custom curl options (as specified in above array)
|
||||
curl_setopt_array($curlHnd, $curlOptArr);
|
||||
|
||||
// execute curl request and retrieve error message(s) (if any)
|
||||
$ret = curl_exec($curlHnd);
|
||||
$errRet = curl_error($curlHnd);
|
||||
|
||||
// close curl handle
|
||||
curl_close($curlHnd);
|
||||
|
||||
// split return string into lines
|
||||
$retArr = explode("\r\n", $ret);
|
||||
|
||||
// check subsequent lines for valid BLOB reference string
|
||||
foreach ($retArr as $value)
|
||||
if (strlen($value) > strlen("~*$bs_db/~") && "~*$bs_db/~" == substr($value, 0, strlen($bs_db) + 4))
|
||||
{
|
||||
// is a valid reference, so set as current and break
|
||||
PMA_File::setRecentBLOBReference($value);
|
||||
break;
|
||||
}
|
||||
|
||||
// close file handle
|
||||
if ($tmp_file)
|
||||
fclose($tmp_file);
|
||||
} // end if ($curlHnd)
|
||||
} // end if ($allBSTablesExist)
|
||||
} // end if ($PMA_Config)
|
||||
} // end if ($is_bs_upload)
|
||||
|
||||
return $this->setLocalSelectedFile($_REQUEST['fields_uploadlocal_' . $key]);
|
||||
|
@@ -91,12 +91,7 @@ class PMA_StorageEngine
|
||||
&& ($details['Support'] == 'NO' || $details['Support'] == 'DISABLED')) {
|
||||
continue;
|
||||
}
|
||||
// currently (MySQL 5.1.26) there is no way we can be informed
|
||||
// that PBMS does not support normal table creation so
|
||||
// we use an exception here
|
||||
if ('PBMS' == $details['Engine']) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$output .= ' <option value="' . htmlspecialchars($key). '"'
|
||||
. (empty($details['Comment'])
|
||||
? '' : ' title="' . htmlspecialchars($details['Comment']) . '"')
|
||||
@@ -144,6 +139,8 @@ class PMA_StorageEngine
|
||||
*/
|
||||
static public function isValid($engine)
|
||||
{
|
||||
if ($engine == "PBMS")
|
||||
return TRUE;
|
||||
$storage_engines = PMA_StorageEngine::getStorageEngines();
|
||||
return isset($storage_engines[$engine]);
|
||||
}
|
||||
@@ -265,6 +262,8 @@ class PMA_StorageEngine
|
||||
return $mysql_vars;
|
||||
}
|
||||
|
||||
function engine_init() {}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -303,6 +302,8 @@ class PMA_StorageEngine
|
||||
default:
|
||||
$this->support = PMA_ENGINE_SUPPORT_NO;
|
||||
}
|
||||
} else {
|
||||
$this->engine_init();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -13,7 +13,6 @@
|
||||
* @uses PMA_Config::set()
|
||||
* @uses PMA_BS_SetVariables()
|
||||
* @uses PMA_BS_GetVariables()
|
||||
* @uses PMA_BS_SetFieldReferences()
|
||||
* @uses PMA_cacheSet()
|
||||
* @uses PMA_cacheGet()
|
||||
* @return boolean
|
||||
@@ -63,50 +62,27 @@ function checkBLOBStreamingPlugins()
|
||||
$serverCfg['socket'] = "";
|
||||
}
|
||||
|
||||
$allPluginsExist = false;
|
||||
$has_blobstreaming = false;
|
||||
if (PMA_MYSQL_INT_VERSION >= 50109) {
|
||||
$PMA_Config->set('PBXT_NAME', 'pbxt');
|
||||
$PMA_Config->set('PBMS_NAME', 'pbms');
|
||||
|
||||
$required_plugins[$PMA_Config->get('PBXT_NAME')]['Library'] = 'libpbxt.so';
|
||||
$required_plugins[$PMA_Config->get('PBMS_NAME')]['Library'] = 'libpbms.so';
|
||||
$number_of_required_plugins_found = 0;
|
||||
|
||||
// Retrieve MySQL plugins
|
||||
$existing_plugins = PMA_DBI_fetch_result('SHOW PLUGINS');
|
||||
|
||||
foreach ($existing_plugins as $one_existing_plugin) {
|
||||
// check if required plugins exist
|
||||
foreach ($required_plugins as $one_required_plugin) {
|
||||
if ( strtolower($one_existing_plugin['Library']) == strtolower($one_required_plugin['Library'])
|
||||
if ( strtolower($one_existing_plugin['Library']) == 'libpbms.so'
|
||||
&& $one_existing_plugin['Status'] == "ACTIVE") {
|
||||
$number_of_required_plugins_found++;
|
||||
}
|
||||
}
|
||||
if (2 == $number_of_required_plugins_found) {
|
||||
$allPluginsExist = true;
|
||||
$has_blobstreaming = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
unset($required_plugins, $existing_plugins, $one_required_plugin, $one_existing_plugin, $number_of_required_plugins_found);
|
||||
unset($existing_plugins, $one_existing_plugin);
|
||||
}
|
||||
|
||||
// set variable indicating BS plugin existence
|
||||
$PMA_Config->set('BLOBSTREAMING_PLUGINS_EXIST', $allPluginsExist);
|
||||
$PMA_Config->set('BLOBSTREAMING_PLUGINS_EXIST', $has_blobstreaming);
|
||||
|
||||
if ($allPluginsExist) {
|
||||
// retrieve BS variables from PMA configuration
|
||||
$bs_set_variables = array();
|
||||
|
||||
$bs_set_variables[$PMA_Config->get('PBMS_NAME') . '_garbage_threshold'] = (isset($serverCfg['bs_garbage_threshold'])) ? $serverCfg['bs_garbage_threshold'] : NULL;
|
||||
$bs_set_variables[$PMA_Config->get('PBMS_NAME') . '_repository_threshold'] = (isset($serverCfg['bs_repository_threshold'])) ? $serverCfg['bs_repository_threshold'] : NULL;
|
||||
$bs_set_variables[$PMA_Config->get('PBMS_NAME') . '_temp_blob_timeout'] = (isset($serverCfg['bs_temp_blob_timeout'])) ? $serverCfg['bs_temp_blob_timeout'] : NULL;
|
||||
$bs_set_variables[$PMA_Config->get('PBMS_NAME') . '_temp_log_threshold'] = (isset($serverCfg['bs_temp_log_threshold'])) ? $serverCfg['bs_temp_log_threshold'] : NULL;
|
||||
|
||||
// set BS variables to PMA configuration defaults
|
||||
PMA_BS_SetVariables($bs_set_variables);
|
||||
|
||||
// retrieve updated BS variables (configurable and unconfigurable)
|
||||
if ($has_blobstreaming) {
|
||||
$bs_variables = PMA_BS_GetVariables();
|
||||
|
||||
// if no BS variables exist, set plugin existence to false and return
|
||||
@@ -116,16 +92,8 @@ function checkBLOBStreamingPlugins()
|
||||
return FALSE;
|
||||
} // end if (count($bs_variables) <= 0)
|
||||
|
||||
// switch on BS field references
|
||||
if (strtolower($bs_variables[$PMA_Config->get('PBMS_NAME') . '_field_references']) == "off") {
|
||||
if (! PMA_BS_SetFieldReferences('ON')) {
|
||||
PMA_cacheSet('skip_blobstreaming', true, true);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// get BS server port
|
||||
$BS_PORT = $bs_variables[$PMA_Config->get('PBMS_NAME') . '_port'];
|
||||
$BS_PORT = $bs_variables['pbms_port'];
|
||||
|
||||
// if no BS server port exists, set plugin existance to false and return
|
||||
if (! $BS_PORT) {
|
||||
@@ -138,20 +106,13 @@ function checkBLOBStreamingPlugins()
|
||||
$PMA_Config->set('BLOBSTREAMING_PORT', $BS_PORT);
|
||||
$PMA_Config->set('BLOBSTREAMING_HOST', $serverCfg['host']);
|
||||
$PMA_Config->set('BLOBSTREAMING_SERVER', $serverCfg['host'] . ':' . $BS_PORT);
|
||||
$PMA_Config->set('CURL_EXISTS', FALSE);
|
||||
$PMA_Config->set('PHP_PBMS_EXISTS', FALSE);
|
||||
$PMA_Config->set('FILEINFO_EXISTS', FALSE);
|
||||
|
||||
// check if CURL exists
|
||||
if (function_exists("curl_init")) {
|
||||
// initialize curl handler
|
||||
$curlHnd = curl_init();
|
||||
|
||||
// CURL exists, set necessary variable and close resource
|
||||
if (! empty($curlHnd)) {
|
||||
$PMA_Config->set('CURL_EXISTS', TRUE);
|
||||
curl_close($curlHnd);
|
||||
} // end if (!empty($curlHnd))
|
||||
} // end if (function_exists("curl_init"))
|
||||
// Check to see if the BLOB Streaming PHP extension is loaded
|
||||
if (extension_loaded("PBMS")) {
|
||||
$PMA_Config->set('PHP_PBMS_EXISTS', TRUE);
|
||||
}
|
||||
|
||||
// check if PECL's fileinfo library exist
|
||||
$finfo = NULL;
|
||||
@@ -165,180 +126,15 @@ function checkBLOBStreamingPlugins()
|
||||
$PMA_Config->set('FILEINFO_EXISTS', TRUE);
|
||||
finfo_close($finfo);
|
||||
} // end if (!empty($finfo))
|
||||
|
||||
} else {
|
||||
PMA_cacheSet('skip_blobstreaming', true, true);
|
||||
return FALSE;
|
||||
} // end if ($allPluginsExist)
|
||||
|
||||
$bs_tables = array();
|
||||
|
||||
// specify table structure for BS reference table
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_reference'] = array();
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_reference']['struct'] = <<<EOD
|
||||
CREATE TABLE {$PMA_Config->get('PBMS_NAME')}_reference
|
||||
(
|
||||
Table_name CHAR(64) COMMENT 'The name of the referencing table',
|
||||
Blob_id BIGINT COMMENT 'The BLOB reference number - part of the BLOB URL',
|
||||
Column_name CHAR(64) COMMENT 'The column name of the referencing field',
|
||||
Row_condition VARCHAR(255) COMMENT 'This condition identifies the row in the table',
|
||||
Blob_url VARCHAR(200) COMMENT 'The BLOB URL for HTTP GET access',
|
||||
Repository_id INT COMMENT 'The repository file number of the BLOB',
|
||||
Repo_blob_offset BIGINT COMMENT 'The offset in the repository file',
|
||||
Blob_size BIGINT COMMENT 'The size of the BLOB in bytes',
|
||||
Deletion_time TIMESTAMP COMMENT 'The time the BLOB was deleted',
|
||||
Remove_in INT COMMENT 'The number of seconds before the reference/BLOB is removed perminently',
|
||||
Temp_log_id INT COMMENT 'Temporary log number of the referencing deletion entry',
|
||||
Temp_log_offset BIGINT COMMENT 'Temporary log offset of the referencing deletion entry'
|
||||
) ENGINE=PBMS;
|
||||
EOD;
|
||||
|
||||
// specify table structure for BS repository table
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_repository'] = array();
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_repository']['struct'] = <<<EOD
|
||||
CREATE TABLE {$PMA_Config->get('PBMS_NAME')}_repository
|
||||
(
|
||||
Repository_id INT COMMENT 'The repository file number',
|
||||
Repo_blob_offset BIGINT COMMENT 'The offset of the BLOB in the repository file',
|
||||
Blob_size BIGINT COMMENT 'The size of the BLOB in bytes',
|
||||
Head_size SMALLINT UNSIGNED COMMENT 'The size of the BLOB header - proceeds the BLOB data',
|
||||
Access_code INT COMMENT 'The 4-byte authorisation code required to access the BLOB - part of the BLOB URL',
|
||||
Creation_time TIMESTAMP COMMENT 'The time the BLOB was created',
|
||||
Last_ref_time TIMESTAMP COMMENT 'The last time the BLOB was referenced',
|
||||
Last_access_time TIMESTAMP COMMENT 'The last time the BLOB was accessed (read)',
|
||||
Content_type CHAR(128) COMMENT 'The content type of the BLOB - returned by HTTP GET calls',
|
||||
Blob_data LONGBLOB COMMENT 'The data of this BLOB'
|
||||
) ENGINE=PBMS;
|
||||
EOD;
|
||||
|
||||
// specify table structure for BS custom content type table
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_custom_content_type'] = array();
|
||||
$bs_tables[$PMA_Config->get('PBMS_NAME') . '_custom_content_type']['struct'] = <<<EOD
|
||||
CREATE TABLE {$PMA_Config->get('PBMS_NAME')}_custom_content_type
|
||||
(
|
||||
Blob_url VARCHAR(200) COMMENT 'The BLOB URL for HTTP GET access',
|
||||
Content_type VARCHAR(255) COMMENT 'The custom MIME type for a given BLOB reference as specified by the user',
|
||||
|
||||
PRIMARY KEY(Blob_url)
|
||||
);
|
||||
EOD;
|
||||
|
||||
// add BS tables to PMA configuration
|
||||
$PMA_Config->set('BLOBSTREAMING_TABLES', $bs_tables);
|
||||
} // end if ($has_blobstreaming)
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks for databases that support BLOBStreaming
|
||||
*
|
||||
* @access public
|
||||
* @uses PMA_GetDatabases()
|
||||
* @uses PMA_TablesExist()
|
||||
* @uses PMA_Config::set()
|
||||
*/
|
||||
function checkBLOBStreamableDatabases()
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
$serverCfg = $GLOBALS['cfg']['Server'];
|
||||
|
||||
// retrieve BS tables from PMA configuration
|
||||
$session_bs_tables = $PMA_Config->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
$bs_databases = array();
|
||||
$bs_tables = array();
|
||||
|
||||
// return if BS tables do not exist
|
||||
if (!$session_bs_tables)
|
||||
return;
|
||||
|
||||
foreach ($session_bs_tables as $table_key=>$table)
|
||||
{
|
||||
$bs_tables[$table_key] = array();
|
||||
$bs_tables[$table_key]['Exists'] = FALSE;
|
||||
}
|
||||
|
||||
// retrieve MySQL databases
|
||||
$databases = PMA_GetDatabases();
|
||||
|
||||
// check if BS tables exist for each database
|
||||
foreach ($databases as $db_key=>$db_name)
|
||||
{
|
||||
$bs_databases[$db_name] = $bs_tables;
|
||||
|
||||
PMA_TablesExist($bs_databases[$db_name], $db_name);
|
||||
}
|
||||
|
||||
// set BS databases in PMA configuration
|
||||
$PMA_Config->set('BLOBSTREAMABLE_DATABASES', $bs_databases);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* checks whether a given set of tables exist in a given database
|
||||
*
|
||||
* @access public
|
||||
* @param array - list of tables to look for
|
||||
* @param string - name of database
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_DBI_query()
|
||||
* @uses PMA_DBI_fetch_assoc()
|
||||
*/
|
||||
function PMA_TablesExist(&$tables, $db_name)
|
||||
{
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
// run query to retrieve tables in specified database
|
||||
$query = "SHOW TABLES";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// while there are records to parse
|
||||
while ($data = @PMA_DBI_fetch_assoc($result))
|
||||
{
|
||||
$state = TRUE;
|
||||
|
||||
// check if necessary tables exist
|
||||
foreach ($tables as $table_key=>$table)
|
||||
if (!$table['Exists'])
|
||||
if ($data['Tables_in_' . $db_name] == $table_key)
|
||||
$tables[$table_key]['Exists'] = TRUE;
|
||||
else
|
||||
if ($state)
|
||||
$state = FALSE;
|
||||
|
||||
// break if necessary tables are found before all records are parsed
|
||||
if ($state)
|
||||
break;
|
||||
} // end while ($data = @PMA_DBI_fetch_assoc($result))
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a list of databases
|
||||
*
|
||||
* @access public
|
||||
* @uses PMA_DBI_query()
|
||||
* @uses PMA_DBI_fetch_assoc()
|
||||
* @return array - list of databases acquired via MySQL
|
||||
*/
|
||||
function PMA_GetDatabases()
|
||||
{
|
||||
// run query to retrieve databases
|
||||
$query = "SHOW DATABASES";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
$databases = array();
|
||||
|
||||
// while there are records to parse
|
||||
while ($data = @PMA_DBI_fetch_assoc($result))
|
||||
$databases[] = $data['Database'];
|
||||
|
||||
// return list of databases
|
||||
return $databases;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets BLOBStreaming variables to a list of specified arguments
|
||||
* @access public
|
||||
@@ -388,7 +184,7 @@ function PMA_BS_GetVariables()
|
||||
return NULL;
|
||||
|
||||
// run query to retrieve BS variables
|
||||
$query = "SHOW VARIABLES LIKE '%" . $PMA_Config->get('PBMS_NAME') . "%'";
|
||||
$query = "SHOW VARIABLES LIKE '%pbms%'";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
$BS_Variables = array();
|
||||
@@ -401,278 +197,84 @@ function PMA_BS_GetVariables()
|
||||
return $BS_Variables;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the BLOBStreaming global field references to ON/OFF
|
||||
*
|
||||
* @access public
|
||||
* @param string - ON or OFF
|
||||
* @uses PMA_Config::get()
|
||||
* @uses PMA_sqlAddslashes()
|
||||
* @uses PMA_DBI_query()
|
||||
* @return boolean - success/failure of query execution
|
||||
*/
|
||||
function PMA_BS_SetFieldReferences($val)
|
||||
//========================
|
||||
//========================
|
||||
function PMA_BS_ReportPBMSError($msg)
|
||||
{
|
||||
$tmp_err = pbms_error();
|
||||
PMA_showMessage("PBMS error, $msg $tmp_err");
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_do_connect($db_name, $quiet)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return FALSE;
|
||||
|
||||
// set field references to value specified
|
||||
$query = "SET GLOBAL " . $PMA_Config->get('PBMS_NAME') . "_field_references=" . PMA_sqlAddslashes($val);
|
||||
$result = PMA_DBI_try_query($query, null, 0);
|
||||
|
||||
// get last known error (if applicable)
|
||||
PMA_DBI_getError();
|
||||
|
||||
// return success of query execution
|
||||
if ($result && 0 == $GLOBALS['errno'])
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the SQL table definition for a given BLOBStreaming table
|
||||
*
|
||||
* @access public
|
||||
* @param string - table name
|
||||
* @uses PMA_Config::get()
|
||||
* @return string - SQL table definition
|
||||
*/
|
||||
function PMA_BS_GetTableStruct($tbl_name)
|
||||
{
|
||||
// retrieve table structures for BS tables
|
||||
$bs_tables = $GLOBALS['PMA_Config']->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
// return if tables don't exist
|
||||
if (!$bs_tables)
|
||||
return;
|
||||
|
||||
// return if specified table doesn't exist in collection of BS tables
|
||||
if (!isset($bs_tables[$tbl_name]))
|
||||
return;
|
||||
|
||||
// return specified table's structure
|
||||
return $bs_tables[$tbl_name]['struct'];
|
||||
}
|
||||
|
||||
/**
|
||||
* creates the BLOBStreaming tables for a given database
|
||||
*
|
||||
* @access public
|
||||
* @param string - database name
|
||||
* @uses PMA_Config::get()
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_DBI_query()
|
||||
* @uses PMA_BS_GetTableStruct()
|
||||
* @return boolean - success/failure of transactional query execution
|
||||
*/
|
||||
function PMA_BS_CreateTables($db_name)
|
||||
{
|
||||
// retrieve BS tables
|
||||
$bs_tables = $GLOBALS['PMA_Config']->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
// create necessary BS tables for specified database
|
||||
foreach ($bs_tables as $table_key=>$table)
|
||||
{
|
||||
$result = PMA_DBI_query(PMA_BS_GetTableStruct($table_key));
|
||||
|
||||
// return false if query execution fails
|
||||
if (!$result)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// return true on success
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* drops BLOBStreaming tables for a given database
|
||||
*
|
||||
* @access public
|
||||
* @param string - database name
|
||||
* @uses PMA_Config::get()
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_backquote()
|
||||
* @uses PMA_DBI_query()
|
||||
* @return boolean - success/failure of transactional query execution
|
||||
*/
|
||||
function PMA_BS_DropTables($db_name)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return FALSE;
|
||||
|
||||
// retrieve BS tables
|
||||
$bs_tables = $PMA_Config->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
// drop BS tables
|
||||
foreach ($bs_tables as $table_key=>$table)
|
||||
{
|
||||
$query = "DROP TABLE IF EXISTS " . PMA_backquote($table_key);
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// return false if query execution fails
|
||||
if (!$result)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// return true on success
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the field name for a primary key of a given table in a given database
|
||||
*
|
||||
* @access public
|
||||
* @param string - database name
|
||||
* @param string - table name
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_backquote()
|
||||
* @uses PMA_DBI_query()
|
||||
* @uses PMA_DBI_fetch_assoc()
|
||||
* @return string - field name for primary key
|
||||
*/
|
||||
function PMA_BS_GetPrimaryField($db_name, $tbl_name)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return FALSE;
|
||||
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
// retrieve table fields
|
||||
$query = "SHOW FULL FIELDS FROM " . PMA_backquote($tbl_name);
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// while there are records to parse
|
||||
while ($data = PMA_DBI_fetch_assoc($result))
|
||||
if ("PRI" == $data['Key'])
|
||||
return $data['Field'];
|
||||
|
||||
// return NULL on no primary key
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks whether a BLOB reference exists in the BLOB repository
|
||||
*
|
||||
* @access public
|
||||
* @param string - BLOB reference
|
||||
* @param string - database name
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_backquote()
|
||||
* @uses PMA_Config::get()
|
||||
* @uses PMA_sqlAddslashes()
|
||||
* @uses PMA_DBI_query()
|
||||
* @return boolean - existence of BLOB reference
|
||||
*/
|
||||
function PMA_BS_ReferenceExists($bs_reference, $db_name)
|
||||
{
|
||||
$referenceExists = FALSE;
|
||||
|
||||
// return false on invalid BS reference
|
||||
if (strlen ($bs_reference) < strlen ("~*$db_name/~") || "~*$db_name/~" != substr ($bs_reference, 0, strlen ($db_name) + 4))
|
||||
return $referenceExists;
|
||||
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return $referenceExists;
|
||||
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
// run query on BS reference retrieval
|
||||
$query = "SELECT * FROM " . PMA_backquote($PMA_Config->get('PBMS_NAME') . "_reference") . " WHERE Blob_url='" . PMA_sqlAddslashes($bs_reference) . "'";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// if record exists
|
||||
if ($data = @PMA_DBI_fetch_assoc($result))
|
||||
$referenceExists = TRUE;
|
||||
|
||||
// return reference existance
|
||||
return $referenceExists;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates a HTTP link to a given blob reference for a given database
|
||||
*
|
||||
* @access public
|
||||
* @param string - BLOB reference
|
||||
* @param string - database name
|
||||
* @uses PMA_Config::get()
|
||||
* @uses PMA_DBI_select_db()
|
||||
* @uses PMA_backquote()
|
||||
* @uses PMA_sqlAddslashes()
|
||||
* @uses PMA_DBI_query()
|
||||
* @uses PMA_DBI_fetch_assoc()
|
||||
* @return string - HTTP link or Error
|
||||
*/
|
||||
function PMA_BS_CreateReferenceLink($bs_reference, $db_name)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return '';
|
||||
|
||||
// generate bs reference link
|
||||
$bs_ref_link = 'http://' . $PMA_Config->get('BLOBSTREAMING_SERVER') . '/' . $bs_reference;
|
||||
$pbms_host = $PMA_Config->get('BLOBSTREAMING_HOST');
|
||||
$pbms_port = $PMA_Config->get('BLOBSTREAMING_PORT');
|
||||
|
||||
// select specified database
|
||||
PMA_DBI_select_db($db_name);
|
||||
|
||||
$pbms_repo_bq = PMA_backquote($PMA_Config->get('PBMS_NAME') . "_repository");
|
||||
$pbms_ref_bq = PMA_backquote($PMA_Config->get('PBMS_NAME') . "_reference");
|
||||
$pbms_cust_content_bq = PMA_backquote($PMA_Config->get('PBMS_NAME') . "_custom_content_type");
|
||||
|
||||
// run query on determining specified BS reference
|
||||
$query = "SELECT $pbms_repo_bq.Content_type, $pbms_cust_content_bq.Content_type AS Custom_type";
|
||||
$query .= " FROM $pbms_repo_bq LEFT JOIN $pbms_ref_bq ON";
|
||||
$query .= "$pbms_repo_bq.Repository_id=$pbms_ref_bq.Repository_id";
|
||||
$query .= " AND $pbms_repo_bq.Blob_size=$pbms_ref_bq.Blob_size";
|
||||
$query .= " AND $pbms_repo_bq.Repo_blob_offset=$pbms_ref_bq.Repo_blob_offset";
|
||||
$query .= " LEFT JOIN $pbms_cust_content_bq ON $pbms_cust_content_bq.Blob_url=$pbms_ref_bq.Blob_url";
|
||||
$query .= " WHERE $pbms_ref_bq.Blob_url='" . PMA_sqlAddslashes($bs_reference) . "'";
|
||||
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
// if record exists
|
||||
if ($data = @PMA_DBI_fetch_assoc($result))
|
||||
{
|
||||
// determine content-type for BS repository file (original or custom)
|
||||
$is_custom_type = false;
|
||||
|
||||
if (isset($data['Custom_type']))
|
||||
{
|
||||
$content_type = $data['Custom_type'];
|
||||
$is_custom_type = true;
|
||||
if (pbms_connect($pbms_host, $pbms_port, $db_name) == FALSE) {
|
||||
if ($quiet == FALSE)
|
||||
PMA_BS_ReportPBMSError("PBMS Connectiuon failed: pbms_connect($pbms_host, $pbms_port, $db_name)");
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
$content_type = $data['Content_type'];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_do_disconnect()
|
||||
{
|
||||
pbms_close();
|
||||
}
|
||||
|
||||
//------------
|
||||
/**
|
||||
* checks whether the BLOB reference looks valid
|
||||
*
|
||||
*/
|
||||
function PMA_BS_IsPBMSReference($bs_reference, $db_name)
|
||||
{
|
||||
if (PMA_do_connect($db_name, TRUE) == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
$ok = pbms_is_blob_reference($bs_reference);
|
||||
PMA_do_disconnect();
|
||||
return $ok ;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_BS_CreateReferenceLink($bs_reference, $db_name)
|
||||
{
|
||||
if (PMA_do_connect($db_name, FALSE) == FALSE) {
|
||||
return 'Error';
|
||||
}
|
||||
|
||||
if (pbms_get_info($bs_reference) == FALSE) {
|
||||
PMA_BS_ReportPBMSError("PBMS get BLOB info failed: pbms_get_info($bs_reference)");
|
||||
PMA_do_disconnect();
|
||||
return 'Error';
|
||||
}
|
||||
|
||||
$content_type = pbms_get_metadata_value("Content-type");
|
||||
if ($content_type == FALSE) {
|
||||
PMA_BS_ReportPBMSError("PMA_BS_CreateReferenceLink($bs_reference, $db_name): get BLOB Content-type failed: ");
|
||||
}
|
||||
|
||||
PMA_do_disconnect();
|
||||
|
||||
if (!$content_type)
|
||||
$content_type = NULL;
|
||||
$content_type = "image/jpeg";
|
||||
|
||||
$bs_url = PMA_BS_getURL($bs_reference);
|
||||
if (empty($bs_url)) {
|
||||
PMA_BS_ReportPBMSError("No blob streaming server configured!");
|
||||
return 'Error';
|
||||
}
|
||||
|
||||
$output = "<a href=\"#\" onclick=\"requestMIMETypeChange('" . urlencode($db_name) . "', '" . urlencode($GLOBALS['table']) . "', '" . urlencode($bs_reference) . "', '" . urlencode($content_type) . "')\">$content_type</a>";
|
||||
|
||||
@@ -686,7 +288,7 @@ function PMA_BS_CreateReferenceLink($bs_reference, $db_name)
|
||||
// image content
|
||||
case 'image/jpeg':
|
||||
case 'image/png':
|
||||
$output .= ' (<a href="' . $bs_ref_link . '" target="new">' . __('View image') . '</a>)';
|
||||
$output .= ' (<a href="' . $bs_url . '" target="new">' . __('View image') . '</a>)';
|
||||
break;
|
||||
// audio content
|
||||
case 'audio/mpeg':
|
||||
@@ -699,15 +301,141 @@ function PMA_BS_CreateReferenceLink($bs_reference, $db_name)
|
||||
break;
|
||||
// unsupported content. specify download
|
||||
default:
|
||||
$output .= ' (<a href="' . $bs_ref_link . '" target="new">' . __('Download file'). '</a>)';
|
||||
$output .= ' (<a href="' . $bs_url . '" target="new">' . __('Download file'). '</a>)';
|
||||
}
|
||||
|
||||
// return HTML
|
||||
//PMA_showMessage("PMA_BS_CreateReferenceLink($bs_reference, $db_name): $output");
|
||||
return $output;
|
||||
} // end if ($data = @PMA_DBI_fetch_assoc($result))
|
||||
}
|
||||
|
||||
//------------
|
||||
// In the future there may be server variables to turn on/off PBMS
|
||||
// BLOB streaming on a per table or database basis. So in anticipation of this
|
||||
// PMA_BS_IsTablePBMSEnabled() passes in the table and database name even though
|
||||
// they are not currently needed.
|
||||
function PMA_BS_IsTablePBMSEnabled($db_name, $tbl_name, $tbl_type)
|
||||
{
|
||||
if ((isset($tbl_type) == FALSE) || (strlen($tbl_type) == 0))
|
||||
return FALSE;
|
||||
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// return if unable to load PMA configuration
|
||||
if (empty($PMA_Config))
|
||||
return FALSE;
|
||||
|
||||
// This information should be cached rather than selecting it each time.
|
||||
//$query = "SELECT count(*) FROM information_schema.TABLES T, pbms.pbms_enabled E where T.table_schema = ". PMA_backquote($db_name) . " and T.table_name = ". PMA_backquote($tbl_name) . " and T.engine = E.name";
|
||||
$query = "SELECT count(*) FROM pbms.pbms_enabled E where E.name = '". PMA_sqlAddslashes($tbl_type) . "'" ;
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
$data = PMA_DBI_fetch_row($result);
|
||||
if ($data[0] == 1)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_BS_UpLoadFile($db_name, $tbl_name, $file_type, $file_name)
|
||||
{
|
||||
|
||||
if (PMA_do_connect($db_name, FALSE) == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$fh = fopen($file_name, 'r');
|
||||
if (!$fh) {
|
||||
PMA_do_disconnect();
|
||||
PMA_showMessage("Could not open file: $file_name");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pbms_add_metadata("Content-type", $file_type);
|
||||
|
||||
$pbms_blob_url = pbms_read_stream($fh, filesize($file_name), $tbl_name);
|
||||
if (!$pbms_blob_url) {
|
||||
PMA_BS_ReportPBMSError("pbms_read_stream() Failed");
|
||||
}
|
||||
|
||||
//PMA_showMessage(" PMA_BS_UpLoadFile($db_name, $tbl_name, $file_type, $file_name): $pbms_blob_url");
|
||||
fclose($fh);
|
||||
PMA_do_disconnect();
|
||||
return $pbms_blob_url;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_BS_SetContentType($db_name, $bsTable, $blobReference, $contentType)
|
||||
{
|
||||
// This is a really ugly way to do this but currently there is nothing better.
|
||||
// In a future version of PBMS the system tables will be redesigned to make this
|
||||
// more eficient.
|
||||
$query = "SELECT Repository_id, Repo_blob_offset FROM pbms_reference WHERE Blob_url='" . PMA_sqlAddslashes($blobReference) . "'";
|
||||
//error_log(" PMA_BS_SetContentType: $query\n", 3, "/tmp/mylog");
|
||||
$result = PMA_DBI_query($query);
|
||||
//error_log(" $query\n", 3, "/tmp/mylog");
|
||||
|
||||
// if record exists
|
||||
if ($data = PMA_DBI_fetch_assoc($result))
|
||||
{
|
||||
$where = "WHERE Repository_id=" . $data['Repository_id'] . " AND Repo_blob_offset=" . $data['Repo_blob_offset'] ;
|
||||
$query = "SELECT name from pbms_metadata $where";
|
||||
$result = PMA_DBI_query($query);
|
||||
|
||||
if (PMA_DBI_num_rows($result) == 0)
|
||||
$query = "INSERT into pbms_metadata Values( ". $data['Repository_id'] . ", " . $data['Repo_blob_offset'] . ", 'Content_type', '" . PMA_sqlAddslashes($contentType) . "')";
|
||||
else
|
||||
$query = "UPDATE pbms_metadata SET name = 'Content_type', Value = '" . PMA_sqlAddslashes($contentType) . "' $where";
|
||||
|
||||
//error_log("$query\n", 3, "/tmp/mylog");
|
||||
PMA_DBI_query($query);
|
||||
|
||||
|
||||
} else {
|
||||
// if ($result == FALSE) {
|
||||
// $err = PMA_DBI_getError();
|
||||
// error_log("MySQL ERROR: $err\n", 3, "/tmp/mylog");
|
||||
// } else
|
||||
// error_log("No results: $query\n", 3, "/tmp/mylog");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_BS_IsHiddenTable($table)
|
||||
{
|
||||
switch ($table) {
|
||||
case 'pbms_repository' :
|
||||
case 'pbms_reference' :
|
||||
case 'pbms_metadata' :
|
||||
case 'pbms_metadata_header' :
|
||||
case 'pbms_dump' :
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//------------
|
||||
function PMA_BS_getURL($reference)
|
||||
{
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
if (empty($PMA_Config))
|
||||
return FALSE;
|
||||
|
||||
// retrieve BS server variables from PMA configuration
|
||||
$bs_server = $PMA_Config->get('BLOBSTREAMING_SERVER');
|
||||
if (empty($bs_server))
|
||||
return FALSE;
|
||||
|
||||
$bs_url = 'http://' . $bs_server . '/' . rtrim($reference);
|
||||
//PMA_showMessage(" PMA_BS_getURL($reference): $bs_url");
|
||||
return $bs_url;
|
||||
|
||||
// return on error
|
||||
return 'Error';
|
||||
}
|
||||
|
||||
?>
|
||||
|
@@ -809,7 +809,6 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
* the required auth type plugin
|
||||
*/
|
||||
require_once './libraries/auth/' . $cfg['Server']['auth_type'] . '.auth.lib.php';
|
||||
|
||||
if (!PMA_auth_check()) {
|
||||
PMA_auth();
|
||||
} else {
|
||||
@@ -953,9 +952,8 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
|
||||
// checks for blobstreaming plugins and databases that support
|
||||
// blobstreaming (by having the necessary tables for blobstreaming)
|
||||
if (checkBLOBStreamingPlugins()) {
|
||||
checkBLOBStreamableDatabases();
|
||||
}
|
||||
checkBLOBStreamingPlugins();
|
||||
|
||||
} // end if !defined('PMA_MINIMUM_COMMON')
|
||||
|
||||
// remove sensitive values from session
|
||||
|
@@ -791,18 +791,12 @@ function PMA_getTableList($db, $tables = null, $limit_offset = 0, $limit_count =
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration exists
|
||||
if (!empty($PMA_Config))
|
||||
$session_bs_tables = $GLOBALS['PMA_Config']->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
foreach ($tables as $table_name => $table) {
|
||||
// if BS tables exist
|
||||
if (isset($session_bs_tables))
|
||||
// compare table name to tables in list of blobstreaming tables
|
||||
foreach ($session_bs_tables as $table_key=>$table_val)
|
||||
// if table is in list, skip outer foreach loop
|
||||
if ($table_name == $table_key)
|
||||
continue 2;
|
||||
if (PMA_BS_IsHiddenTable($table_name)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// check for correct row count
|
||||
if (null === $table['Rows']) {
|
||||
|
@@ -310,31 +310,11 @@ function PMA_getTableCount($db)
|
||||
if ($tables) {
|
||||
$num_tables = PMA_DBI_num_rows($tables);
|
||||
|
||||
// for blobstreaming - get blobstreaming tables
|
||||
// for use in determining if a table here is a blobstreaming table
|
||||
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration exists
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
// load BS tables
|
||||
$session_bs_tables = $GLOBALS['PMA_Config']->get('BLOBSTREAMING_TABLES');
|
||||
|
||||
// if BS tables exist
|
||||
if (isset ($session_bs_tables))
|
||||
while ($data = PMA_DBI_fetch_assoc($tables))
|
||||
foreach ($session_bs_tables as $table_key=>$table_val)
|
||||
// if the table is a blobstreaming table, reduce the table count
|
||||
if ($data['Tables_in_' . $db] == $table_key)
|
||||
{
|
||||
if ($num_tables > 0)
|
||||
// do not count hidden blobstreaming tables
|
||||
while ((($num_tables > 0)) && $data = PMA_DBI_fetch_assoc($tables)) {
|
||||
if (PMA_BS_IsHiddenTable($data['Tables_in_' . $db]))
|
||||
$num_tables--;
|
||||
|
||||
break;
|
||||
}
|
||||
} // end if PMA configuration exists
|
||||
|
||||
PMA_DBI_free_result($tables);
|
||||
} else {
|
||||
|
@@ -1286,46 +1286,8 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) {
|
||||
} else {
|
||||
// for blobstreaming
|
||||
|
||||
$bs_reference_exists = $allBSTablesExist = FALSE;
|
||||
|
||||
// load PMA configuration
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// if PMA configuration exists
|
||||
if ($PMA_Config) {
|
||||
// load BS variables
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
|
||||
// if BS plugins exist
|
||||
if ($pluginsExist) {
|
||||
// load BS databases
|
||||
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
|
||||
// if BS db array and specified db string not empty and valid
|
||||
if (!empty($bs_tables) && strlen($db) > 0) {
|
||||
$bs_tables = $bs_tables[$db];
|
||||
|
||||
if (isset($bs_tables)) {
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
// check if BS tables exist for given database
|
||||
foreach ($bs_tables as $table_key=>$bs_tbl)
|
||||
if (!$bs_tables[$table_key]['Exists']) {
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if necessary BS tables exist
|
||||
if ($allBSTablesExist) {
|
||||
$bs_reference_exists = PMA_BS_ReferenceExists($row[$i], $db);
|
||||
}
|
||||
|
||||
// if valid BS reference exists
|
||||
if ($bs_reference_exists) {
|
||||
if (PMA_BS_IsPBMSReference($row[$i], $db)) {
|
||||
$blobtext = PMA_BS_CreateReferenceLink($row[$i], $db);
|
||||
} else {
|
||||
$blobtext = PMA_handle_non_printable_contents('BLOB', (isset($row[$i]) ? $row[$i] : ''), $transform_function, $transform_options, $default_function, $meta, $_url_params);
|
||||
|
@@ -98,6 +98,46 @@ class PMA_StorageEngine_pbxt extends PMA_StorageEngine
|
||||
}
|
||||
return PMA_formatByteDown($value);
|
||||
}
|
||||
|
||||
//--------------------
|
||||
function getInfoPages()
|
||||
{
|
||||
$pages = array();
|
||||
$pages['Documentation'] = __('Documentation');
|
||||
return $pages;
|
||||
}
|
||||
|
||||
//--------------------
|
||||
function getPage($id)
|
||||
{
|
||||
if (! array_key_exists($id, $this->getInfoPages())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$id = 'getPage' . $id;
|
||||
|
||||
return $this->$id();
|
||||
}
|
||||
|
||||
function getPageDocumentation()
|
||||
{
|
||||
$output = '<p> Documentation and furtther information about PBXT can be found on the ' . "\n"
|
||||
. '<a href="http://www.primebase.com/xt/" target="_blank">PrimeBase XT Home Page</a>.<br><br>' . "\n"
|
||||
. '<table id="PBMS_Related_Links" >' . "\n"
|
||||
. '<tr>' . "\n"
|
||||
. '<td>' . "\n"
|
||||
. '<p>' . "\n"
|
||||
. '<strong><font size="2"><b>Related Links</b></font></strong>' . "\n"
|
||||
. '<br>' . "\n"
|
||||
. '<a href="http://pbxt.blogspot.com/" target="_blank">The PrimeBase XT Blog by Paul McCullagh</a><br><br>' . "\n"
|
||||
. '<a href="http://www.blobstreaming.org/" target="_blank">The PrimeBase Media Streaming (PBMS) home page</a>.<br><br>' . "\n"
|
||||
. '</font>' . "\n"
|
||||
. '</td>' . "\n"
|
||||
. '</tr>' . "\n"
|
||||
. '</table>' . "\n";
|
||||
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
@@ -80,6 +80,17 @@ if (empty($_REQUEST['engine'])
|
||||
. '</tr>' . "\n";
|
||||
$odd_row = !$odd_row;
|
||||
}
|
||||
// Special case for PBMS daemon which is not listed as an engine
|
||||
echo '<tr class="'
|
||||
. ($odd_row ? 'odd' : 'even')
|
||||
. '">' . "\n"
|
||||
. ' <td><a href="./server_engines.php'
|
||||
. PMA_generate_common_url(array('engine' => "PBMS")) . '">' . "\n"
|
||||
. ' ' . "PBMS\n"
|
||||
. ' </a></td>' . "\n"
|
||||
. ' <td>' . htmlspecialchars("PrimeBase BLOB streaming daemon") . '</td>' . "\n"
|
||||
. '</tr>' . "\n";
|
||||
|
||||
unset($odd_row, $engine, $details);
|
||||
echo '</tbody>' . "\n"
|
||||
. '</table>' . "\n";
|
||||
|
104
tbl_change.php
104
tbl_change.php
@@ -834,51 +834,7 @@ foreach ($rows as $row_id => $vrow) {
|
||||
|| ($cfg['ProtectBinary'] == 'all' && $field['is_binary'])) {
|
||||
echo "\n";
|
||||
// for blobstreaming
|
||||
$bs_reference_exists = FALSE;
|
||||
|
||||
if (isset ($tbl_type) && strlen ($tbl_type) > 0)
|
||||
{
|
||||
// load PMA_Config
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
$requiredTblType = $PMA_Config->get('PBXT_NAME');
|
||||
|
||||
if ($requiredTblType == strtolower ($tbl_type))
|
||||
{
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
|
||||
// check if blobstreaming plugins exist
|
||||
if ($pluginsExist)
|
||||
{
|
||||
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
|
||||
if (!empty($bs_tables) && strlen($db) > 0)
|
||||
{
|
||||
$bs_tables = $bs_tables[$db];
|
||||
|
||||
if (isset($bs_tables))
|
||||
{
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
foreach ($bs_tables as $table_key=>$bs_tbl)
|
||||
if (!$bs_tables[$table_key]['Exists'])
|
||||
{
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($allBSTablesExist)
|
||||
$bs_reference_exists = PMA_BS_ReferenceExists($data, $db);
|
||||
} // end if (isset($bs_tables))
|
||||
} // end if (!empty($bs_tables) && strlen($db) > 0)
|
||||
} // end if ($pluginsExist)
|
||||
} // end if ($requiredTblType == strtolower ($tbl_type))
|
||||
} // end if (!empty($PMA_Config))
|
||||
} // end if (isset ($tbl_type) && strlen ($tbl_type) > 0)
|
||||
|
||||
if ($bs_reference_exists)
|
||||
if (PMA_BS_IsTablePBMSEnabled($db, $table, $tbl_type) && PMA_BS_IsPBMSReference($data, $db))
|
||||
{
|
||||
echo '<input type="hidden" name="remove_blob_ref_' . $field['Field_md5'] . $vkey . '" value="' . $data . '" />';
|
||||
echo '<input type="checkbox" name="remove_blob_repo_' . $field['Field_md5'] . $vkey . '" /> ' . __('Remove BLOB Repository Reference') . "<br />";
|
||||
@@ -894,7 +850,7 @@ foreach ($rows as $row_id => $vrow) {
|
||||
unset($data_size);
|
||||
}
|
||||
echo "\n";
|
||||
} // end if ($bs_reference_exists)
|
||||
} // end if (PMA_BS_IsTablePBMSEnabled($db, $table, $tbl_type) && PMA_BS_IsPBMSReference($data, $db))
|
||||
?>
|
||||
<input type="hidden" name="fields_type<?php echo $field_name_appendix; ?>" value="protected" />
|
||||
<input type="hidden" name="fields<?php echo $field_name_appendix; ?>" value="" />
|
||||
@@ -932,63 +888,11 @@ foreach ($rows as $row_id => $vrow) {
|
||||
// (displayed whatever value the ProtectBinary has)
|
||||
|
||||
if ($is_upload && $field['is_blob']) {
|
||||
// check if field type is of longblob
|
||||
if ($field['pma_type'] == "longblob")
|
||||
{
|
||||
if (isset ($tbl_type) && strlen ($tbl_type) > 0)
|
||||
{
|
||||
// load PMA Config
|
||||
$PMA_Config = $GLOBALS['PMA_Config'];
|
||||
|
||||
// is PMA_Config's data loaded? continue only if it is
|
||||
if (!empty($PMA_Config))
|
||||
{
|
||||
$requiredTblType = $PMA_Config->get('PBXT_NAME');
|
||||
|
||||
if ($requiredTblType == strtolower ($tbl_type))
|
||||
{
|
||||
$pluginsExist = $PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST');
|
||||
|
||||
// check if blobstreaming plugins exist
|
||||
if ($pluginsExist)
|
||||
{
|
||||
$curlExists = $PMA_Config->get('CURL_EXISTS');
|
||||
|
||||
// check if CURL exists
|
||||
if ($curlExists)
|
||||
{
|
||||
$bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES');
|
||||
|
||||
// check for BLOBStreamable databases and if current database name is provided
|
||||
if (!empty($bs_tables) && strlen($db) > 0)
|
||||
{
|
||||
$bs_tables = $bs_tables[$db];
|
||||
|
||||
// check if reference to BLOBStreaming tables exists
|
||||
if (isset($bs_tables))
|
||||
{
|
||||
$allBSTablesExist = TRUE;
|
||||
|
||||
foreach ($bs_tables as $table_key=>$bs_tbl)
|
||||
if (!$bs_tables[$table_key]['Exists'])
|
||||
{
|
||||
$allBSTablesExist = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
// check if necessary BLOBStreaming tables exist
|
||||
if ($allBSTablesExist)
|
||||
// check if field type is of longblob and if the table is PBMS enabled.
|
||||
if (($field['pma_type'] == "longblob") && PMA_BS_IsTablePBMSEnabled($db_name, $tbl_name, $tbl_type))
|
||||
{
|
||||
echo '<br />';
|
||||
echo '<input type="checkbox" name="upload_blob_repo_' . $field['Field_md5'] . $vkey . '" /> ' . __('Upload to BLOB repository');
|
||||
} // end if ($allBSTablesExist)
|
||||
} // end if (isset($bs_tables)
|
||||
} // end if (!empty($bs_tables) && strlen ($db) > 0)
|
||||
} // end if ($curlExists)
|
||||
} // end if ($pluginsExist)
|
||||
} // end if ($requiredTblType == strtolower ($tbl_type))
|
||||
} // end if (!empty($PMA_Config))
|
||||
} // end if (isset ($tbl_type) && strlen ($tbl_type) > 0)
|
||||
}
|
||||
|
||||
echo '<br />';
|
||||
|
@@ -210,10 +210,6 @@ foreach ($loop_array as $rowcount => $where_clause) {
|
||||
? $_REQUEST['auto_increment']['multi_edit'][$rowcount]
|
||||
: null;
|
||||
|
||||
if ($blob_streaming_active) {
|
||||
$primary_field = PMA_BS_GetPrimaryField($GLOBALS['db'], $GLOBALS['table']);
|
||||
}
|
||||
|
||||
// Fetch the current values of a row to use in case we have a protected field
|
||||
// @todo possibly move to ./libraries/tbl_replace_fields.inc.php
|
||||
if ($is_insert && $using_key && isset($me_fields_type) && is_array($me_fields_type) && isset($where_clause)) {
|
||||
|
Reference in New Issue
Block a user