コード例 #1
0
ファイル: Model.php プロジェクト: hahuunguyen/DTUI_201105
    public static function generate(array $addOn, DevHelper_Config_Base $config, array $dataClass)
    {
        $className = self::getClassName($addOn, $config, $dataClass);
        $tableName = DevHelper_Generator_Db::getTableName($config, $dataClass['name']);
        $commentAutoGeneratedStart = DevHelper_Generator_File::COMMENT_AUTO_GENERATED_START;
        $commentAutoGeneratedEnd = DevHelper_Generator_File::COMMENT_AUTO_GENERATED_END;
        $intFields = DevHelper_Generator_File::varExport(DevHelper_Generator_Db::getIntFields($dataClass['fields']));
        $contents = <<<EOF
<?php
class {$className} extends XenForo_Model {

\t{$commentAutoGeneratedStart}

\tpublic function getList(array \$conditions = array(), array \$fetchOptions = array()) {
\t\t\$data = \$this->getAll{$dataClass['camelCase']}(\$conditions, \$fetchOptions);
\t\t\$list = array();
\t\t
\t\tforeach (\$data as \$id => \$row) {
\t\t\t\$list[\$id] = \$row['{$dataClass['title_field']}'];
\t\t}
\t\t
\t\treturn \$list;
\t}

\tpublic function get{$dataClass['camelCase']}ById(\$id, array \$fetchOptions = array()) {
\t\t\$data = \$this->getAll{$dataClass['camelCase']}(array ('{$dataClass['id_field']}' => \$id), \$fetchOptions);
\t\t
\t\treturn reset(\$data);
\t}
\t
\tpublic function getAll{$dataClass['camelCase']}(array \$conditions = array(), array \$fetchOptions = array()) {
\t\t\$whereConditions = \$this->prepare{$dataClass['camelCase']}Conditions(\$conditions, \$fetchOptions);

\t\t\$orderClause = \$this->prepare{$dataClass['camelCase']}OrderOptions(\$fetchOptions);
\t\t\$joinOptions = \$this->prepare{$dataClass['camelCase']}FetchOptions(\$fetchOptions);
\t\t\$limitOptions = \$this->prepareLimitFetchOptions(\$fetchOptions);

\t\treturn \$this->fetchAllKeyed(\$this->limitQueryResults("
\t\t\t\tSELECT {$dataClass['name']}.*
\t\t\t\t\t\$joinOptions[selectFields]
\t\t\t\tFROM `{$tableName}` AS {$dataClass['name']}
\t\t\t\t\t\$joinOptions[joinTables]
\t\t\t\tWHERE \$whereConditions
\t\t\t\t\t\$orderClause
\t\t\t", \$limitOptions['limit'], \$limitOptions['offset']
\t\t), '{$dataClass['id_field']}');
\t}
\t\t
\tpublic function countAll{$dataClass['camelCase']}(array \$conditions = array(), array \$fetchOptions = array()) {
\t\t\$whereConditions = \$this->prepare{$dataClass['camelCase']}Conditions(\$conditions, \$fetchOptions);

\t\t\$orderClause = \$this->prepare{$dataClass['camelCase']}OrderOptions(\$fetchOptions);
\t\t\$joinOptions = \$this->prepare{$dataClass['camelCase']}FetchOptions(\$fetchOptions);
\t\t\$limitOptions = \$this->prepareLimitFetchOptions(\$fetchOptions);

\t\treturn \$this->_getDb()->fetchOne("
\t\t\tSELECT COUNT(*)
\t\t\tFROM `{$tableName}` AS {$dataClass['name']}
\t\t\t\t\$joinOptions[joinTables]
\t\t\tWHERE \$whereConditions
\t\t");
\t}
\t
\tpublic function prepare{$dataClass['camelCase']}Conditions(array \$conditions, array &\$fetchOptions) {
\t\t\$sqlConditions = array();
\t\t\$db = \$this->_getDb();
\t\t
\t\tforeach ({$intFields} as \$intField) {
\t\t\tif (!isset(\$conditions[\$intField])) continue;
\t\t\t
\t\t\tif (is_array(\$conditions[\$intField])) {
\t\t\t\t\$sqlConditions[] = "{$dataClass['name']}.\$intField IN (" . \$db->quote(\$conditions[\$intField]) . ")";
\t\t\t} else {
\t\t\t\t\$sqlConditions[] = "{$dataClass['name']}.\$intField = " . \$db->quote(\$conditions[\$intField]);
\t\t\t}
\t\t}
\t\t
\t\treturn \$this->getConditionsForClause(\$sqlConditions);
\t}
\t
\tpublic function prepare{$dataClass['camelCase']}FetchOptions(array \$fetchOptions) {
\t\t\$selectFields = '';
\t\t\$joinTables = '';

\t\treturn array(
\t\t\t'selectFields' => \$selectFields,
\t\t\t'joinTables'   => \$joinTables
\t\t);
\t}
\t
\tpublic function prepare{$dataClass['camelCase']}OrderOptions(array &\$fetchOptions, \$defaultOrderSql = '') {
\t\t\$choices = array(
\t\t\t
\t\t);
\t\treturn \$this->getOrderByClause(\$choices, \$fetchOptions, \$defaultOrderSql);
\t}

\t{$commentAutoGeneratedStart}

}
EOF;
        return array($className, $contents);
    }