diff --git a/libraries/relation.lib.php3 b/libraries/relation.lib.php3 new file mode 100644 index 000000000..0e7072c61 --- /dev/null +++ b/libraries/relation.lib.php3 @@ -0,0 +1,171 @@ + + * @access public + */ + function PMA_query_as_cu($sql) { + global $err_url_0, $db, $dbh, $cfgRelation; + + if (isset($dbh)) { + PMA_mysql_select_db($cfgRelation['db'],$dbh); + $result = @PMA_mysql_query($sql, $dbh) or PMA_mysqlDie(mysql_error($dbh), $sql, '', $err_url_0); + PMA_mysql_select_db($db,$dbh); + } else { + PMA_mysql_select_db($cfgRelation['db']); + $result = @PMA_mysql_query($sql) or PMA_mysqlDie('', $sql, '', $err_url_0); + PMA_mysql_select_db($db); + } + if($result){ + return $result; + } else { + return FALSE; + } + } + + + /** + * Defines the relation parameters for the current user + * just a copy of the functions used for relations ;-) + * but added some stuff to check what will work + * + * @return array the relation parameters for the current user + * + * @global array the list of settings for the current server + * @global integer the id of the current server + * @author Mike Beck + * + * @access public + */ + function PMA_getRelationsParam() + { + global $server, $err_url_0, $db, $table,$cfg; + $cfgRelation = ''; + + $cfgRelation['relwork'] = FALSE; + $cfgRelation['displaywork'] = FALSE; + $cfgRelation['pdfwork'] = FALSE; + $cfgRelation['commwork'] = FALSE; + + // No server selected -> no bookmark table + if ($server == 0) { + return ''; + } + + $cfgRelation['user'] = $GLOBALS['cfg']['Server']['user']; + $cfgRelation['db'] = $GLOBALS['cfg']['Server']['pmadb']; + + // now i just check if all tables that i need are present + // so i can for example enable relations but not pdf... + // i was thinking of checking if they have all required columns + // but i fear it might be too slow + // PMA_mysql_select_db($cfgRelation['db']); + + $tab_query = 'SHOW TABLES FROM ' . PMA_backquote($cfgRelation['db']); + $tab_rs = PMA_query_as_cu($tab_query); + + //while ($curr_table = @PMA_mysql_fetch_array($tab_rs)) { + while ($curr_table = @PMA_mysql_fetch_array($tab_rs)) { + if($curr_table[0] == $cfg['Servers']['Server']['bookmarktable']) { + continue; + } else if ($curr_table[0] == $GLOBALS['cfg']['Server']['relation']) { + $cfgRelation['relation'] = $curr_table[0]; + } else if ($curr_table[0] == $GLOBALS['cfg']['Server']['table_info']) { + $cfgRelation['table_info'] = $curr_table[0]; + } else if ($curr_table[0] == $GLOBALS['cfg']['Server']['table_coords']) { + $cfgRelation['table_coords'] = $curr_table[0]; + } else if ($curr_table[0] == $GLOBALS['cfg']['Server']['column_comments']) { + $cfgRelation['column_comments'] = $curr_table[0]; + } else if ($curr_table[0] == $GLOBALS['cfg']['Server']['pdf_pages']) { + $cfgRelation['pdf_pages'] = $curr_table[0]; + } + } + if(isset($cfgRelation['relation'])) { + $cfgRelation['relwork'] = TRUE; + if(isset($cfgRelation['table_info'])) { + $cfgRelation['displaywork'] = TRUE; + } + if(isset($cfgRelation['table_coords']) && isset($cfgRelation['pdf_pages'])) { + $cfgRelation['pdfwork'] = TRUE; + } + if(isset($cfgRelation['column_comments'])) { + $cfgRelation['commwork'] = TRUE; + } + } + mysql_free_result($tab_rs); + return $cfgRelation; + } // end of the 'PMA_getRelationsParam()' function + + + /** + * Get all Relations to foreign tables for a given table + * or optionally a given column in a table + * + * @return array db,table,column + * + * @global array the list of Relationsettings + * + * @access public + * @author Mike Beck + */ + function getForeigners($db,$table,$column=FALSE) { + global $cfgRelation, $err_url_0; + + $_rel_query = 'SELECT master_field, foreign_db,foreign_table,foreign_field' + . ' FROM ' . PMA_backquote($cfgRelation['relation']) + . ' WHERE master_db = \'' . $db . '\' ' + . ' AND master_table = \'' . $table . '\' '; + if(!empty($column)){ + $_rel_query .= ' AND master_field = \'' . $column . '\''; + } + $_relations = PMA_query_as_cu($_rel_query); + $i=0; + while ($relrow = @PMA_mysql_fetch_array($_relations)) { + $field = $relrow['master_field']; + $foreign[$field]['foreign_db'] = $relrow['foreign_db']; + $foreign[$field]['foreign_table'] = $relrow['foreign_table']; + $foreign[$field]['foreign_field'] = $relrow['foreign_field']; + $i++; + } // end while + if(is_array($foreign)) { + return $foreign; + } else { + return FALSE; + } + } // End function getForeigners + + /** + * Get the displayfield of a table + * @return string fieldname + * @global array the list of Relationsettings + * @access public + * @author Mike Beck + */ + function getDisplayField($db,$table) { + global $cfgRelation; + $_disp_query = 'SELECT display_field FROM ' . PMA_backquote($cfgRelation['table_info']) + . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' + . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''; + + $_disp_res = PMA_query_as_cu($_disp_query); + $row = ($_disp_res ? PMA_mysql_fetch_array($_disp_res) : ''); + if (isset($row['display_field'])) { + return $row['display_field']; + } else { + return FALSE; + } + } +} // $__PMA_RELATION_LIB__INCLUDED +?>