Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
$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);
Ejemplo n.º 3
0
    }
    #-----------------------------------------------------------------------------
    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;
#-------------------------------------------------------------------------------