* - postListExtra - add extra column data on the results (like new messages etc.)
* -postListFilter($data, $authUser, $request) return $data - add extra data to an object
*
- * - toRooSingleArray() // single fetch, add data..
+ * - toRooSingleArray($authUser) // single fetch, add data..
* - toRooArray($request) /// toArray if you need to return different data.. for a list fetch.
*
*
* - beforeDelete() -- return false for fail and set DO->err;
- * - onUpdate($old, $request,$roo) - after update
+ * - onUpdate($old, $request,$roo) - after update // return value ignored
* - onInsert($request,$roo) - after insert
* - onUpload($roo)
* - setFromRoo($ar) - values from post (deal with dates etc.) - return true|error string.
* -- defaults to listing data. with args.
*
* !colname=.... => colname != ....
- * colname[0]=... colname[1]=... => colname IN (.....)
+ * colname[0]=... colname[1]=... => colname IN (.....) ** only supports main table at present..
*
* other opts:
* _post = simulate a post with debuggin on.
*
* csvTitles = return data as csv
*
- * sort = sort column
- * dir = sort direction
+ * sort = sort column (',' comma delimited)
+ * dir = sort direction ?? in future comma delimited...
* start = limit start
* limit = limit number
*
function get($tab)
{
// $this->jerr("Not authenticated", array('authFailure' => true));
- //DB_DataObject::debuglevel(1);
+ // DB_DataObject::debuglevel(1);
// debugging...
if (!empty($_GET['_post'])) {
// sorting..
// DB_DataObject::debugLevel(1);
- $sort = empty($_REQUEST['sort']) ? '' : $_REQUEST['sort'];
- $dir = (empty($_REQUEST['dir']) || strtoupper($_REQUEST['dir']) == 'ASC' ? 'ASC' : 'DESC');
-
- $sorted = false;
- if (method_exists($x, 'applySort')) {
- $sorted = $x->applySort($this->authUser, $sort, $dir, array_keys($this->cols));
- }
- if ($sorted === false) {
-
- $cols = $x->table();
- // echo '<PRE>';print_r(array($sort, $this->cols));
- // other sorts???
- // $otherSorts = array('person_id_name');
-
- if (strlen($sort) && isset($cols[$sort]) ) {
- $sort = $x->tableName() .'.'.$sort . ' ' . $dir ;
- $x->orderBy($sort );
- } else if (in_array($sort, array_keys($this->cols))) {
- $sort = $sort . ' ' . $dir ;
- $x->orderBy($sort );
- }// else other formatas?
- //if ( in_array($sort, $otherSorts)) {
- // $x->orderBy($sort . ' ' . $dir);
- ////}
- }
+ $this->applySort($x);
$this->jdata($ret,$total, $extra );
+ }
+ /**
+ * applySort
+ *
+ * apply REQUEST[sort] and [dir]
+ * sort may be an array of columsn..
+ *
+ * @arg DB_DataObject $x
+ *
+ */
+ function applySort($x)
+ {
+
+ // Db_DataObject::debugLevel(1);
+ $sort = empty($_REQUEST['sort']) ? '' : $_REQUEST['sort'];
+ $dir = (empty($_REQUEST['dir']) || strtoupper($_REQUEST['dir']) == 'ASC' ? 'ASC' : 'DESC');
+
+
+
+ $sorted = false;
+ if (method_exists($x, 'applySort')) {
+ $sorted = $x->applySort($this->authUser, $sort, $dir, array_keys($this->cols));
+ }
+ if ($sorted === false) {
+
+ $cols = $x->table();
+ $sort_ar = explode(',', $sort);
+ $sort_str = array();
+
+ foreach($sort_ar as $sort) {
+
+ if (strlen($sort) && isset($cols[$sort]) ) {
+ $sort_str[] = $x->tableName() .'.'.$sort . ' ' . $dir ;
+
+ } else if (in_array($sort, array_keys($this->cols))) {
+ $sort_str[] = $sort . ' ' . $dir ;
+ }
+ }
+
+ if ($sort_str) {
+ $x->orderBy(implode(', ', $sort_str ));
+ }
+ }
}
/**
* POST method Roo/TABLENAME.php
if (!empty($_REQUEST['_get'])) {
return $this->get($tab);
}
+
$_columns = !empty($_REQUEST['_columns']) ? explode(',', $_REQUEST['_columns']) : false;
$tab = str_replace('/', '',$tab); // basic protection??
if (empty($keys) ) {
$this->jerr('no key');
}
+
+ // delete should be here...
+ if (isset($_REQUEST['_delete'])) {
+ // do we really delete stuff!?!?!?
+ return $this->delete($x,$_REQUEST);
+ }
+
+
$old = false;
if (!empty($_REQUEST['_ids'])) {
}
$this->jok($this->update($x, $_REQUEST));
} else {
+
+ if (empty($_POST)) {
+ $this->jerr("No data recieved for inserting");
+ }
+
$this->jok($this->insert($x, $_REQUEST));
}
}
$r = DB_DataObject::factory($x->tableName());
- $r->id = $x->id;
+ $pk = $x->keys();
+ // let's assume it has a key!!!
+ $pk = $pk[0];
+ $r->$pk = $x->$pk;
$this->loadMap($r, $_columns);
$r->limit(1);
$r->find(true);
$rooar = method_exists($r, 'toRooArray');
//print_r(var_dump($rooar)); exit;
- return $rooar ? $r->toRooArray() : $r->toArray();
+ return $rooar ? $r->toRooArray($_REQUEST) : $r->toArray();
}
}
$r = DB_DataObject::factory($x->tableName());
- $r->id = $x->id;
+ $pk = $x->keys();
+ // let's assume it has a key!!!
+ $pk = $pk[0];
+ $r->$pk = $x->$pk;
$this->loadMap($r, $_columns);
$r->limit(1);
$r->find(true);
$rooar = method_exists($r, 'toRooArray');
//print_r(var_dump($rooar)); exit;
- return $rooar ? $r->toRooArray() : $r->toArray();
+ return $rooar ? $r->toRooArray($_REQUEST) : $r->toArray();
}
function delete($x, $req)
{
// do we really delete stuff!?!?!?
-
-
+ if (empty($req['_delete'])) {
+ $this->jerr("Delete Requested with no value");
+
+ }
// build a list of tables to queriy for dependant data..
$map = $x->links();
// collect tables
// echo '<PRE>';print_r($affects);exit;
- //DB_Dataobject::debugLevel(1);
+ //DB_Dataobject::debugLevel(1);
$clean = create_function('$v', 'return (int)$v;');
$bits = array_map($clean, explode(',', $req['_delete']));
// print_r($bits);exit;
+ $pk = $x->keys();
+ // let's assume it has a key!!!
+ $pk = $pk[0];
- $x->whereAdd('id IN ('. implode(',', $bits) .')');
- $x->find();
+ $x->whereAdd($pk .' IN ('. implode(',', $bits) .')');
+ if (!$x->find()) {
+ $this->jerr("Nothing found to delete");
+ }
$errs = array();
while ($x->fetch()) {
$xx = clone($x);
foreach($affects as $k=> $true) {
$ka = explode('.', $k);
$chk = DB_DataObject::factory($ka[0]);
- $chk->{$ka[1]} = $xx->id;
+ if (!is_a($chk,'DB_DataObject')) {
+ $this->jerr('Unable to load referenced table, check the links config: ' .$ka[0]);
+ }
+ $chk->{$ka[1]} = $xx->$pk;
if ($chk->count()) {
- $this->jerr('Delete Dependant records first');
+ $this->jerr('Delete Dependant records first ('. $ka[0]. ':' . $ka[1] .'='.$xx->$pk.')');
}
}
}
if (count($ar)) {
- $x->whereAddIn($key,$ar, $quote ? 'string' : 'int');
+ $x->whereAddIn($x->tableName(). '.'.$key,$ar, $quote ? 'string' : 'int');
}
continue;