Completed
Push — namespace-model ( 16b22c...303e01 )
by Sam
09:19
created

DataModel::set_inst()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 1
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
19
class DataModel {
20
21
	/**
22
	 * @var DataModel
23
	 */
24
	protected static $inst;
25
26
	/**
27
	 * @var array $customDataLists
28
	 */
29
	protected $customDataLists = array();
30
31
	/**
32
	 * Get the global DataModel.
33
	 *
34
	 * @return DataModel
35
	 */
36
	public static function inst() {
37
		if(!self::$inst) {
38
			self::$inst = new self;
39
		}
40
41
		return self::$inst;
42
	}
43
44
	/**
45
	 * Set the global DataModel, used when data is requested from static
46
	 * methods.
47
	 *
48
	 * @return DataModel
49
	 */
50
	public static function set_inst(DataModel $inst) {
51
		self::$inst = $inst;
52
	}
53
54
	/**
55
	 * @param string
56
	 *
57
	 * @return DataList
58
	 */
59
	public function __get($class) {
60
		if(isset($this->customDataLists[$class])) {
61
			return clone $this->customDataLists[$class];
62
		} else {
63
			$list = DataList::create($class);
64
			$list->setDataModel($this);
65
66
			return $list;
67
		}
68
	}
69
70
	/**
71
	 * @param string
72
	 * @param DataList
73
	 */
74
	public function __set($class, $item) {
75
		$item = clone $item;
76
		$item->setDataModel($this);
77
		$this->customDataLists[$class] = $item;
78
	}
79
80
}
81