コード例 #1
0
ファイル: Model.php プロジェクト: maitandat1507/DevHelper
 protected function _generate()
 {
     $className = $this->_getClassName();
     $tableName = DevHelper_Generator_Db::getTableName($this->_config, $this->_dataClass['name']);
     $idField = '';
     if (count($this->_dataClass['primaryKey']) == 1) {
         $idField = reset($this->_dataClass['primaryKey']);
     }
     $getFunctionName = self::generateGetDataFunctionName($this->_addOn, $this->_config, $this->_dataClass);
     $countFunctionName = self::generateCountDataFunctionName($this->_addOn, $this->_config, $this->_dataClass);
     $tableAlias = $this->_dataClass['name'];
     if (in_array($tableAlias, array('group', 'join', 'order'))) {
         $tableAlias = '_' . $tableAlias;
     }
     $variableName = self::getVariableName($this->_addOn, $this->_config, $this->_dataClass);
     $variableNamePlural = self::getVariableNamePlural($this->_addOn, $this->_config, $this->_dataClass);
     $conditionFields = DevHelper_Generator_Db::getConditionFields($this->_dataClass['fields']);
     $this->_setClassName($className);
     $this->_setBaseClass('XenForo_Model');
     $this->_addCustomizableMethod("_{$getFunctionName}Customized", 'protected', array('array &$data', 'array $fetchOptions'));
     $this->_addCustomizableMethod("_prepare{$this->_dataClass['camelCase']}ConditionsCustomized", 'protected', array('array &$sqlConditions', 'array $conditions', 'array $fetchOptions'));
     $this->_addCustomizableMethod("_prepare{$this->_dataClass['camelCase']}FetchOptionsCustomized", 'protected', array('&$selectFields', '&$joinTables', 'array $fetchOptions'));
     $this->_addCustomizableMethod("_prepare{$this->_dataClass['camelCase']}OrderOptionsCustomized", 'protected', array('array &$choices', 'array &$fetchOptions'));
     if (!empty($idField)) {
         $this->_addMethod('getList', 'public', array('$conditions' => 'array $conditions = array()', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\${$variableNamePlural} = \$this->{$getFunctionName}(\$conditions, \$fetchOptions);\n\$list = array();\n\nforeach (\${$variableNamePlural} as \$id => \${$variableName}) {\n    \$list[\$id] = \${$variableName}" . (empty($this->_dataClass['title_field']) ? "['{$idField}']" : (is_array($this->_dataClass['title_field']) ? "['{$this->_dataClass['title_field'][0]}']['{$this->_dataClass['title_field'][1]}']" : "['{$this->_dataClass['title_field']}']")) . ";\n}\n\nreturn \$list;\n\n            ");
         $this->_addMethod("get{$this->_dataClass['camelCase']}ById", 'public', array('$id', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\${$variableNamePlural} = \$this->{$getFunctionName}(array('{$idField}' => \$id), \$fetchOptions);\n\nreturn reset(\${$variableNamePlural});\n\n            ");
         $this->_addMethod("get{$this->_dataClass['camelCase']}IdsInRange", 'public', array('$start', '$limit'), "\n\n\$db = \$this->_getDb();\n\nreturn \$db->fetchCol(\$db->limit('\n    SELECT {$idField}\n    FROM {$tableName}\n    WHERE {$idField} > ?\n    ORDER BY {$idField}\n', \$limit), \$start);\n\n            ");
     }
     $this->_addMethod($getFunctionName, 'public', array('$conditions' => 'array $conditions = array()', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\$whereConditions = \$this->prepare{$this->_dataClass['camelCase']}Conditions(\$conditions, \$fetchOptions);\n\n\$orderClause = \$this->prepare{$this->_dataClass['camelCase']}OrderOptions(\$fetchOptions);\n\$joinOptions = \$this->prepare{$this->_dataClass['camelCase']}FetchOptions(\$fetchOptions);\n\$limitOptions = \$this->prepareLimitFetchOptions(\$fetchOptions);\n\n\${$variableNamePlural} = \$this->" . (!empty($idField) ? "fetchAllKeyed" : "_getDb()->fetchAll") . "(\$this->limitQueryResults(\"\n    SELECT {$tableAlias}.*\n        \$joinOptions[selectFields]\n    FROM `{$tableName}` AS {$tableAlias}\n        \$joinOptions[joinTables]\n    WHERE \$whereConditions\n        \$orderClause\n    \", \$limitOptions['limit'], \$limitOptions['offset']\n)" . (!empty($idField) ? ", '{$idField}'" : "") . ");\n\n        ", '001');
     $this->_addMethod($getFunctionName, 'public', array('$conditions' => 'array $conditions = array()', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\$this->_{$getFunctionName}Customized(\${$variableNamePlural}, \$fetchOptions);\n\nreturn \${$variableNamePlural};\n\n        ", '999');
     $this->_addMethod($countFunctionName, 'public', array('$conditions' => 'array $conditions = array()', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\$whereConditions = \$this->prepare{$this->_dataClass['camelCase']}Conditions(\$conditions, \$fetchOptions);\n\n\$orderClause = \$this->prepare{$this->_dataClass['camelCase']}OrderOptions(\$fetchOptions);\n\$joinOptions = \$this->prepare{$this->_dataClass['camelCase']}FetchOptions(\$fetchOptions);\n\$limitOptions = \$this->prepareLimitFetchOptions(\$fetchOptions);\n\nreturn \$this->_getDb()->fetchOne(\"\n    SELECT COUNT(*)\n    FROM `{$tableName}` AS {$tableAlias}\n        \$joinOptions[joinTables]\n    WHERE \$whereConditions\n\");\n\n        ");
     $this->_addMethod("prepare{$this->_dataClass['camelCase']}Conditions", 'public', array('$conditions' => 'array $conditions = array()', '$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\$sqlConditions = array();\n\$db = \$this->_getDb();\n\n        ");
     foreach ($conditionFields as $conditionField) {
         $this->_addMethod("prepare{$this->_dataClass['camelCase']}Conditions", '', array(), "\n\nif (isset(\$conditions['{$conditionField}'])) {\n    if (is_array(\$conditions['{$conditionField}'])) {\n        if (!empty(\$conditions['{$conditionField}'])) {\n            // only use IN condition if the array is not empty (nasty!)\n            \$sqlConditions[] = \"{$tableAlias}.{$conditionField} IN (\" . \$db->quote(\$conditions['{$conditionField}']) . \")\";\n        }\n    } else {\n        \$sqlConditions[] = \"{$tableAlias}.{$conditionField} = \" . \$db->quote(\$conditions['{$conditionField}']);\n    }\n}\n\n            ");
     }
     $this->_addMethod("prepare{$this->_dataClass['camelCase']}Conditions", '', array(), "\n\n\$this->_prepare{$this->_dataClass['camelCase']}ConditionsCustomized(\$sqlConditions, \$conditions, \$fetchOptions);\n\nreturn \$this->getConditionsForClause(\$sqlConditions);\n\n        ");
     $this->_addMethod("prepare{$this->_dataClass['camelCase']}FetchOptions", 'public', array('$fetchOptions' => 'array $fetchOptions = array()'), "\n\n\$selectFields = '';\n\$joinTables = '';\n\n\$this->_prepare{$this->_dataClass['camelCase']}FetchOptionsCustomized(\$selectFields, \$joinTables, \$fetchOptions);\n\nreturn array(\n    'selectFields' => \$selectFields,\n    'joinTables' => \$joinTables\n);\n\n        ");
     $orderChoices = array();
     if (isset($this->_dataClass['fields']['display_order'])) {
         if (isset($this->_dataClass['fields']['lft'])) {
             $orderChoices['display_order'] = sprintf('%s.lft', $tableAlias);
         } else {
             $orderChoices['display_order'] = sprintf('%s.display_order', $tableAlias);
         }
     }
     $orderChoices = DevHelper_Generator_File::varExport($orderChoices);
     $this->_addMethod("prepare{$this->_dataClass['camelCase']}OrderOptions", 'public', array('$fetchOptions' => 'array $fetchOptions = array()', '$defaultOrderSql' => '$defaultOrderSql = \'\''), "\n\n\$choices = {$orderChoices};\n\n\$this->_prepare{$this->_dataClass['camelCase']}OrderOptionsCustomized(\$choices, \$fetchOptions);\n\nreturn \$this->getOrderByClause(\$choices, \$fetchOptions, \$defaultOrderSql);\n\n        ");
     $this->_generateImageCode();
     $this->_generatePhrasesCode();
     $this->_generateOptionsCode();
     $this->_generateParentCode();
     return parent::_generate();
 }