Вход Регистрация
Файл: base-sys/base/bol/question_dao.php
Строк: 651
<?php

class BOL_QuestionDao extends PEEP_BaseDao
{
    const 
NAME 'name';
    const 
SECTION_NAME 'sectionName';
    const 
TYPE 'type';
    const 
PRESENTATION 'presentation';
    const 
SORT_ORDER 'sortOrder';
    const 
REQUIRED 'required';
    const 
ON_JOIN 'onJoin';
    const 
ON_EDIT 'onEdit';
    const 
ON_SEARCH 'onSearch';
    const 
ON_VIEW 'onView';

    
/**
     * Constructor.
     *
     */
    
protected function __construct()
    {
        
parent::__construct();
    }
    
/**
     * Singleton instance.
     *
     * @var BOL_QuestionDao
     */
    
private static $classInstance;

    
/**
     * Returns an instance of class (singleton pattern implementation).
     *
     * @return BOL_QuestionDao
     */
    
public static function getInstance()
    {
        if ( 
self::$classInstance === null )
            
self::$classInstance = new self();

        return 
self::$classInstance;
    }

    
/**
     * @see PEEP_BaseDao::getDtoClassName()
     *
     */
    
public function getDtoClassName()
    {
        return 
'BOL_Question';
    }

    
/**
     * @see PEEP_BaseDao::getTableName()
     *
     */
    
public function getTableName()
    {
        return 
PEEP_DB_PREFIX 'base_question';
    }

    public function 
findQuestionByName$questionName )
    {
        if ( 
$questionName === null )
        {
            return 
null;
        }

        
$name trim($questionName);

        
$example = new PEEP_Example();
        
$example->andFieldEqual('name'$name);
        return 
$this->findObjectByExample($example);
    }

    public function 
findQuestionByNameList$questionNameList )
    {
        if ( empty(
$questionNameList) )
        {
            return array();
        }

        
$example = new PEEP_Example();
        
$example->andFieldInArray('name'$questionNameList);
        
$dtoList $this->findListByExample($example);

        
$result = array();

        foreach ( 
$dtoList as $dto )
        {
            
$result[$dto->name] = $dto;
        }

        return 
$result;
    }

    public function 
findQuestionsByPresentationList$presentation )
    {
        if ( 
$presentation === null || !is_array($presentation) )
        {
            return array();
        }

        
$example = new PEEP_Example();
        
$example->andFieldInArray('presentation'$presentation);
        
$example->setOrder('sortOrder');

        return 
$this->findListByExample($example);
    }

    public function 
findQuestionsByQuestionNameList( array $questionName )
    {
        if ( 
$questionName === null || !is_array($questionName) || count($questionName) === )
        {
            return array();
        }

        
$example = new PEEP_Example();
        
$example->andFieldInArray('name'$questionName);
        return 
$this->findListByExample($example);
    }

    public function 
findAllQuestionsForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all' ) AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                    
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findQuestionsForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName )  AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;
        
        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findSearchQuestionsForAccountType$accountType )
    {
        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all' ) AND `question`.`onSearch` = 1  AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findAllQuestionsWithSectionForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.`id`, `question`.`name`, `section`.`name` as `sectionName`, `question`.`accountTypeName`,
                            `question`.`type`, `question`.`presentation`, `question`.`required`, `question`.`onJoin`,
                            `question`.`onEdit`, `question`.`onSearch`, `question`.`onView`, `question`.`base`,
                            `question`.`removable`, `question`.`columnCount`, `question`.`sortOrder`,
                            `section`.`sortOrder` as `sectionOrder`, `question`.`parent` as `parent`
                FROM `" 
$this->getTableName() . "` as `question`

                LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                        ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                LEFT JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all' )  AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )

                ORDER BY IF( `section`.`name` IS NULL, 0, 1 )  ASC,  `section`.`sortOrder`, `question`.`sortOrder` "
;
                
        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findSignUpQuestionsForAccountType$accountType$baseOnly false )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$questionAdds "";

        if ( 
$baseOnly === true )
        {
            
$questionAdds ' AND `question`.`base` = 1 ';
        }

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all'  )  AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                                  AND `question`.`onJoin` = '1' " 
$questionAdds "
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findEditQuestionsForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all' )  AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                                  AND `question`.`onEdit` = '1'
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findRequiredQuestionsForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE `qta`.`accountType` = :accountTypeName AND `question`.`required` = '1' AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findViewQuestionsForAccountType$accountType )
    {
        if ( 
$accountType === null )
        {
            return array();
        }

        
$accountTypeName trim($accountType);

        
$sql " SELECT DISTINCT `question`.* FROM `" $this->getTableName() . "` as `question`

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    INNER JOIN " 
BOL_QuestionToAccountTypeDao::getInstance()->getTableName() . " as `qta` ON( `question`.`name` = `qta`.`questionName` )

                    WHERE ( `qta`.`accountType` = :accountTypeName OR :accountTypeName = 'all' ) AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                                  AND `question`.`onView` = '1' 
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql, array('accountTypeName' => $accountTypeName));
    }

    public function 
findBaseSignUpQuestions()
    {
        
$sql " SELECT `question`.* FROM `" $this->getTableName() . "` as `question` 

                    LEFT JOIN  `" 
BOL_QuestionSectionDao::getInstance()->getTableName() . "` as `section`
                            ON ( `question`.`sectionName` = `section`.`name` AND `question`.`sectionName` != '' AND `question`.`sectionName` IS NOT NULL )

                    WHERE `question`.`base` = 1 AND `question`.`onJoin` = '1' AND ( `section`.isHidden IS NULL OR `section`.isHidden = 0 )
                    ORDER BY IF( `section`.`name` IS NULL, 0, 1 ),  `section`.`sortOrder`, `question`.`sortOrder` "
;

        return 
$this->dbo->queryForList($sql);
    }

    public function 
findLastQuestionOrder$sectionName )
    {
        
$sql " SELECT MAX( `sortOrder`) FROM `" $this->getTableName() . "` ";

        
$result null;
        if ( isset(
$sectionName) && count(trim($sectionName)) > )
        {
            
$sql .= ' WHERE `sectionName`= :sectionName ';
            
$result $this->dbo->queryForColumn($sql, array('sectionName' => trim($sectionName)));
        }
        else
        {
            
$result $this->dbo->queryForColumn($sql);
        }

        return 
$result;
    }

    public function 
findQuestionsBySectionNameList( array $sectionNameList )
    {
        if ( 
$sectionNameList === null || !is_array($sectionNameList) || count($sectionNameList) === )
        {
            return array();
        }

        
$example = new PEEP_Example();
        
$example->andFieldInArray('sectionName'$sectionNameList);

        return 
$this->findListByExample($example);
    }

    public function 
batchReplace$objects )
    {
        
$this->dbo->batchInsertOrUpdateObjectList($this->getTableName(), $objects);
        return 
$this->dbo->getAffectedRows();
    }

    public function 
findQuestionChildren$parentQuestionName )
    {
        if ( empty(
$parentQuestionName) )
        {
            return array();
        }

        
$example = new PEEP_Example();
        
$example->andFieldEqual('parent'$parentQuestionName);
        return 
$this->findListByExample($example);
    }
}
Онлайн: 1
Реклама