function DB_Select($TablesIDs, $ColumnsIDs = '*', $Query = array()) { /****************************************************************************/ $__args_types = array('string,array', 'string,array', 'array', 'boolean'); #----------------------------------------------------------------------------- $__args__ = Func_Get_Args(); eval(FUNCTION_INIT); /****************************************************************************/ if (!$TablesIDs) { return ERROR | @Trigger_Error('[DB_Select]: имена таблиц не указаны'); } #----------------------------------------------------------------------------- $Default = array('GroupBy' => '', 'SortOn' => '', 'IsDesc' => FALSE, 'Limits' => array()); #----------------------------------------------------------------------------- Array_Union($Default, $Query); #----------------------------------------------------------------------------- $Query = $Default; #----------------------------------------------------------------------------- if (!Is_Array($TablesIDs)) { $TablesIDs = array($TablesIDs); } #----------------------------------------------------------------------------- $Array = array(); #----------------------------------------------------------------------------- foreach ($TablesIDs as $TableID) { $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $TableID) ? SPrintF('`%s`', $TableID) : $TableID; } #----------------------------------------------------------------------------- $TablesIDs = $Array; #----------------------------------------------------------------------------- if (!Is_Array($ColumnsIDs)) { $ColumnsIDs = array($ColumnsIDs); } #----------------------------------------------------------------------------- $Array = array(); #----------------------------------------------------------------------------- foreach ($ColumnsIDs as $ColumnID) { $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $ColumnID) ? SPrintF('`%s`', $ColumnID) : $ColumnID; } #----------------------------------------------------------------------------- $ColumnsIDs = $Array; #----------------------------------------------------------------------------- $Sql = SPrintF('SELECT %s FROM %s', Implode(',', $ColumnsIDs), Implode(',', $TablesIDs)); #----------------------------------------------------------------------------- if ($Where = DB_Where($Query)) { $Sql = SPrintF('%s WHERE %s', $Sql, $Where); } #----------------------------------------------------------------------------- $GroupBy = $Query['GroupBy']; #----------------------------------------------------------------------------- if ($GroupBy) { #--------------------------------------------------------------------------- if (!Is_Array($GroupBy)) { $GroupBy = array($GroupBy); } #--------------------------------------------------------------------------- $Array = array(); #--------------------------------------------------------------------------- foreach ($GroupBy as $ColumnID) { $Array[] = SPrintF('`%s`', $ColumnID); } #--------------------------------------------------------------------------- $GroupBy = $Array; #--------------------------------------------------------------------------- $Sql = SPrintF('%s GROUP BY %s', $Sql, Implode(',', $GroupBy)); } #----------------------------------------------------------------------------- $SortOn = $Query['SortOn']; #----------------------------------------------------------------------------- if ($SortOn) { #--------------------------------------------------------------------------- if (!Is_Array($SortOn)) { $SortOn = array($SortOn); } #--------------------------------------------------------------------------- $Array = array(); #--------------------------------------------------------------------------- foreach ($SortOn as $ColumnID) { #------------------------------------------------------------------------- $ColumnID = DB_Escape($ColumnID); #------------------------------------------------------------------------- #$Array[] = StrPos($ColumnID,'.')?$ColumnID:SPrintF('`%s`',$ColumnID); # если в названии встречается точка или запятая - не ставим кавычки... $Array[] = StrpBrk($ColumnID, '.,') ? $ColumnID : SPrintF('`%s`', $ColumnID); #Debug(SPrintF('[system/libs/auto/DB]: SortOn = %s',$ColumnID)); #$Array[] = $ColumnID; } #--------------------------------------------------------------------------- $Sql = SPrintF('%s ORDER BY %s', $Sql, Implode(',', $Array)); } #----------------------------------------------------------------------------- if ($Query['IsDesc']) { $Sql = SPrintF('%s DESC', $Sql); } #----------------------------------------------------------------------------- $Limits = $Query['Limits']; if (Count($Limits) > 1) { $Sql = SPrintF('%s LIMIT %s, %s', $Sql, Current($Limits), Next($Limits)); } #----------------------------------------------------------------------------- $CacheID = SPrintF('[DB_Select]:%s', Md5($Sql)); #----------------------------------------------------------------------------- if (!($Rows = Cache_Get($CacheID))) { #--------------------------------------------------------------------------- $Result = DB_Query($Sql); #--------------------------------------------------------------------------- switch (ValueOf($Result)) { case 'error': return ERROR | @Trigger_Error('[DB_Select]: невозможно осуществить запрос'); case 'resource': #----------------------------------------------------------------------- $Rows = MySQL::Result($Result); #----------------------------------------------------------------------- if (Count($Rows) < 1) { return new gException('ROWS_NOT_FOUND', 'Записи не найдены'); } #----------------------------------------------------------------------- $NoTypesDB = Link_Get('NoTypesDB', 'boolean'); #----------------------------------------------------------------------- if (!$NoTypesDB) { #--------------------------------------------------------------------- for ($i = 0; $i < Count($Rows); $i++) { #------------------------------------------------------------------- $Row =& $Rows[$i]; #------------------------------------------------------------------- $Row = DB_Types($Row, 'Explode'); if (Is_Error($Row)) { return ERROR | @Trigger_Error('[DB_Select]: не удалось произвести преобразование типов'); } } } #----------------------------------------------------------------------- Cache_Add($CacheID, $Rows); break; default: return ERROR | @Trigger_Error(101); } } #----------------------------------------------------------------------------- if (In_Array('UNIQ', $Query, TRUE)) { #--------------------------------------------------------------------------- if (Count($Rows) > 1) { return ERROR | @Trigger_Error('[DB_Select]: запись не является уникальной'); } #--------------------------------------------------------------------------- $Rows = Current($Rows); } #----------------------------------------------------------------------------- return $Rows; }
$Links =& Links(); #------------------------------------------------------------------------------- $DOM =& $Links['DOM']; #------------------------------------------------------------------------------- $CacheID = SPrintF('Buttons/Standard:%s', Md5($Title)); #------------------------------------------------------------------------------- if (!Cache_IsExists($CacheID)) { #----------------------------------------------------------------------------- if (!Is_Null($JavaScript)) { #--------------------------------------------------------------------------- $Script = new Tag('SCRIPT', array('type' => 'text/javascript', 'src' => SPrintF('SRC:{Js/%s}', $JavaScript))); #--------------------------------------------------------------------------- $DOM->AddChild('Head', $Script); } #----------------------------------------------------------------------------- Cache_Add($CacheID, TRUE); } #------------------------------------------------------------------------------- $Img = new Tag('IMG', array('alt' => $Title, 'height' => 22, 'width' => 22, 'src' => SPrintF('SRC:{Images/Icons/%s}', $Icon))); #------------------------------------------------------------------------------- $Attribs['class'] = 'Standard'; #------------------------------------------------------------------------------- $Button = new Tag('BUTTON', $Attribs, $Img); #------------------------------------------------------------------------------- $LinkID = UniqID('Button'); #------------------------------------------------------------------------------- $Links =& Links(); #------------------------------------------------------------------------------- $Links[$LinkID] =& $Button; #------------------------------------------------------------------------------- $Comp = Comp_Load('Form/Prompt', $LinkID, $Title);
} #----------------------------------------------------------------------------- if ($Left > 0) { $Div->AddChild(new Tag('IMG', array('class' => 'Button', 'alt' => 'Прокрутить назад', 'width' => 12, 'height' => 10, 'onclick' => SPrintF('TableSuperSetIndex(%s);', $Index - 6), 'src' => 'SRC:{Images/ArrowLeft.gif}'))); } #----------------------------------------------------------------------------- $Left = Max(0, $Left); $Right = Min($Pages, $Right); #----------------------------------------------------------------------------- for ($i = $Left; $i < $Right; $i++) { #--------------------------------------------------------------------------- $Button = new Tag('BUTTON', array('class' => 'TableSuperIndexes', 'onclick' => SPrintF('TableSuperSetIndex(%s);', $i)), $i + 1); #--------------------------------------------------------------------------- if ($i == $Index) { $Button->AddAttribs(array('disabled' => 'true')); } #--------------------------------------------------------------------------- $Div->AddChild($Button); } #----------------------------------------------------------------------------- if ($Right < $Pages) { $Div->AddChild(new Tag('IMG', array('class' => 'Button', 'alt' => 'Прокрутить вперед', 'width' => 12, 'height' => 10, 'onclick' => SPrintF('TableSuperSetIndex(%s);', $Index + 6), 'src' => 'SRC:{Images/ArrowRight.gif}'))); } #----------------------------------------------------------------------------- $NoBody = new Tag('NOBODY', $Div); #----------------------------------------------------------------------------- Cache_Add($CacheID, $NoBody); } #------------------------------------------------------------------------------- return $NoBody; #-------------------------------------------------------------------------------