00001 <?php
00002
00003
00004
00009 function PMA_transformation_getOptions($string) {
00010 $transform_options = array();
00011
00012 if ($string != '') {
00013 if ($string{0} == "'" && $string{strlen($string)-1} == "'") {
00014 $transform_options = explode('\',\'', substr($string, 1, strlen($string)-2));
00015 } else {
00016 $transform_options = array(0 => $string);
00017 }
00018 }
00019
00020
00021 $result = array();
00022 foreach($transform_options as $val) {
00023 $result[] = stripslashes($val);
00024 }
00025 return $result;
00026 }
00027
00037 function PMA_getAvailableMIMEtypes() {
00038 $handle = opendir('./libraries/transformations');
00039
00040 $stack = array();
00041 $filestack = array();
00042
00043 while (($file = readdir($handle)) != false) {
00044 $filestack[$file] = $file;
00045 }
00046
00047 closedir($handle);
00048
00049 if (is_array($filestack)) {
00050 @ksort($filestack);
00051 foreach ($filestack AS $key => $file) {
00052
00053 if (preg_match('|^.*__.*\.inc\.php(3?)$|', trim($file), $match = array())) {
00054
00055 $base = explode('__', str_replace('.inc.php' . $match[1], '', $file));
00056
00057 $mimetype = str_replace('_', '/', $base[0]);
00058 $stack['mimetype'][$mimetype] = $mimetype;
00059
00060 $stack['transformation'][] = $mimetype . ': ' . $base[1];
00061 $stack['transformation_file'][] = $file;
00062
00063 } else if (preg_match('|^.*\.inc\.php(3?)$|', trim($file), $match)) {
00064
00065 $base = str_replace('.inc.php' . $match[1], '', $file);
00066
00067 if ($base != 'global') {
00068 $mimetype = str_replace('_', '/', $base);
00069 $stack['mimetype'][$mimetype] = $mimetype;
00070 $stack['empty_mimetype'][$mimetype] = $mimetype;
00071 }
00072 }
00073
00074 }
00075 }
00076
00077 return $stack;
00078 }
00079
00095 function PMA_getMIME($db, $table, $strict = false) {
00096 global $cfgRelation;
00097
00098 $com_qry = 'SELECT column_name, mimetype, transformation, transformation_options FROM ' . PMA_backquote($cfgRelation['column_info'])
00099 . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
00100 . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''
00101 . ' AND (mimetype != \'\'' . (!$strict ? ' OR transformation != \'\' OR transformation_options != \'\'' : '') . ')';
00102 $com_rs = PMA_query_as_cu($com_qry);
00103
00104 while ($row = @PMA_DBI_fetch_assoc($com_rs)) {
00105 $col = $row['column_name'];
00106 $mime[$col]['mimetype'] = $row['mimetype'];
00107 $mime[$col]['transformation'] = $row['transformation'];
00108 $mime[$col]['transformation_options'] = $row['transformation_options'];
00109 }
00110 PMA_DBI_free_result($com_rs);
00111 unset($com_rs);
00112
00113 if (isset($mime) && is_array($mime)) {
00114 return $mime;
00115 } else {
00116 return FALSE;
00117 }
00118 }
00119
00137 function PMA_setMIME($db, $table, $key, $mimetype, $transformation, $transformation_options, $forcedelete = false) {
00138 global $cfgRelation;
00139
00140 $test_qry = 'SELECT mimetype, ' . PMA_backquote('comment') . ' FROM ' . PMA_backquote($cfgRelation['column_info'])
00141 . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
00142 . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''
00143 . ' AND column_name = \'' . PMA_sqlAddslashes($key) . '\'';
00144 $test_rs = PMA_query_as_cu($test_qry, TRUE, PMA_DBI_QUERY_STORE);
00145
00146 if ($test_rs && PMA_DBI_num_rows($test_rs) > 0) {
00147 $row = @PMA_DBI_fetch_assoc($test_rs);
00148 PMA_DBI_free_result($test_rs);
00149 unset($test_rs);
00150
00151 if (!$forcedelete && (strlen($mimetype) > 0 || strlen($transformation) > 0 || strlen($transformation_options) > 0 || strlen($row['comment']) > 0)) {
00152 $upd_query = 'UPDATE ' . PMA_backquote($cfgRelation['column_info'])
00153 . ' SET mimetype = \'' . PMA_sqlAddslashes($mimetype) . '\','
00154 . ' transformation = \'' . PMA_sqlAddslashes($transformation) . '\','
00155 . ' transformation_options = \'' . PMA_sqlAddslashes($transformation_options) . '\''
00156 . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
00157 . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''
00158 . ' AND column_name = \'' . PMA_sqlAddslashes($key) . '\'';
00159 } else {
00160 $upd_query = 'DELETE FROM ' . PMA_backquote($cfgRelation['column_info'])
00161 . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
00162 . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''
00163 . ' AND column_name = \'' . PMA_sqlAddslashes($key) . '\'';
00164 }
00165 } else if (strlen($mimetype) > 0 || strlen($transformation) > 0 || strlen($transformation_options) > 0) {
00166 $upd_query = 'INSERT INTO ' . PMA_backquote($cfgRelation['column_info'])
00167 . ' (db_name, table_name, column_name, mimetype, transformation, transformation_options) '
00168 . ' VALUES('
00169 . '\'' . PMA_sqlAddslashes($db) . '\','
00170 . '\'' . PMA_sqlAddslashes($table) . '\','
00171 . '\'' . PMA_sqlAddslashes($key) . '\','
00172 . '\'' . PMA_sqlAddslashes($mimetype) . '\','
00173 . '\'' . PMA_sqlAddslashes($transformation) . '\','
00174 . '\'' . PMA_sqlAddslashes($transformation_options) . '\')';
00175 }
00176
00177 if (isset($upd_query)){
00178 $upd_rs = PMA_query_as_cu($upd_query);
00179 PMA_DBI_free_result($upd_rs);
00180 unset($upd_rs);
00181 return true;
00182 } else {
00183 return false;
00184 }
00185 }
00186
00196 function PMA_sanitizeTransformationFile(&$filename) {
00197
00198
00199 $include_file = PMA_securePath($filename);
00200
00201
00202 $testfile = preg_replace('@\.inc\.php3$@', '.inc.php', $include_file);
00203 if ($include_file{strlen($include_file)-1} == '3' && file_exists('./libraries/transformations/' . $testfile)) {
00204 $include_file = $testfile;
00205 $filename = $testfile;
00206 }
00207
00208 return $include_file;
00209 }
00210 ?>