1: <?php
2:
3: namespace webfilesframework\core\datastore;
4:
5:
6: use webfilesframework\core\datasystem\file\format\MWebfile;
7: use webfilesframework\core\datasystem\file\format\MWebfileStream;
8:
9: 10: 11: 12: 13: 14:
15: class MCombinedDatastore extends MAbstractDatastore
16: {
17:
18: private $registeredDatastores = array();
19:
20: public function tryConnect()
21: {
22: return true;
23: }
24:
25: public function isReadOnly()
26: {
27: return true;
28: }
29:
30: public function getNextWebfileForTimestamp($timestamp)
31: {
32:
33: }
34:
35: public function registerDatastore(MAbstractDatastore $datastore)
36: {
37: array_push($this->registeredDatastores, $datastore);
38: }
39:
40: 41: 42: 43: 44:
45: private function aggregateDatastores($days = 500)
46: {
47:
48: $nextWebfiles = array();
49: $aggregatedWebfiles = array();
50:
51:
52: $timeBeforeGivenDays = time() - ($days * 24 * 3600);
53:
54:
55: foreach ($this->registeredDatastores as $datastore) {
56:
57: $nextWebfile = $datastore->getNextWebfileForTimestamp($timeBeforeGivenDays);
58: if (isset($nextWebfile)) {
59:
60: $nextWebfileTime = $nextWebfile->getTime();
61:
62: $nextWebfiles[$nextWebfileTime]['datastore'] = $datastore;
63: $nextWebfiles[$nextWebfileTime]['webfile'] = $nextWebfile;
64: }
65: }
66:
67:
68: $nextWebfile = $this->selectNextWebfile($nextWebfiles);
69:
70:
71: while (isset($nextWebfile)) {
72:
73: array_push($aggregatedWebfiles, $nextWebfile);
74: $nextWebfile = $this->selectNextWebfile($nextWebfiles);
75: }
76:
77: return $aggregatedWebfiles;
78: }
79:
80: 81: 82: 83: 84:
85: private function selectNextWebfile(&$nextWebfiles)
86: {
87:
88: $oldestTimestamp = time();
89: $nextWebfile = null;
90: $datastore = null;
91:
92: foreach ($nextWebfiles as $key => $value) {
93: if ($key < $oldestTimestamp) {
94: $oldestTimestamp = $key;
95: $nextWebfile = $nextWebfiles[$key]['webfile'];
96: $datastore = $nextWebfiles[$key]['datastore'];
97: }
98: }
99:
100: if (isset($datastore)) {
101: $nextWebfileTemp = $datastore->getNextWebfileForTimestamp($oldestTimestamp);
102: if (isset($nextWebfileTemp)) {
103:
104: $nextWebfileTempTime = $nextWebfileTemp->getTime();
105:
106: $nextWebfiles[$nextWebfileTempTime]['webfile'] = $nextWebfileTemp;
107: $nextWebfiles[$nextWebfileTempTime]['datastore'] = $datastore;
108: }
109:
110: unset($nextWebfiles[$oldestTimestamp]);
111: }
112:
113: return $nextWebfile;
114: }
115:
116: 117: 118:
119: public function getWebfilesAsStream()
120: {
121:
122: $webfiles = $this->getWebfilesAsArray();
123: return new MWebfileStream($webfiles);
124: }
125:
126: public function getLatestWebfiles($count = 5)
127: {
128:
129: }
130:
131: public function searchByTemplate(MWebfile $template)
132: {
133:
134: }
135:
136:
137: public function getDatasetsFromDatastore()
138: {
139:
140: }
141:
142: public function getLatestDatasets($count = 5, $reverse = true)
143: {
144:
145: }
146:
147: public function getWebfilesAsArray()
148: {
149: if (count($this->registeredDatastores) == 0) {
150:
151: }
152:
153: $aggregatedWebfiles = $this->aggregateDatastores();
154: return $aggregatedWebfiles;
155: }
156:
157: }