Example #1
0
function getContactosJustNamesByClientId($clientid)
{
    $rows = R::getAll("select c.id, c.clientes_id, c.nombre from contactos c where c.clientes_id=?", array($clientid));
    $contactos = R::convertToBeans('contactos', $rows);
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($contactos));
}
Example #2
0
function getSegmentosJustNames($clientid)
{
    $app = \Slim\Slim::getInstance();
    $rows = R::getAll("select s.id, s.clientes_id, s.nombre from segmento s where s.clientes_id=?", array($clientid));
    $segmentos = R::convertToBeans('segmentos', $rows);
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($segmentos));
}
Example #3
0
// handle GET requests for /vehiculos
$app->get('/vehiculos', function () use($app) {
    // query database for all vehiculos
    $vehiculos = R::findAll('vehiculos', 'ORDER BY economico');
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    foreach ($vehiculos as $vehiculo) {
        $vehiculo->tipo_vehiculos = $vehiculo->tipo_vehiculos;
    }
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($vehiculos));
});
$app->get('/vehiculos/justnames', function () use($app) {
    $rows = R::getAll("select v.id, concat(v.economico,'  :  ',t.descripcion ) as economico  from vehiculos v, tipo_vehiculos t\nwhere v.tipo_vehiculos_id=t.id");
    $vehiculos = R::convertToBeans('vehiculos', $rows);
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($vehiculos));
});
// handle GET requests for client's ID
$app->get('/vehiculos/:id', function ($id) use($app) {
    $vehiculo = R::findOne('vehiculos', 'id=?', array($id));
    try {
        if ($vehiculo) {
            $app->response()->header('Content-Type', 'application/json');
            echo json_encode(R::exportAll($vehiculo)[0]);
        } else {
            throw new ResourceNotFoundException();
        }
Example #4
0
});
$app->get('/schoolContract', function () use($app) {
    $sql = "select agent.oname as oname, contract.price as price, school.* from contract" . " join agent on agent.aid = contract.aid join school on school.id = contract.sid";
    try {
        $result = R::getAll($sql);
        $data = R::convertToBeans('contract', $result);
        success(R::exportAll($data));
    } catch (RedBeanPHP\RedException\SQL $e) {
        fail($e);
    }
});
$app->get('/student/:id', function ($id) use($app) {
    $sql = "select school.name as sname, user.* from school join user on user.sid='" . $id . "'";
    try {
        $result = R::getAll($sql);
        $data = R::convertToBeans('user', $result);
        success(R::exportAll($data));
    } catch (RedBeanPHP\RedException\SQL $e) {
        fail($e);
    }
});
$app->get('/', function () use($app) {
    header("Location: intro.php");
    die;
});
function setUnique($bean, $arr)
{
    $bean->setMeta("buildcommand.unique", array($arr));
}
function safeStore($obj)
{
 public function manageView()
 {
     /*
      * Loadings libraries and helpers
      */
     $this->load->library(array('rb'));
     $this->load->helper(array('form'));
     /*
      * User is logged?
      */
     if (!parent::_isLogged()) {
         redirect('dashboard');
     }
     /*
      * General Information
      */
     $openRequestsQry = '
         SELECT r.*
         FROM status AS s
         JOIN request AS r 
         ON r.id = s.request_id 
         WHERE 
             s.current = "Y" 
             AND ( s.type = "waiting-open" 
                 OR s.type = "request_created" 
                 OR s.type = "request_moved" 
                 OR s.type = "request_extended" 
             ) 
     ';
     $openRequests = R::getAll($openRequestsQry);
     $openRequests = R::convertToBeans('request', $openRequests);
     $deadlineRequestsQry = '
         SELECT r.*
         FROM status AS s 
         JOIN request AS r 
         ON r.id = s.request_id 
         WHERE 
             ( 
                 NOW() > DATE_ADD( r.created_at, INTERVAL 20 DAY )
                 AND
                 ( SELECT COUNT(*) FROM status AS ss WHERE request_id = r.id AND type = "request_extended" ) <= 0
             )
             OR
             (
                 NOW() > DATE_ADD( r.created_at, INTERVAL 30 DAY )
                 AND
                 ( SELECT COUNT(*) FROM status AS ss WHERE request_id = r.id AND type = "request_extended" ) > 0
             )
     ';
     $deadlineRequests = R::getAll($deadlineRequestsQry);
     $deadlineRequests = R::convertToBeans('request', $deadlineRequests);
     $repliedRequestsQry = '
         SELECT r.*
         FROM status AS s
         JOIN request AS r 
         ON r.id = s.request_id 
         WHERE 
             s.current = "Y" 
             AND s.type = "request_replied" 
     ';
     $repliedRequests = R::getAll($repliedRequestsQry);
     $repliedRequests = R::convertToBeans('request', $repliedRequests);
     $data = array('ics' => R::find('ic', ' active="yes" '), 'openRequests' => count($openRequests), 'deadlineRequests' => count($deadlineRequests), 'replyRequests' => count($repliedRequests), 'totalRequests' => R::count('request'));
     /*
      * Loading views
      */
     $this->load->view('dashboard/template/header');
     $this->load->view('dashboard/template/menu', array('menu' => parent::_getMenu(parent::_getIc()->id), 'ics' => parent::_getIcs(), 'ic' => parent::_getIc()));
     $this->load->view('dashboard/manage', $data);
     $this->load->view('dashboard/template/footer');
 }
Example #6
0
 static function getLessonById($id)
 {
     $user = R::duplicate($_SESSION['user']);
     $data = R::load('lesson', $id);
     $userInfo = R::getAll('SELECT * FROM information_user WHERE user_id = ?', [$_SESSION['user']->id]);
     $userInfo = R::convertToBeans('information_user', $userInfo);
     if (!empty($data->education_id) && $_SESSION['user']->status == 'student') {
         $education = R::load('education', $data->education_id);
         if ($education->number != 1) {
             $numb = $education->number - 1;
             //получаем id предметов, которые предшевствуют текущему
             $prev_education = R::findAll('education', ' WHERE number =? and information_id=?', [$numb, $education->information_id]);
             foreach ($prev_education as $item) {
                 //проверяем, содержит ли массив $userInfo id приведущего модуля
                 foreach ($userInfo as $it) {
                     if ($item->id == $it->education_id && is_null($it->status)) {
                         return false;
                     }
                 }
             }
         }
     }
     if ($data->number != 1 && $_SESSION['user']->status == 'student') {
         $numb = $data->number - 1;
         //            echo $numb;
         if (!empty($data->education_id)) {
             $query = ' WHERE number =? and education_id=?';
             $dataArray = [$numb, $data->education_id];
         } else {
             $query = ' WHERE number =? and information_id=?';
             $dataArray = [$numb, $data->information_id];
         }
         $lesson_parent = R::findAll('lesson', $query, $dataArray);
         //            print_r($lesson_parent);
         $lesson_flag = false;
         foreach ($lesson_parent as $item) {
             //проверяем, содержит ли массив $userInfo id приведущего модуля
             foreach ($userInfo as $it) {
                 if ($item->id == $it->lesson_id && !is_null($it->status)) {
                     $lesson_flag = true;
                 }
             }
             if ($lesson_flag == false) {
                 return false;
             }
         }
     }
     $prev = '';
     $next = '';
     if (!empty($data->education_id)) {
         $next_lesson = array_values(R::find('lesson', "where number = ? and education_id=? and block=1", [$data->number + 1, $data->education_id]));
     } else {
         $next_lesson = array_values(R::find('lesson', "where number = ? and information_id=? and block=1", [$data->number + 1, $data->information_id]));
     }
     if ($data->number == 1) {
         $help_class_prev = 'disabled';
         //            $prev = 1;
     } else {
         $help_class_prev = '';
         if (!empty($data->education_id)) {
             $prev = array_values(R::find('lesson', "where number = ? and education_id=? and block=1", [$data->number - 1, $data->education_id]))[0]->id;
         } else {
             $prev = array_values(R::find('lesson', "where number = ? and information_id=? and block=1", [$data->number - 1, $data->information_id]))[0]->id;
         }
         //            print_r($prev);
     }
     if (!empty($next_lesson)) {
         $help_class_next = '';
         $next = $next_lesson[0]->id;
     } else {
         $help_class_next = 'disabled';
         $next = $data->id;
     }
     $out = '';
     $out = "<h1>" . $data->name . "</h1><div class='col-sm-12'>" . $data->text . "</div>";
     $out .= "\r\n<div class='col-sm-4'></div>\r\n<div class='col-sm-2'><a role='button' href='?ctrl=cabinet&action=GetLesson&id=" . $prev . "' class='btn " . $help_class_prev . " btn-success btn-block'><span class=\"glyphicon glyphicon-arrow-left\" aria-hidden=\"true\"></span>Назад</a></div>\r\n<div class='col-sm-2'><a role='button' href='?ctrl=cabinet&action=GetLesson&id=" . $next . "' class='btn " . $help_class_next . " btn-success btn-block'>Далее<span class=\"glyphicon glyphicon-arrow-right\" aria-hidden=\"true\"></span></a></div>\r\n<div class='col-sm-4'></div>\r\n";
     return $out;
 }
Example #7
0
    } catch (Exception $e) {
        $app->response()->status(400);
        $app->response()->header('X-Status-Reason', $e->getMessage());
    }
});
$app->get('/subsegmentos/justnames/', function () use($app) {
    $rows = R::getAll("select s.id, s.segmento_id, s.nombre from subsegmento s");
    $subsegmentos = R::convertToBeans('subsegmentos', $rows);
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($subsegmentos));
});
$app->get('/subsegmentos/justnames/:segmentid', function ($segmentid) use($app) {
    $rows = R::getAll("select s.id, s.segmento_id, s.nombre from subsegmento s where s.segmento_id=?", array($segmentid));
    $subsegmentos = R::convertToBeans('subsegmentos', $rows);
    // send response header for JSON content type
    $app->response()->header('Content-Type', 'application/json');
    // return JSON-encoded response body with query results
    echo json_encode(R::exportAll($subsegmentos));
});
$app->get('/subsegmentos/total/', function () use($app) {
    $total = R::dispense('total');
    $total->total = R::count('subsegmento');
    $app->response()->header('Content-Type: text/html; charset=utf-8');
    $app->response()->header('Content-Type', 'application/json');
    //TODO: Buscar un modo elegante de hacer lo siguiente:
    echo json_encode(R::exportAll($total)[0]);
});
$app->get('/subsegmentos/page/:pagenumber', function ($pagenumber) use($app) {
    // query database for all segmentos
Example #8
0
 public function convertToBeans($sql)
 {
     $rows = R::getAll($sql);
     $items = R::convertToBeans($this->table, $rows);
     return $items;
 }
Example #9
0
    $json = $app->request->getBody();
    $obj = json_decode($json);
    $aid = $obj->{'aid'};
    $fee = $obj->{'fee'};
    $sql = "UPDATE agent SET fee = '{$fee}' WHERE aid = '{$aid}'";
    try {
        R::exec($sql);
    } catch (RedBeanPHP\RedException\SQL $e) {
        fail($e);
    }
});
$app->get('/schoolContract', function () use($app) {
    $sql = "select agent.oname as oname, contract.price as price, school.* from contract" . " join agent on agent.aid = contract.aid join school on school.id = contract.sid";
    try {
        $result = R::getAll($sql);
        $data = R::convertToBeans('contract', $result);
        success(R::exportAll($data));
    } catch (RedBeanPHP\RedException\SQL $e) {
        fail($e);
    }
});
$app->get('/student/:id', function () use($app) {
    //  R::find('user',)
});
$app->get('/', function () use($app) {
    $center = 'style="display:block; height:100%; margin-left:auto; margin-right:auto"';
    echo "<a href='login.php'><img src=intro/toonysam.jpg {$center}></a>";
});
function setUnique($bean, $arr)
{
    $bean->setMeta("buildcommand.unique", array($arr));
 public function answeredView($id = NULL)
 {
     /*
      * Loading libraries
      */
     $this->load->library(array('rb', 'session'));
     $this->load->helper(array('form'));
     /*
      * User is logged?
      */
     if (!parent::_isLogged()) {
         redirect('dashboard');
         exit;
     }
     /*
      * Verify if user has autority to view the ic's
      */
     if (!parent::_hasAuth('view_request', $this->session->userdata('user_ic'))) {
         echo "Você não tem permissão para realizar este procedimento.";
         exit;
     }
     /* 
      * If $id is NULL, then load all answered requests. Otherwise, show only the specified request
      */
     if ($id == NULL) {
         /* 
          * Verify if the user is logged in MASTER IC or not. If it's the MASTER IC
          * then it shows all the Requests, otherwise, only show Requests from actual IC.
          */
         $requests = null;
         $isMasterIc = R::count('ic', 'id=? AND master="yes" ', array($this->session->userdata('user_ic')));
         if ($isMasterIc) {
             $rows = R::getAll('
                 SELECT r.* FROM request AS r 
                 JOIN status AS s ON s.request_id = r.id
                 WHERE s.type = "request_replied" AND s.current = "Y"
             ');
             $requests = R::convertToBeans('request', $rows);
         } else {
             $rows = R::getAll('
                 SELECT r.* FROM request AS r 
                 JOIN status AS s ON s.request_id = r.id
                 WHERE s.type = "request_replied" AND s.current = "Y" AND s.ic_id = ?
                 ', array($this->session->userdata('user_ic')));
             $requests = R::convertToBeans('request', $rows);
         }
         /*
          * Loading views
          */
         $this->load->view('dashboard/template/header');
         $this->load->view('dashboard/template/menu', array('menu' => parent::_getMenu(parent::_getIc()->id), 'ics' => parent::_getIcs(), 'ic' => parent::_getIc()));
         $this->load->view('dashboard/request/answered', array('requests' => $requests));
         $this->load->view('dashboard/template/footer');
     } else {
         /* 
          * Loading the request
          */
         $request = R::findOne('request', ' id = ? ', array($id));
         /* 
          * Request exists? 
          */
         if ($request == NULL) {
             $this->session->set_flashdata('success', 'A solicitação não existe.');
             redirect('dashboard/request/answered');
         }
         /* 
          * Getting current status of request
          */
         $status = R::findOne('status', 'request_id = ? AND current = "Y" ', array($request->id));
         /*
          * Can user access the request?
          */
         if (!self::_canAcessRequest($request)) {
             $this->session->set_flashdata('success', 'Você não tem autorização para acessar esta solicitação.');
             redirect('dashboard/request/answered');
         }
         /*
          * Loading views
          */
         $this->load->view('dashboard/template/header');
         $this->load->view('dashboard/template/menu', array('menu' => parent::_getMenu(parent::_getIc()->id), 'ics' => parent::_getIcs(), 'ic' => parent::_getIc()));
         $this->load->view('dashboard/request/answered-select', array('status' => $status, 'request' => $request));
         $this->load->view('dashboard/template/footer');
     }
 }
Example #11
0
$book->rating = 3;
$id2 = R::store($book);
$book1 = R::load("book", $id1);
$book2 = R::load("book", $id2);
asrt($book1->rating, '2');
asrt($book2->rating, '3');
$books = R::batch("book", array($id1, $id2));
R::swap($books, "rating");
$book1 = R::load("book", $id1);
$book2 = R::load("book", $id2);
asrt($book1->rating, '3');
asrt($book2->rating, '2');
testpack("Test R::convertToBeans");
$SQL = "SELECT '1' as id, a.name AS name, b.title AS title, '123' as rating FROM author AS a LEFT JOIN book as b ON b.id = ?  WHERE a.id = ? ";
$rows = R::$adapter->get($SQL, array($id2, $aid));
$beans = R::convertToBeans("something", $rows);
$bean = reset($beans);
asrt($bean->getMeta("type"), "something");
asrt($bean->name, "Bobby");
asrt($bean->title, "secondbook");
asrt($bean->rating, "123");
testpack("Ext Assoc with facade and findRelated");
//R::setup("sqlite:/Users/prive/blaataap.db");
R::exec("DROP TABLE IF EXISTS performer");
R::exec("DROP TABLE IF EXISTS cd_track");
R::exec("DROP TABLE IF EXISTS track");
R::exec("DROP TABLE IF EXISTS cd");
$cd = R::dispense("cd");
$cd->title = "Midnight Jazzfest";
R::store($cd);
$track = R::dispense("track");
function checktoomany($cron = 1, $userid = 0)
{
    global $watches;
    $abusers = "";
    $found = 0;
    if ($cron) {
        $rows = R::getAll('SELECT * FROM users LEFT JOIN limits ON users.id=limits.userid');
        $users = R::convertToBeans('users', $rows);
        if (!empty($users)) {
            foreach ($users as $user) {
                $numberofrentals = R::count('history', 'userid=:userid AND action=:action AND time>:time', [':userid' => $user->id, ':action' => 'RENT', 'time' => date("Y-m-d H:i:s", time() - $watches["timetoomany"] * 3600)]);
                if ($numberofrentals >= $userlimit + $watches["numbertoomany"]) {
                    $abusers .= " " . $numberofrentals . " (" . _('limit') . " " . $user->userlimit . ") " . _('by') . " " . $user->username . ",";
                    $found = 1;
                }
            }
        }
    } else {
        $rows = R::getAll('SELECT * FROM users LEFT JOIN limits ON users.id=limits.userid WHERE users.id=?', [$userid]);
        $users = R::convertToBeans('users', $rows);
        if (!empty($users)) {
            foreach ($users as $user) {
                $numberofrentals = R::count('history', 'userid=:userid AND action=:action AND time>:time', [':userid' => $user->id, ':action' => 'RENT', 'time' => date("Y-m-d H:i:s", time() - $watches["timetoomany"] * 3600)]);
                if ($result->num_rows >= $userlimit + $watches["numbertoomany"]) {
                    $abusers .= " " . $numberofrentals . " (" . _('limit') . " " . $user->userlimit . ") " . _('by') . " " . $user->username . ",";
                    $found = 1;
                }
            }
        }
    }
    if ($found) {
        $abusers = substr($abusers, 0, strlen($abusers) - 1);
        notifyAdmins(_('Over limit in') . " " . $watches["timetoomany"] . " " . _('hs') . ":" . $abusers);
    }
}
 protected function actionListConversations()
 {
     // create the user object
     $this->user = $this->setUser($this->request['user']);
     // halt on fail
     if (!$this->user) {
         return;
     }
     // get messages sent from the user
     // one latest message for each receipient
     $rows = R::getAll('
         SELECT *
         FROM message
         RIGHT JOIN (
             SELECT max(creation_time) as creation_time
             FROM message
             WHERE user_id = :user_id
             GROUP BY receipient_id
         ) AS latest ON message.creation_time = latest.creation_time
         WHERE user_id = :user_id', array(':user_id' => $this->user->id));
     // convert array into bean objects
     $messages = R::convertToBeans('message', $rows);
     // create conversations objects based on messages
     $conversations = array();
     foreach ($messages as $id => $message) {
         $conversations[$id] = new Conversation($message);
     }
     // add them to the data array for output
     $this->data = $conversations;
 }
Example #14
0
 /**
  * Basic tests through Facade.
  * 
  * @return void
  */
 public function testBasicThroughFacade()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     $a = new RedBean_AssociationManager($toolbox);
     asrt(R::$redbean instanceof RedBean_OODB, TRUE);
     asrt(R::$toolbox instanceof RedBean_Toolbox, TRUE);
     asrt(R::$adapter instanceof RedBean_Adapter, TRUE);
     asrt(R::$writer instanceof RedBean_QueryWriter, TRUE);
     $book = R::dispense("book");
     asrt($book instanceof RedBean_OODBBean, TRUE);
     $book->title = "a nice book";
     $id = R::store($book);
     asrt($id > 0, TRUE);
     $book = R::load("book", (int) $id);
     asrt($book->title, "a nice book");
     $author = R::dispense("author");
     $author->name = "me";
     R::store($author);
     $book9 = R::dispense("book");
     $author9 = R::dispense("author");
     $author9->name = "mr Nine";
     $a9 = R::store($author9);
     $book9->author_id = $a9;
     $bk9 = R::store($book9);
     $book9 = R::load("book", $bk9);
     $author = R::load("author", $book9->author_id);
     asrt($author->name, "mr Nine");
     R::trash($author);
     R::trash($book9);
     pass();
     $book2 = R::dispense("book");
     $book2->title = "second";
     R::store($book2);
     R::associate($book, $book2);
     asrt(count(R::related($book, "book")), 1);
     $book3 = R::dispense("book");
     $book3->title = "third";
     R::store($book3);
     R::associate($book, $book3);
     asrt(count(R::related($book, "book")), 2);
     asrt(count(R::find("book")), 3);
     asrt(count(R::findAll("book")), 3);
     asrt(count(R::findAll("book", " WHERE ROWNUM <= 2")), 2);
     asrt(count(R::find("book", " id=id ")), 3);
     asrt(count(R::find("book", " title LIKE ?", array("third"))), 1);
     asrt(count(R::find("book", " title LIKE ?", array("%d%"))), 2);
     // Now with new SQL Helper argument
     asrt(count(R::find("book", R::$f->begin()->addSQL('title LIKE ? ')->put('third'))), 1);
     asrt(count(R::find("book", R::$f->begin()->addSQL('title LIKE ? ')->put('%d%'))), 2);
     asrt(count(R::find("book", R::$f->begin()->addSQL('title')->like(' ? ')->addSQL(' ORDER BY id ')->desc()->put('%d%'))), 2);
     //Find without where clause
     asrt(count(R::findAll('book', ' order by id')), 3);
     R::unassociate($book, $book2);
     asrt(count(R::related($book, "book")), 1);
     R::trash($book3);
     R::trash($book2);
     asrt(count(R::related($book, "book")), 0);
     asrt(count(R::getAll("SELECT * FROM book ")), 1);
     asrt(count(R::getCol("SELECT title FROM book ")), 1);
     asrt((int) R::getCell("SELECT 123 FROM DUAL "), 123);
     $book = R::dispense("book");
     $book->title = "not so original title";
     $author = R::dispense("author");
     $author->name = "Bobby";
     R::store($book);
     $aid = R::store($author);
     R::associate($book, $author);
     $author = R::findOne("author", " name = ? ", array("Bobby"));
     $books = R::related($author, "book");
     $book = reset($books);
     testpack("Test Swap function in R-facade");
     $book = R::dispense("book");
     $book->title = "firstbook";
     $book->rating = 2;
     $id1 = R::store($book);
     $book = R::dispense("book");
     $book->title = "secondbook";
     $book->rating = 3;
     $id2 = R::store($book);
     $book1 = R::load("book", $id1);
     $book2 = R::load("book", $id2);
     asrt($book1->rating, '2');
     asrt($book2->rating, '3');
     $books = R::batch("book", array($id1, $id2));
     R::swap($books, "rating");
     $book1 = R::load("book", $id1);
     $book2 = R::load("book", $id2);
     asrt($book1->rating, '3');
     asrt($book2->rating, '2');
     testpack("Test R::convertToBeans");
     $SQL = "SELECT '1' as id, a.name AS name, b.title AS title, '123' as rating FROM author a LEFT JOIN book b ON b.id = ?  WHERE a.id = ? ";
     $rows = R::$adapter->get($SQL, array($id2, $aid));
     $beans = R::convertToBeans("something", $rows);
     $bean = reset($beans);
     asrt($bean->getMeta("type"), "something");
     asrt($bean->name, "Bobby");
     asrt($bean->title, "secondbook");
     asrt($bean->rating, "123");
     testpack("Ext Assoc with facade and findRelated");
     R::nuke();
     $cd = R::dispense("cd");
     $cd->title = "Midnight Jazzfest";
     R::store($cd);
     $track = R::dispense("track");
     $track->title = "Night in Tunesia";
     $track2 = R::dispense("track");
     $track2->title = "Stompin at one o clock";
     $track3 = R::dispense("track");
     $track3->title = "Nightlife";
     R::store($track);
     R::store($track2);
     R::store($track3);
     // Assoc ext with json
     R::associate($track, $cd, '{"order":1}');
     pass();
     // Width array
     R::associate($track2, $cd, array("order" => 2));
     pass();
     R::associate($track3, $cd, '{"order":3}');
     pass();
     $tracks = R::related($cd, "track", " title LIKE ? ", array("Night%"));
     asrt(count($tracks), 2);
     $track = array_pop($tracks);
     asrt(strpos($track->title, "Night") === 0, TRUE);
     $track = array_pop($tracks);
     asrt(strpos($track->title, "Night") === 0, TRUE);
     $track = R::dispense("track");
     $track->title = "test";
     R::associate($track, $cd, "this column should be named extra");
     asrt(R::getCell("SELECT count(*) FROM cd_track WHERE extra = 'this column should be named extra' "), "1");
     $composer = R::dispense("performer");
     $composer->name = "Miles Davis";
     R::store($composer);
 }