Codice PHP:
<?php
/*
* Table Manager (GeDa) - Mambo/Joomla component
* Copyright (C) 2005 by IW1QLH
* License [url]http://www.gnu.org/copyleft/gpl.html[/url] GNU/GPL
* Official website: [url]http://www.iw1qlh.net/projects/table-manager[/url]
*/
// ensure this file is being included by a parent file
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
function Geda_get_data($id_table, $sort_col, $limit, &$limitstart, &$total) {
global $database;
// get the total number of records
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_id_row');
$database->query();
$database->setQuery("CREATE TEMPORARY TABLE #__geda_tmp_id_row (`id_row` int(11) NOT NULL)");
$database->query();
$database->setQuery("INSERT INTO #__geda_tmp_id_row SELECT DISTINCT td_row FROM #__geda_data where id_table = $id_table");
$database->query();
$database->setQuery('SELECT COUNT(*) AS c FROM #__geda_tmp_id_row');
$total = $database->loadResult();
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_value');
$database->query();
$database->setQuery("CREATE TEMPORARY TABLE #__geda_tmp_value (`id_row` int(11) NOT NULL, `td_numeric` float, `td_char` varchar(255), `td_date` datetime)");
$database->query();
$database->setQuery("INSERT INTO #__geda_tmp_value SELECT td_row, td_numeric, td_char, td_date FROM #__geda_data where id_table = $id_table and id_column = " . abs($sort_col));
$database->query();
$database->setQuery("SELECT cn_type FROM #__geda_columns WHERE id_table = $id_table AND id = " . abs($sort_col));
$cn_type = $database->loadResult();
switch ($cn_type) {
case 'C':
$field = 'td_char';
break;
case 'N':
$field = 'td_numeric';
break;
case 'D':
$field = 'td_date';
break;
default:
$field = 'td_numeric, td_char, td_date';
}
if ( $total <= $limit ) $limitstart = 0;
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_id_sort');
$database->query();
$database->setQuery("CREATE TEMPORARY TABLE #__geda_tmp_id_sort (`ordering` int(11) NOT NULL auto_increment, `id_row` int(11) NOT NULL, PRIMARY KEY (`ordering`))");
$database->query();
$database->setQuery("INSERT INTO #__geda_tmp_id_sort SELECT 0, a.id_row FROM #__geda_tmp_id_row AS a LEFT JOIN #__geda_tmp_value AS b ON b.id_row = a.id_row ORDER BY $field " . (($sort_col < 0) ? 'DESC' : 'ASC') . " LIMIT $limitstart, $limit");
$database->query();
$database->setQuery("SELECT b.td_row, b.id_column, b.td_char, b.td_numeric, UNIX_TIMESTAMP(b.td_date) AS td_date, c.cn_type FROM #__geda_tmp_id_sort AS a, #__geda_data AS b, #__geda_columns AS c WHERE b.td_row = a.id_row AND b.id_column = c.id AND b.id_table = $id_table AND c.id_table = $id_table ORDER BY a.ordering, id_column");
$datas = $database->loadObjectList();
$rowid = -1;
$rows = array();
foreach ($datas as $data) {
if ($rowid != $data->td_row) {
$rowid = $data->td_row;
if ($row) {
$rows[] = $row;
}
$row = array();
$row['rowid'] = $rowid;
}
$value = '-';
switch ($data->cn_type) {
case 'C':
$value = $data->td_char;
break;
case 'N':
$value = $data->td_numeric;
break;
case 'D':
$value = $data->td_date;
break;
}
$row[$data->id_column] = $value;
}
if ($row)
$rows[] = $row;
// drop temporary tables
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_id_row');
$database->query();
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_value');
$database->query();
$database->setQuery('DROP TABLE IF EXISTS #__geda_tmp_id_sort');
$database->query();
return $rows;
}
function Geda_view($table) {
global $database, $mosConfig_list_limit;
if (!$table)
return '<font color="#FF0000">Table manager error: you must insert table=[i]tablename[/i] in the parameters !</font>
';
session_start();
if ($sort_col = mosGetParam( $_REQUEST, $table . 'order', 0 )) {
$_SESSION[$table . 'order'] = $sort_col;
} else {
$sort_col = $_SESSION[$table . 'order'];
}
// get the table name
$database->setQuery( "SELECT id, tn_description FROM #__geda_tables where tn_name = '$table'" );
if (!$tableData = $database->loadRow())
return "<font color='#FF0000'>Table-manager error: $table isn't a valid table name !</font>
";
$id_table = $tableData[0];
$tablename = $tableData[1];
// get the columns name
$database->setQuery( "SELECT id, cn_description, cn_type, cn_format, published FROM #__geda_columns where id_table = $id_table ORDER BY ordering" );
$columns = $database->loadObjectList();
if ((!$sort_col) && ($columns[0]->id))
$sort_col = $columns[0]->id;
$limit = intval( mosGetParam( $_REQUEST, 'limit', '' ) );
$limitstart = intval( mosGetParam( $_REQUEST, 'limitstart', 0 ) );
$limit = $limit ? $limit : $mosConfig_list_limit ;
$total = 0;
// get datas
$rows = Geda_get_data($id_table, $sort_col, $limit, $limitstart, $total);
mosCache::cleanCache();
require_once( $GLOBALS['mosConfig_absolute_path'] . '/includes/pageNavigation.php' );
$pageNav = new mosPageNav( $total, $limitstart, $limit );
return HTML_Geda_view::show($rows, $pageNav, $table, $tablename, $columns, $sort_col);
}
class HTML_Geda_view {
function show($rows, $pageNav, $table, $tablename, $columns, $sort_col) {
$html = "\n";
$html .= "\n\n\n";
$html .= "\n<form method='POST' name='" . $table . "Form'>";
$html .= "\n<input type='hidden' name='" . $table . "order' value=$sort_col>";
$html .= '<table width="100%" cellpadding="3" cellspacing="5" border="0" align="center">';
$html .= "\n<tr>";
$html .= "<td colspan=" . count($columns) . ' class="componentheading"></td>';
$html .= '</tr>';
$html .= "\n<tr>";
foreach ($columns as $col) {
$html .= '<td class="sectiontableheader">[b]' . (($col->id == abs($sort_col)) ? '[b]' : '') . $col->cn_description . (($col->id == abs($sort_col)) ? '' : '[/b]') . '[/b]';
//$html .= '[url="' . $url . '&gedaorder=' . $col->id . '"]»[/url]</td>';
$html .= '[url="javascript:document.' . $table . 'Form.' . $table . 'order.value=' . (($col->id == abs($sort_col)) ? -$sort_col : $col->id) . ';document.' . $table . 'Form.submit();"]»[/url]</td>';
}
$html .= '</tr>';
$k = 0;
foreach ($rows as $row) {
$html .= "\n<tr class='sectiontableentry" . (($k % 2) + 1) ."'>";
foreach ($columns as $col) {
$align = 'left';
$value = $row[$col->id];
$format = $col->cn_format;
switch ($col->cn_type) {
case 'C':
$align = 'left';
if ($value) {
switch ($format) {
case 'A': // ANCHOR
$value = '[url="' . $value . '"]' . $value . '[/url]';
break;
case 'M': // MAILTO
$value = '[email="' . $value . '"]' . $value . '[/email]';
break;
case 'IMG': // IMAGE
$value = '[img]' . $value . '[/img]';
break;
case 'L': // LOWER
$value = strtolower($value);
break;
case 'U': // UPPER
$value = strtoupper($value);
break;
}
}
break;
case 'N':
$align = 'right';
if ($value && $format) {
$params = explode("/", $format);
if (!$params[1]) $params[1] = '.';
if (!$params[2]) $params[2] = ',';
$value = number_format($value, $params[0], $params[1], $params[2]);
}
break;
case 'D':
$align = 'left';
if ($value) $value = date(!$format ? 'Y-m-d H:i:s' : $format, $value);
break;
}
$value = $value ? $value : '';
$html .= "<td align='$align'>$value</td>";
}
$html .= '</tr>';
$k++;
}
// [url]http://www.domain.com/[/url]$option/$task/$sectionid/$id/$Itemid/$limit/$limitstart
$link = "index.php?"
. "option=" . mosGetParam($_REQUEST, 'option', '' ) . "&";
if ($_REQUEST['task'])
$link .= "task=" . mosGetParam($_REQUEST, 'task') . "&";
if ($_REQUEST['sectionid'])
$link .= "sectionid=" . mosGetParam($_REQUEST, 'sectionid') . "&";
if ($_REQUEST['id'])
$link .= "id=" . mosGetParam($_REQUEST, 'id') . "&";
$link .= "Itemid=" . mosGetParam($_REQUEST, 'Itemid', '' );
$html .= '<tr>';
$html .= '<td colspan=' . count($columns) . '"></td>';
$html .= '</tr>';
$html .= '<tr>';
//$html .= '<td align="center" colspan=' . count($columns) . ' class="sectiontablefooter">' . $pageNav->writePagesLinks($link) . '</th>';
$html .= '</tr>';
$html .= '<tr>';
// $html .= '<td align="center" colspan=' . count($columns) .'>' . _PN_DISPLAY_NR . '' . $pageNav->getLimitBox($link) . $pageNav->writePagesCounter() . '</td>';
$html .= '</tr>';
$html .= '</table>';
$html .= '</form>';
$html .= "\n";
return $html;
}
}
?>