Skip to content

Commit

Permalink
finished find('feed')
Browse files Browse the repository at this point in the history
  • Loading branch information
ceeram committed Jan 6, 2010
1 parent fea2096 commit 5289627
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 156 deletions.
98 changes: 0 additions & 98 deletions app_model.php
Expand Up @@ -24,104 +24,6 @@ class AppModel extends Model {
'Containable', 'Core.Lockable'
// 'Core.Logable' some wierd issues
);

function _findFeed(&$Model, $query) {
if ( !isset( $query['feed'] ) )
{
return $query;
}

$sql = 'SELECT ';
if ( isset( $query['setup'] ) )
{
$fields = array();

foreach( $query['setup'] as $name => $value )
{
$fields[] = "'$value' AS $name";
}

$sql .= implode( ', ', $fields );
}

if ( isset( $query['fields'] ) )
{
$_fields = array();

foreach( $query['fields'] as $field )
{
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}

$sql .= ', '.implode( ', ', $_fields );
}

$sql .= ' FROM '.$this->tablePrefix.$this->useTable;

if ( isset( $query['feed'] ) )
{
foreach( $query['feed'] as $key => $feed )
{
$sql .= ' UNION SELECT ';
if ( isset( $feed['setup'] ) )
{
$fields = array();

foreach( $feed['setup'] as $name => $value )
{
$fields[] = "'$value' AS $name";
}

$sql .= implode( ', ', $fields );
}

if ( isset( $feed['fields'] ) )
{
$_fields = array();

foreach( $feed['fields'] as $field )
{
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}

$sql .= ', '.implode( ', ', $_fields );
}

$__key = explode( '.', $key );
$__key[0] = strtolower( $__key[0] );
$__key[1] = strtolower( Inflector::pluralize( $__key[1] ) );

$sql .= ' FROM '.implode( '_', $__key );
}
}

if ( isset( $query['order'] ) )
{
$ordering = array();

foreach( $query['order'] as $key => $value )
{
$ordering[] = $key.' '.$value;
}

$sql .= ' ORDER BY '.implode( ', ', $ordering );
}

return $this->query( $sql );
}

function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
switch($conditions) {
case 'feed':
return $this->_findFeed($this, $fields);
break;

default:
return parent::find($conditions, $fields, $order, $recursive);
} // switch
}
}

?>
123 changes: 65 additions & 58 deletions infinitas/core/models/behaviors/feedable.php
Expand Up @@ -20,79 +20,86 @@
class FeedableBehavior extends ModelBehavior {

var $_defaults = array();

var $_results = null;
/**
* @param object $Model Model using the behavior
* @param array $settings Settings to override for model.
* @access public
* @return void
*/
function setup(&$Model, $config = null) {
$Model->_findMethods = array_merge($Model->_findMethods, array('feeds'=>true));
$Model->_findMethods = array_merge($Model->_findMethods, array('feed'=>true));
if (is_array($config)) {
$this->settings[$Model->alias] = array_merge($this->_defaults, $config);
$this->settings[$Model->alias] = array_merge($this->_defaults, $config);
} else {
$this->settings[$Model->alias] = $this->_defaults;
}
$Model->Behaviors->__methods = array_merge(
$Model->Behaviors->__methods,
array('_findFeeds' => array('_findFeeds', 'Feedable'))
array('_findFeed' => array('_findFeed', 'Feedable'))
);
}

function _findFeeds(&$Model, $state, $query, $results = array()) {
if ( !isset( $query['feed'] ) ) {
return $query;
}

$sql = 'SELECT ';
if ( isset( $query['setup'] ) ) {
$fields = array();
foreach( $query['setup'] as $name => $value ) {
$fields[] = "'$value' AS $name";
}
$sql .= implode( ', ', $fields );
}
if ( isset( $query['fields'] ) ) {
$_fields = array();
foreach( $query['fields'] as $field ) {
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}
$sql .= ', '.implode( ', ', $_fields );
}
$sql .= ' FROM '.$Model->tablePrefix.$Model->useTable;
if ( isset( $query['feed'] ) ) {
foreach( $query['feed'] as $key => $feed ) {
$sql .= ' UNION SELECT ';
if ( isset( $feed['setup'] ) ) {
$fields = array();
foreach( $feed['setup'] as $name => $value ) {
$fields[] = "'$value' AS $name";
}
$sql .= implode( ', ', $fields );
}
if ( isset( $feed['fields'] ) ) {
$_fields = array();
foreach( $feed['fields'] as $field ) {
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}
$sql .= ', '.implode( ', ', $_fields );
}
$__key = explode( '.', $key );
$__key[0] = strtolower( $__key[0] );
$__key[1] = strtolower( Inflector::pluralize( $__key[1] ) );
$sql .= ' FROM '.implode( '_', $__key );
}
}
if ( isset( $query['order'] ) ) {
$ordering = array();
foreach( $query['order'] as $key => $value ) {
$ordering[] = $key.' '.$value;
}
$sql .= ' ORDER BY '.implode( ', ', $ordering );
}
return $Model->query( $sql );
}
function _findFeed(&$Model, $state, $query, $results = array()) {
if($state == 'before') {
if ( !isset( $query['feed'] ) ) {
return $query;
}
$sql = 'SELECT ';
if ( isset( $query['setup'] ) ) {
$fields = array();
foreach( $query['setup'] as $name => $value ) {
$fields[] = "'$value' AS $name";
}
$sql .= implode( ', ', $fields );
}
if ( isset( $query['fields'] ) ) {
$_fields = array();
foreach( $query['fields'] as $field ) {
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}
$sql .= ', '.implode( ', ', $_fields );
}
$sql .= ' FROM '.$Model->tablePrefix.$Model->useTable;
if ( isset( $query['feed'] ) ) {
foreach( $query['feed'] as $key => $feed ) {
$sql .= ' UNION SELECT ';
if ( isset( $feed['setup'] ) ) {
$fields = array();
foreach( $feed['setup'] as $name => $value ) {
$fields[] = "'$value' AS $name";
}
$sql .= implode( ', ', $fields );
}
if ( isset( $feed['fields'] ) ) {
$_fields = array();
foreach( $feed['fields'] as $field ) {
$__fields = explode( '.', $field );
$_fields[] = $__fields[1];
}
$sql .= ', '.implode( ', ', $_fields );
}
$__key = explode( '.', $key );
$__key[0] = strtolower( $__key[0] );
$__key[1] = strtolower( Inflector::pluralize( $__key[1] ) );
$sql .= ' FROM '.implode( '_', $__key );
}
}
if ( isset( $query['order'] ) ) {
$ordering = array();
foreach( $query['order'] as $key => $value ) {
$ordering[] = $key.' '.$value;
}
$sql .= ' ORDER BY '.implode( ', ', $ordering );
}
$this->_results = $Model->query( $sql );
return $query;
} elseif ($state == 'after') {
return $this->_results;
}
return false;
}
}
?>

0 comments on commit 5289627

Please sign in to comment.