Leenooks customisations for Kohana
This commit is contained in:
@@ -92,7 +92,7 @@ class Kohana_Minion_CLI {
|
||||
{
|
||||
foreach ($values as $opt => $value)
|
||||
{
|
||||
if ( ! in_array($opt, $options))
|
||||
if ( ! in_array($opt, $options, TRUE))
|
||||
{
|
||||
// Set the given value
|
||||
unset($values[$opt]);
|
||||
|
@@ -183,6 +183,15 @@ class Kohana_ORM extends Model implements serializable {
|
||||
*/
|
||||
protected $_table_names_plural = TRUE;
|
||||
|
||||
// Suppress ORMs inclusion of <table_name>.*
|
||||
protected $_disable_wild_select = FALSE;
|
||||
|
||||
// Suppress ORMs inclusion of <table_name>. to column joins
|
||||
protected $_disable_join_table_name = FALSE;
|
||||
|
||||
// Suppress ORMs use of limit
|
||||
protected $_disable_limit = FALSE;
|
||||
|
||||
/**
|
||||
* Model configuration, reload on wakeup?
|
||||
* @var bool
|
||||
@@ -268,7 +277,7 @@ class Kohana_ORM extends Model implements serializable {
|
||||
else
|
||||
{
|
||||
// Passing the primary key
|
||||
$this->where($this->_object_name.'.'.$this->_primary_key, '=', $id)->find();
|
||||
$this->where(($this->_disable_join_table_name ? '' : $this->_object_name.'.').$this->_primary_key, '=', $id)->find();
|
||||
}
|
||||
}
|
||||
elseif ( ! empty($this->_cast_data))
|
||||
@@ -351,6 +360,7 @@ class Kohana_ORM extends Model implements serializable {
|
||||
}
|
||||
|
||||
$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
|
||||
$defaults['far_key'] = Inflector::singular($alias).$this->_foreign_key_suffix;
|
||||
|
||||
$init['_has_one'][$alias] = array_merge($defaults, $details);
|
||||
}
|
||||
@@ -359,7 +369,7 @@ class Kohana_ORM extends Model implements serializable {
|
||||
{
|
||||
if ( ! isset($details['model']))
|
||||
{
|
||||
$defaults['model'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', Inflector::singular($alias))));
|
||||
$defaults['model'] = str_replace(' ', '_', ucwords(str_replace('_', ' ', ($this->_model_names_plural ? Inflector::singular($alias) : $alias))));
|
||||
}
|
||||
|
||||
$defaults['foreign_key'] = $this->_object_name.$this->_foreign_key_suffix;
|
||||
@@ -626,7 +636,7 @@ class Kohana_ORM extends Model implements serializable {
|
||||
$model = $this->_related($column);
|
||||
|
||||
// Use this model's column and foreign model's primary key
|
||||
$col = $model->_object_name.'.'.$model->_primary_key;
|
||||
$col = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$model->_primary_key;
|
||||
$val = $this->_object[$this->_belongs_to[$column]['foreign_key']];
|
||||
|
||||
// Make sure we don't run WHERE "AUTO_INCREMENT column" = NULL queries. This would
|
||||
@@ -643,9 +653,23 @@ class Kohana_ORM extends Model implements serializable {
|
||||
{
|
||||
$model = $this->_related($column);
|
||||
|
||||
// Use this model's primary key value and foreign model's column
|
||||
$col = $model->_object_name.'.'.$this->_has_one[$column]['foreign_key'];
|
||||
$val = $this->pk();
|
||||
if (! is_array($this->_has_one[$column]['foreign_key']))
|
||||
{
|
||||
// Use this model's primary key value and foreign model's column
|
||||
$col = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$this->_has_one[$column]['foreign_key'];
|
||||
$val = $this->_object[$this->_has_one[$column]['far_key']];
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($this->_has_one[$column]['foreign_key'] as $fk)
|
||||
{
|
||||
// Simple has_many relationship, search where target model's foreign key is this model's primary key
|
||||
$col = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$fk;
|
||||
$val = $this->_object[$fk];
|
||||
|
||||
$model = $model->where($col, '=', $val);
|
||||
}
|
||||
}
|
||||
|
||||
$model->where($col, '=', $val)->find();
|
||||
|
||||
@@ -655,29 +679,53 @@ class Kohana_ORM extends Model implements serializable {
|
||||
{
|
||||
$model = ORM::factory($this->_has_many[$column]['model']);
|
||||
|
||||
if (isset($this->_has_many[$column]['through']))
|
||||
if (! is_array($this->_has_many[$column]['foreign_key']))
|
||||
{
|
||||
// Grab has_many "through" relationship table
|
||||
$through = $this->_has_many[$column]['through'];
|
||||
if (isset($this->_has_many[$column]['through']))
|
||||
{
|
||||
// Grab has_many "through" relationship table
|
||||
$through = $this->_has_many[$column]['through'];
|
||||
|
||||
// Join on through model's target foreign key (far_key) and target model's primary key
|
||||
$join_col1 = $through.'.'.$this->_has_many[$column]['far_key'];
|
||||
$join_col2 = $model->_object_name.'.'.$model->_primary_key;
|
||||
// Join on through model's target foreign key (far_key) and target model's primary key
|
||||
$join_col1 = ($this->_disable_join_table_name ? '' : $through.'.').$this->_has_many[$column]['far_key'];
|
||||
$join_col2 = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$model->_primary_key;
|
||||
|
||||
$model->join($through)->on($join_col1, '=', $join_col2);
|
||||
$model->join($through)->on($join_col1, '=', $join_col2)
|
||||
->on(($this->_disable_join_table_name ? '' : $through.'.').'site_id', '=', ($this->_disable_join_table_name ? '' : $model->_object_name.'.').'site_id');
|
||||
|
||||
// Through table's source foreign key (foreign_key) should be this model's primary key
|
||||
$col = $through.'.'.$this->_has_many[$column]['foreign_key'];
|
||||
$val = $this->pk();
|
||||
// Through table's source foreign key (foreign_key) should be this model's primary key
|
||||
$col = ($this->_disable_join_table_name ? '' : $through.'.').$this->_has_many[$column]['foreign_key'];
|
||||
$val = $this->pk();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Simple has_many relationship, search where target model's foreign key is this model's primary key
|
||||
$col = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$this->_has_many[$column]['foreign_key'];
|
||||
$val = $this->_object[$this->_has_many[$column]['far_key']];
|
||||
}
|
||||
|
||||
return $model->where($col, '=', $val);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Simple has_many relationship, search where target model's foreign key is this model's primary key
|
||||
$col = $model->_object_name.'.'.$this->_has_many[$column]['foreign_key'];
|
||||
$val = $this->pk();
|
||||
}
|
||||
foreach ($this->_has_many[$column]['foreign_key'] as $mk => $fk)
|
||||
{
|
||||
if (isset($this->_has_many[$column]['through']))
|
||||
{
|
||||
throw new Kohana_Exception('This code hasnt been written yet!');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Simple has_many relationship, search where target model's foreign key is this model's primary key
|
||||
$col = ($this->_disable_join_table_name ? '' : $model->_object_name.'.').$fk;
|
||||
$val = $this->_object[$mk];
|
||||
}
|
||||
|
||||
return $model->where($col, '=', $val);
|
||||
$model = $model->where($col, '=', $val);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1031,14 +1079,15 @@ class Kohana_ORM extends Model implements serializable {
|
||||
{
|
||||
$this->_db_builder->from(array($this->_table_name, $this->_object_name));
|
||||
|
||||
if ($multiple === FALSE)
|
||||
if ($multiple === FALSE AND ! $this->_disable_limit)
|
||||
{
|
||||
// Only fetch 1 record
|
||||
$this->_db_builder->limit(1);
|
||||
}
|
||||
|
||||
// Select all columns by default
|
||||
$this->_db_builder->select_array($this->_build_select());
|
||||
if (! $this->_disable_wild_select)
|
||||
$this->_db_builder->select_array($this->_build_select());
|
||||
|
||||
if ( ! isset($this->_db_applied['order_by']) AND ! empty($this->_sorting))
|
||||
{
|
||||
@@ -1047,7 +1096,7 @@ class Kohana_ORM extends Model implements serializable {
|
||||
if (strpos($column, '.') === FALSE)
|
||||
{
|
||||
// Sorting column for use in JOINs
|
||||
$column = $this->_object_name.'.'.$column;
|
||||
$column = ($this->_disable_join_table_name ? '' : $this->_object_name.'.').$column;
|
||||
}
|
||||
|
||||
$this->_db_builder->order_by($column, $direction);
|
||||
@@ -1165,9 +1214,10 @@ class Kohana_ORM extends Model implements serializable {
|
||||
* @param string $value The value to filter
|
||||
* @return string
|
||||
*/
|
||||
protected function run_filter($field, $value)
|
||||
protected function run_filter($field, $value, $filters=NULL)
|
||||
{
|
||||
$filters = $this->filters();
|
||||
if (is_null($filters))
|
||||
$filters = $this->filters();
|
||||
|
||||
// Get the filters for this column
|
||||
$wildcards = empty($filters[TRUE]) ? array() : $filters[TRUE];
|
||||
|
@@ -15,13 +15,15 @@ $application = 'application';
|
||||
*/
|
||||
$modules = 'modules';
|
||||
|
||||
$sysmodules = 'includes/kohana/modules';
|
||||
|
||||
/**
|
||||
* The directory in which the Kohana resources are located. The system
|
||||
* directory must contain the classes/kohana.php file.
|
||||
*
|
||||
* @link http://kohanaframework.org/guide/about.install#system
|
||||
*/
|
||||
$system = 'system';
|
||||
$system = 'includes/kohana/system';
|
||||
|
||||
/**
|
||||
* The default extension of resource files. If you change this, all resources
|
||||
@@ -74,6 +76,12 @@ if ( ! is_dir($modules) AND is_dir(DOCROOT.$modules))
|
||||
$modules = DOCROOT.$modules;
|
||||
}
|
||||
|
||||
// Make the system relative to the docroot, for symlink'd index.php
|
||||
if ( ! is_dir($sysmodules) AND is_dir(DOCROOT.$sysmodules))
|
||||
{
|
||||
$sysmodules = DOCROOT.$sysmodules;
|
||||
}
|
||||
|
||||
// Make the system relative to the docroot
|
||||
if ( ! is_dir($system) AND is_dir(DOCROOT.$system))
|
||||
{
|
||||
@@ -83,10 +91,11 @@ if ( ! is_dir($system) AND is_dir(DOCROOT.$system))
|
||||
// Define the absolute paths for configured directories
|
||||
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
|
||||
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
|
||||
define('SMDPATH', realpath($sysmodules).DIRECTORY_SEPARATOR);
|
||||
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);
|
||||
|
||||
// Clean up the configuration vars
|
||||
unset($application, $modules, $system);
|
||||
unset($application, $modules, $sysmodules, $system);
|
||||
|
||||
/**
|
||||
* Define the start time of the application, used for profiling.
|
||||
@@ -104,6 +113,8 @@ if ( ! defined('KOHANA_START_MEMORY'))
|
||||
define('KOHANA_START_MEMORY', memory_get_usage());
|
||||
}
|
||||
|
||||
define('PHPUNITTEST','192.168.242.3');
|
||||
|
||||
// Bootstrap the application
|
||||
require APPPATH.'bootstrap'.EXT;
|
||||
|
||||
@@ -122,4 +133,4 @@ if (($ob_len = ob_get_length()) !== FALSE)
|
||||
}
|
||||
|
||||
// Enable the unittest module
|
||||
Kohana::modules(Kohana::modules() + array('unittest' => MODPATH.'unittest'));
|
||||
Kohana::modules(Kohana::modules() + array('unittest' => SMDPATH.'unittest'));
|
||||
|
Reference in New Issue
Block a user