protected static function validateIndexDefinitionsFromSchema(array $indexes, array $columns) { $columnNames = RedBeanModelMemberToColumnUtil::resolveColumnNamesArrayFromColumnSchemaDefinition($columns); foreach ($indexes as $indexName => $index) { $indexNameLength = strlen($indexName); if (!is_string($indexName)) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index Name: {{indexName}} is not a string', array('{{indexName}}' => $indexName))); } if ($indexNameLength > 64) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index Name: {{indexName}} is {{length}} characters, {{over}} characters over limit(64).', array('{{indexName}}' => $indexName, '{{length}}' => $indexNameLength, '{{over}}' => $indexNameLength - 64))); } if (count($index) != 2) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index: {{indexName}} does not have 2 clauses', array('{{indexName}}' => $indexName))); } if (!ArrayUtil::isValidArrayIndex('columns', $index)) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index: {{indexName}} does not have indexed column names', array('{{indexName}}' => $indexName))); } if (!ArrayUtil::isValidArrayIndex('unique', $index)) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index: {{indexName}} does not have index uniqueness clause defined', array('{{indexName}}' => $indexName))); } if (!is_array($index['columns'])) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index: {{indexName}} column definition is not an array', array('{{indexName}}' => $indexName))); } foreach ($index['columns'] as $column) { list($column) = explode('(', $column); if (!in_array($column, $columnNames)) { return static::returnSchemaValidationResult(Zurmo::t('Core', 'Index: {{indexName}} column: {{columnName}} does not exist' . ' in current schema definition provided. Columns: {{columns}}', array('{{indexName}}' => $indexName, '{{columnName}}' => $column, '{{columns}}' => print_r($columnNames, true)))); } } } return static::returnSchemaValidationResult(null, true); }