Completed
Push — namespace-model ( 9b3f38...c67c40 )
by Sam
16:21 queued 05:15
created

DataModel::inst()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 7
rs 9.4285
cc 2
eloc 4
nc 2
nop 0
1
<?php
2
3
namespace SilverStripe\Model;
4
5
/**
6
 * Representation of a DataModel - a collection of DataLists for each different
7
 * data type.
8
 *
9
 * Usage:
10
 * <code>
11
 * $model = new DataModel;
12
 * $mainMenu = $model->SiteTree->where('"ParentID" = 0 AND "ShowInMenus" = 1');
13
 * </code>
14
 *
15
 * @package framework
16
 * @subpackage model
17
 */
18
class DataModel {
19
20
	/**
21
	 * @var DataModel
22
	 */
23
	protected static $inst;
24
25
	/**
26
	 * @var array $customDataLists
27
	 */
28
	protected $customDataLists = array();
29
30
	/**
31
	 * Get the global DataModel.
32
	 *
33
	 * @return DataModel
34
	 */
35
	public static function inst() {
36
		if(!self::$inst) {
37
			self::$inst = new self;
38
		}
39
40
		return self::$inst;
41
	}
42
43
	/**
44
	 * Set the global DataModel, used when data is requested from static
45
	 * methods.
46
	 *
47
	 * @return DataModel
48
	 */
49
	public static function set_inst(DataModel $inst) {
50
		self::$inst = $inst;
51
	}
52
53
	/**
54
	 * @param string
55
	 *
56
	 * @return DataList
57
	 */
58
	public function __get($class) {
59
		if(isset($this->customDataLists[$class])) {
60
			return clone $this->customDataLists[$class];
61
		} else {
62
			$list = DataList::create($class);
63
			$list->setDataModel($this);
64
65
			return $list;
66
		}
67
	}
68
69
	/**
70
	 * @param string
71
	 * @param DataList
72
	 */
73
	public function __set($class, $item) {
74
		$item = clone $item;
75
		$item->setDataModel($this);
76
		$this->customDataLists[$class] = $item;
77
	}
78
79
}
80