diff --git a/README.md b/README.md index af33d59..e1c6e30 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,8 @@ IMPORTANT Jelly requires the following Kohana versions per Git branch: * `3.1/develop` and `3.1/master` branches: Kohana 3.1.3+ -* `3.2/develop` and `3.2/master` branches: Kohana 3.2+ +* `3.2/develop` and `3.2/master` branches: Kohana 3.2 +* `3.3/master` branch: Kohana 3.3+ **Useful stuff**: @@ -58,4 +59,4 @@ Remember: * **No circular references** — Fields are well-designed to prevent the infinite loop problem that sometimes plagues Sprig. It's even possible to have same-table child/parent references out of the box without intermediate - models. \ No newline at end of file + models. diff --git a/classes/jelly.php b/classes/Jelly.php similarity index 100% rename from classes/jelly.php rename to classes/Jelly.php diff --git a/classes/jelly/behavior.php b/classes/Jelly/Behavior.php similarity index 100% rename from classes/jelly/behavior.php rename to classes/Jelly/Behavior.php diff --git a/classes/jelly/builder.php b/classes/Jelly/Builder.php similarity index 100% rename from classes/jelly/builder.php rename to classes/Jelly/Builder.php diff --git a/classes/jelly/collection.php b/classes/Jelly/Collection.php similarity index 100% rename from classes/jelly/collection.php rename to classes/Jelly/Collection.php diff --git a/classes/jelly/core.php b/classes/Jelly/Core.php similarity index 94% rename from classes/jelly/core.php rename to classes/Jelly/Core.php index a49248b..f82ed2c 100644 --- a/classes/jelly/core.php +++ b/classes/Jelly/Core.php @@ -194,11 +194,11 @@ public static function class_name($model) { if ($model instanceof Jelly_Model) { - return strtolower(get_class($model)); + return get_class($model); } else { - return strtolower(Jelly::$_model_prefix.$model); + return Jelly::get_class_name(Jelly::$_model_prefix.$model); } } @@ -256,4 +256,13 @@ public static function behavior_prefix() return Jelly::$_behavior_prefix; } + public static function get_class_name ($class_name) + { + $class_name = explode ('_', $class_name); + foreach ($class_name as &$name) { + $name = UTF8::ucfirst ($name); + } + + return implode ('_', $class_name); + } } // End Jelly_Core \ No newline at end of file diff --git a/classes/jelly/core/behavior.php b/classes/Jelly/Core/Behavior.php similarity index 100% rename from classes/jelly/core/behavior.php rename to classes/Jelly/Core/Behavior.php diff --git a/classes/jelly/core/builder.php b/classes/Jelly/Core/Builder.php similarity index 98% rename from classes/jelly/core/builder.php rename to classes/Jelly/Core/Builder.php index c722711..e1b53e1 100644 --- a/classes/jelly/core/builder.php +++ b/classes/Jelly/Core/Builder.php @@ -296,7 +296,7 @@ public function count($db = NULL) // Find the count $result = (int) $query - ->select(array('COUNT("*")', 'total')) + ->select(array(DB::expr('COUNT(*)'), 'total')) ->execute($db) ->get('total'); @@ -337,7 +337,7 @@ public function execute($db = NULL, $type = NULL, $ignored = NULL) * @param string|null $type * @return string */ - public function compile(Database $db, $type = NULL) + public function compile($db = NULL, $type = NULL) { $type === NULL AND $type = $this->_type; @@ -1011,6 +1011,28 @@ protected function _field_alias($field, $value = NULL, $join_if_sure = TRUE) return $join ? ($alias.'.'.$column) : $column; } + public function field_alias($field) + { + return $this->_field_alias($field); + } + + /** + * Return table name in query, table alias and table model + * + * @param $field + * @return mixed + */ + public function with_alias($field) + { + $field = $this->_meta->field($field); + + $table = $this->_meta->table(); + + $key = $field->foreign['model'].'.'.$table.':'.$field->name; + + return $this->_model_cache[$key]; + } + /** * Resolves meta-aliases. * diff --git a/classes/jelly/core/collection.php b/classes/Jelly/Core/Collection.php similarity index 93% rename from classes/jelly/core/collection.php rename to classes/Jelly/Core/Collection.php index 58f0c8f..0b3541f 100644 --- a/classes/jelly/core/collection.php +++ b/classes/Jelly/Core/Collection.php @@ -91,7 +91,7 @@ public function meta() } /** - * Return all of the rows in the result as an array. + * Return all of the models in array. * * @param string $key column for associative keys * @param string $value column for values @@ -99,7 +99,31 @@ public function meta() */ public function as_array($key = NULL, $value = NULL) { - return $this->_result->as_array($key, $value); + if ($value === NULL) + { + $result = array(); + + if ($key === NULL) + { + foreach ($this as $obj) + { + $result[] = $obj; + } + } + else + { + foreach ($this as $obj) + { + $result[$obj->$key] = $obj; + } + } + + return $result; + } + else + { + return $this->_result->as_array($key, $value); + } } /** diff --git a/classes/jelly/core/event.php b/classes/Jelly/Core/Event.php similarity index 100% rename from classes/jelly/core/event.php rename to classes/Jelly/Core/Event.php diff --git a/classes/jelly/core/event/data.php b/classes/Jelly/Core/Event/Data.php similarity index 100% rename from classes/jelly/core/event/data.php rename to classes/Jelly/Core/Event/Data.php diff --git a/classes/jelly/core/field.php b/classes/Jelly/Core/Field.php similarity index 100% rename from classes/jelly/core/field.php rename to classes/Jelly/Core/Field.php diff --git a/classes/jelly/core/field/belongsto.php b/classes/Jelly/Core/Field/BelongsTo.php similarity index 100% rename from classes/jelly/core/field/belongsto.php rename to classes/Jelly/Core/Field/BelongsTo.php diff --git a/classes/jelly/core/field/boolean.php b/classes/Jelly/Core/Field/Boolean.php similarity index 100% rename from classes/jelly/core/field/boolean.php rename to classes/Jelly/Core/Field/Boolean.php diff --git a/classes/Jelly/Core/Field/DateTime.php b/classes/Jelly/Core/Field/DateTime.php new file mode 100644 index 0000000..678333d --- /dev/null +++ b/classes/Jelly/Core/Field/DateTime.php @@ -0,0 +1,44 @@ +format('Y-m-d H:i:s'); + } + return $value; + } +} diff --git a/classes/jelly/core/field/email.php b/classes/Jelly/Core/Field/Email.php similarity index 100% rename from classes/jelly/core/field/email.php rename to classes/Jelly/Core/Field/Email.php diff --git a/classes/jelly/core/field/enum.php b/classes/Jelly/Core/Field/Enum.php similarity index 100% rename from classes/jelly/core/field/enum.php rename to classes/Jelly/Core/Field/Enum.php diff --git a/classes/jelly/core/field/expression.php b/classes/Jelly/Core/Field/Expression.php similarity index 100% rename from classes/jelly/core/field/expression.php rename to classes/Jelly/Core/Field/Expression.php diff --git a/classes/jelly/core/field/file.php b/classes/Jelly/Core/Field/File.php similarity index 100% rename from classes/jelly/core/field/file.php rename to classes/Jelly/Core/Field/File.php diff --git a/classes/jelly/core/field/float.php b/classes/Jelly/Core/Field/Float.php similarity index 100% rename from classes/jelly/core/field/float.php rename to classes/Jelly/Core/Field/Float.php diff --git a/classes/jelly/core/field/hasmany.php b/classes/Jelly/Core/Field/HasMany.php similarity index 98% rename from classes/jelly/core/field/hasmany.php rename to classes/Jelly/Core/Field/HasMany.php index 63917ed..d7b1635 100644 --- a/classes/jelly/core/field/hasmany.php +++ b/classes/Jelly/Core/Field/HasMany.php @@ -67,7 +67,7 @@ public function initialize($model, $column) // of this field, and the field defaults to this field's model's foreign key if (empty($this->foreign)) { - $this->foreign = inflector::singular($this->name).'.'.$model.':foreign_key'; + $this->foreign = Inflector::singular($this->name).'.'.$model.':foreign_key'; } // We have a model? Default the field to this field's model's foreign key elseif (FALSE === strpos($this->foreign, '.')) diff --git a/classes/jelly/core/field/hasone.php b/classes/Jelly/Core/Field/HasOne.php similarity index 100% rename from classes/jelly/core/field/hasone.php rename to classes/Jelly/Core/Field/HasOne.php diff --git a/classes/jelly/core/field/image.php b/classes/Jelly/Core/Field/Image.php similarity index 100% rename from classes/jelly/core/field/image.php rename to classes/Jelly/Core/Field/Image.php diff --git a/classes/jelly/core/field/integer.php b/classes/Jelly/Core/Field/Integer.php similarity index 100% rename from classes/jelly/core/field/integer.php rename to classes/Jelly/Core/Field/Integer.php diff --git a/classes/jelly/core/field/manytomany.php b/classes/Jelly/Core/Field/ManyToMany.php similarity index 100% rename from classes/jelly/core/field/manytomany.php rename to classes/Jelly/Core/Field/ManyToMany.php diff --git a/classes/jelly/core/field/password.php b/classes/Jelly/Core/Field/Password.php similarity index 100% rename from classes/jelly/core/field/password.php rename to classes/Jelly/Core/Field/Password.php diff --git a/classes/jelly/core/field/polymorphic.php b/classes/Jelly/Core/Field/Polymorphic.php similarity index 100% rename from classes/jelly/core/field/polymorphic.php rename to classes/Jelly/Core/Field/Polymorphic.php diff --git a/classes/jelly/core/field/primary.php b/classes/Jelly/Core/Field/Primary.php similarity index 100% rename from classes/jelly/core/field/primary.php rename to classes/Jelly/Core/Field/Primary.php diff --git a/classes/jelly/core/field/serialized.php b/classes/Jelly/Core/Field/Serialized.php similarity index 100% rename from classes/jelly/core/field/serialized.php rename to classes/Jelly/Core/Field/Serialized.php diff --git a/classes/jelly/core/field/slug.php b/classes/Jelly/Core/Field/Slug.php similarity index 100% rename from classes/jelly/core/field/slug.php rename to classes/Jelly/Core/Field/Slug.php diff --git a/classes/jelly/core/field/string.php b/classes/Jelly/Core/Field/String.php similarity index 100% rename from classes/jelly/core/field/string.php rename to classes/Jelly/Core/Field/String.php diff --git a/classes/jelly/core/field/supports/addremove.php b/classes/Jelly/Core/Field/Supports/AddRemove.php similarity index 100% rename from classes/jelly/core/field/supports/addremove.php rename to classes/Jelly/Core/Field/Supports/AddRemove.php diff --git a/classes/jelly/core/field/supports/has.php b/classes/Jelly/Core/Field/Supports/Has.php similarity index 100% rename from classes/jelly/core/field/supports/has.php rename to classes/Jelly/Core/Field/Supports/Has.php diff --git a/classes/jelly/core/field/supports/join.php b/classes/Jelly/Core/Field/Supports/Join.php similarity index 100% rename from classes/jelly/core/field/supports/join.php rename to classes/Jelly/Core/Field/Supports/Join.php diff --git a/classes/jelly/core/field/supports/save.php b/classes/Jelly/Core/Field/Supports/Save.php similarity index 100% rename from classes/jelly/core/field/supports/save.php rename to classes/Jelly/Core/Field/Supports/Save.php diff --git a/classes/jelly/core/field/supports/with.php b/classes/Jelly/Core/Field/Supports/With.php similarity index 100% rename from classes/jelly/core/field/supports/with.php rename to classes/Jelly/Core/Field/Supports/With.php diff --git a/classes/jelly/core/field/text.php b/classes/Jelly/Core/Field/Text.php similarity index 100% rename from classes/jelly/core/field/text.php rename to classes/Jelly/Core/Field/Text.php diff --git a/classes/jelly/core/field/timestamp.php b/classes/Jelly/Core/Field/Timestamp.php similarity index 100% rename from classes/jelly/core/field/timestamp.php rename to classes/Jelly/Core/Field/Timestamp.php diff --git a/classes/jelly/core/meta.php b/classes/Jelly/Core/Meta.php similarity index 100% rename from classes/jelly/core/meta.php rename to classes/Jelly/Core/Meta.php diff --git a/classes/jelly/core/model.php b/classes/Jelly/Core/Model.php similarity index 95% rename from classes/jelly/core/model.php rename to classes/Jelly/Core/Model.php index a06997b..648624b 100644 --- a/classes/jelly/core/model.php +++ b/classes/Jelly/Core/Model.php @@ -265,6 +265,36 @@ public function get($name) } } + /** + * Gets the value from db for a field, no relationships supports, + * returned raw data only. + * + * @param string $name The field's name + * @return string + */ + public function get_raw($name) + { + if ($field = $this->_meta->field($name)) + { + // Alias the name to its actual name + $name = $field->name; + + if (array_key_exists($name, $this->_changed)) + { + return $this->_changed[$name]; + } + else + { + return $this->original_raw($name); + } + } + // Return unmapped data from custom queries + elseif (isset($this->_unmapped[$name])) + { + return $this->_unmapped[$name]; + } + } + /** * Returns the original value of a field, before it was changed. * @@ -283,6 +313,22 @@ public function original($field) } } + /** + * Returns the original value of a field, before it was changed, + * no relationships supports, returned raw data only. + * + * @param string $field The field's or alias name + * @return string + */ + public function original_raw($field) + { + if ($field = $this->_meta->field($field)) + { + // Alias the name to its actual name + return $this->_original[$field->name]; + } + } + /** * Returns an array of values in the fields. * @@ -633,7 +679,7 @@ public function save($validation = NULL) $value = $field->save($this, $value, $key); // Only set the value to be saved if it's changed from the original - if ($value !== $this->_original[$column]) + if ($field->set($value) !== $this->_original[$column]) { $values[$field->name] = $value; } diff --git a/classes/jelly/core/validation.php b/classes/Jelly/Core/Validation.php similarity index 100% rename from classes/jelly/core/validation.php rename to classes/Jelly/Core/Validation.php diff --git a/classes/jelly/core/validation/exception.php b/classes/Jelly/Core/Validation/Exception.php similarity index 100% rename from classes/jelly/core/validation/exception.php rename to classes/Jelly/Core/Validation/Exception.php diff --git a/classes/jelly/event.php b/classes/Jelly/Event.php similarity index 100% rename from classes/jelly/event.php rename to classes/Jelly/Event.php diff --git a/classes/jelly/event/data.php b/classes/Jelly/Event/Data.php similarity index 100% rename from classes/jelly/event/data.php rename to classes/Jelly/Event/Data.php diff --git a/classes/jelly/field.php b/classes/Jelly/Field.php similarity index 100% rename from classes/jelly/field.php rename to classes/Jelly/Field.php diff --git a/classes/jelly/field/belongsto.php b/classes/Jelly/Field/BelongsTo.php similarity index 100% rename from classes/jelly/field/belongsto.php rename to classes/Jelly/Field/BelongsTo.php diff --git a/classes/jelly/field/boolean.php b/classes/Jelly/Field/Boolean.php similarity index 100% rename from classes/jelly/field/boolean.php rename to classes/Jelly/Field/Boolean.php diff --git a/classes/Jelly/Field/DateTime.php b/classes/Jelly/Field/DateTime.php new file mode 100644 index 0000000..7c76ef2 --- /dev/null +++ b/classes/Jelly/Field/DateTime.php @@ -0,0 +1,3 @@ +