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); }