<?php
/**
* Model controller
*
* @author Mark Nielsen
* @package block_helloworld
*/
defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
/**
* Default screen
*
* Demo of mr_model_record_abstract
* Demo of mr_repository_abstract
*/
public function view_action() {
global $CFG;
require_once($CFG->dirroot.'/blocks/helloworld/repository/helloworld.php');
$output = '';
#### DEMO CODE ####
// Our repository
$repo = new block_helloworld_repository_helloworld();
// Create a new instance of our model, set some properties
$bat = new block_helloworld_model_helloworld();
$bat->set_name('Fred')->set_foo('foo')->set_bar('bar');
// Save it, repository figures out its an insert based on id property
$repo->save($bat);
$output .= $this->helper->dump($bat, '$bat after insert (id is now set for us)', true);
// ...later we can get $bat
$model = $repo->get(array('id' => $bat->get_id()));
$output .= $this->helper->dump($model, 'Result of $repo->get(...)', true);
// Because of the @method in our repository class's PHPDoc,
// our ID can auto-complete on our $model, try it out!
$name = $model->get_name();
$output .= $this->helper->dump($name, 'Result of $model->get_name()', true);
// Now we can delete Fred!
$repo->delete($model);
$output .= $this->helper->dump($model, '$model after delete (id is now set to null)', true);
// Let's try iterating over a mr_repository_recordset!
// Make some records...
$repo->save(new block_helloworld_model_helloworld(array('name' => 'Tom')))
->save(new block_helloworld_model_helloworld(array('name' => 'Martin')))
->save(new block_helloworld_model_helloworld(array('name' => 'Kris')));
// Our repository mapper can return a special record set, mr_repository_recordset, that returns
// instances of our models when we iterate over it
$rs = $repo->get_recordset();
foreach ($rs as $instance) {
// This PHPDoc tells our IDE that $instance is an instance of block_helloworld_model_helloworld
/** @var $instance block_helloworld_model_helloworld */
$instance->get_name(); // Try it out!
$output .= $this->helper->dump($instance, '$instance dump in foreach loop', true);
$repo->delete($instance);
}
$rs->close(); // Don't forget to close, just like usual!
#### DEMO CODE ####
return $this->output->heading('Demo of mr_model_record_abstract and mr_repository_abstract').
$this->helper->highlight(__CLASS__, __FUNCTION__, true).
$this->output->box($output, 'generalbox boxaligncenter boxwidthnormal');
}
}