summaryrefslogtreecommitdiffstats
path: root/modules-available/baseconfig_partitions_cdn/page.inc.php
blob: a1d1445f2dd6718421a4b1f4af6fbbd1924d03bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php

class Page_BaseConfig_Partitions_CDN extends Page
{

	protected function doPreprocess()
	{
		User::load();

		$action = Request::post('action');

		if($action == 'new_partition') {
			$this->addPartition();
		}
		if($action == 'reset') {
			$this->resetConfig();
		}

		$deletePartition = Request::get('deletePartition');
		if($deletePartition !== false) { // TODO: CSRF: Actions that change/update/delete anything should be POST
			$this->deletePartition($deletePartition);
		}

		$this->updatePartitions();
	}

	protected function doRender()
	{
		if (!User::hasPermission('baseconfig_local')) {
			Message::addError('main.no-permission');
			Util::redirect('?do=Main');
		}

		//loads partition settings
		$partitions = array();
		$res = Database::simpleQuery('SELECT id, partition_id, size, mount_point, options FROM setting_partition WHERE user=:user',
			array( 'user' => User::getId() ));
		while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
			$partition = array(
				'id' => $row['id'],
				'partition_id' => $row['partition_id'],
				'size' => $row['size'],
				'mount_point' => $row['mount_point'],
				'options' => $row['options']
			);
			$partitions[] = $partition;
		}

		Render::addTemplate('_page', array(
			'partitions' => $partitions,
			'user' => User::getId()
		));
	}

	private function addPartition() {
		$partId = Request::post('new-partition-id');
		$partSize = Request::post('new-partition-size');
		$partMountPoint = Request::post('new-partition-mount-point');
		$partOptions = Request::post('new-partition-options');

		if(strlen($partId) < 1 || strlen($partSize) < 1){
			Message::addError('main.empty-field');
		}else{
			$data = array(
				'partition_id' => $partId,
				'size' => $partSize,
				'mount_point' => $partMountPoint,
				'options' => $partOptions,
				'user' => User::getId()
			);
			if (Database::exec('INSERT INTO setting_partition SET partition_id = :partition_id, size = :size,
				mount_point = :mount_point, options = :options, user = :user ', $data) != 1) {
				Util::traceError('Could not create new partition in DB');
			}
		}
		Util::redirect('?do=BaseConfig_Partitions_CDN');
	}

	private function deletePartition($id){
		if(is_numeric($id)){
			$data = array(
				'id' => $id,
				'user' => User::getId()
			);
			if (Database::exec('DELETE FROM setting_partition WHERE id = :id AND user = :user', $data) != 1) {
				Util::traceError('Could not delete partition in DB');
			}
		}
		Util::redirect('?do=BaseConfig_Partitions_CDN');
	}

	private function updatePartitions(){
		$partitions = array();
		foreach($_POST as $key => $value){
			if(substr($key,0,9) == 'partition'){
				$id = substr($key,10,1);
				$type = substr($key,12);
				$partitions[$id][$type] = $value;
			}
		}

		foreach($partitions as $key => $data){
			$data = array(
				'id' => $key,
				'partition_id' => $data['partition_id'],
				'size' => $data['size'],
				'mount_point' => $data['mount_point'],
				'options' => $data['options'],
				'user' => User::getId()
			);
			Database::exec('UPDATE setting_partition SET partition_id=:partition_id, size=:size, mount_point=:mount_point,
					options=:options  WHERE id=:id AND user=:user;', $data);
		}
		if (!empty($partitions)) {
			Message::addSuccess('partitions-updated');
			Util::redirect('?do=BaseConfig_Partitions_CDN');
		}
	}

	private function resetConfig(){
		$data = array(
			'user' => User::getId()
		);
		//Delete all config values
		Database::exec('DELETE FROM setting_partition WHERE user = :user', $data);
		//Create default partition values
		Database::exec ( "INSERT INTO setting_partition SET partition_id = '44', size = '5G', mount_point = '/tmp', user = :user", $data );
		Database::exec ( "INSERT INTO setting_partition SET partition_id = '43', size = '20G', mount_point = '/boot', options = 'bootable', user = :user", $data );
		Database::exec ( "INSERT INTO setting_partition SET partition_id = '40', size = '20G', mount_point = '/cache/export/dnbd3', user = :user", $data );
		Database::exec ( "INSERT INTO setting_partition SET partition_id = '41', size = '5G', mount_point = '/home', user = :user", $data );
		Database::exec ( "INSERT INTO setting_partition SET partition_id = '82', size = '1G', user = :user", $data );
	}
}