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