summaryrefslogtreecommitdiffstats
path: root/modules-available/baseconfig_partitions_cdn
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/baseconfig_partitions_cdn')
-rw-r--r--modules-available/baseconfig_partitions_cdn/config.json4
-rw-r--r--modules-available/baseconfig_partitions_cdn/page.inc.php133
-rw-r--r--modules-available/baseconfig_partitions_cdn/templates/_page.html74
3 files changed, 211 insertions, 0 deletions
diff --git a/modules-available/baseconfig_partitions_cdn/config.json b/modules-available/baseconfig_partitions_cdn/config.json
new file mode 100644
index 00000000..a3036a56
--- /dev/null
+++ b/modules-available/baseconfig_partitions_cdn/config.json
@@ -0,0 +1,4 @@
+{
+ "category": "main.settings",
+ "dependencies": [ "baseconfig" ]
+} \ No newline at end of file
diff --git a/modules-available/baseconfig_partitions_cdn/page.inc.php b/modules-available/baseconfig_partitions_cdn/page.inc.php
new file mode 100644
index 00000000..b6ea869a
--- /dev/null
+++ b/modules-available/baseconfig_partitions_cdn/page.inc.php
@@ -0,0 +1,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');
+ }
+
+ 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');
+ }
+
+ 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');
+ }
+ }
+
+ 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 );
+ }
+} \ No newline at end of file
diff --git a/modules-available/baseconfig_partitions_cdn/templates/_page.html b/modules-available/baseconfig_partitions_cdn/templates/_page.html
new file mode 100644
index 00000000..ee764e37
--- /dev/null
+++ b/modules-available/baseconfig_partitions_cdn/templates/_page.html
@@ -0,0 +1,74 @@
+<h1>{{lang_partitioningManagement}}</h1>
+
+<form action="?do=BaseConfig_Partitions_CDN" method="post">
+ <input type="hidden" name="token" value="{{token}}">
+ <button class="btn btn-lg btn-primary" type="submit">{{lang_save}}</button>
+ <button class="btn btn-lg btn-primary" type="reset">{{lang_reset}}</button>
+ <a class="btn btn-lg btn-primary" href="#" onclick="saveConfig()">Download</a>
+</form>
+<div>
+<form method="post" action="?do=BaseConfig_Partitions_CDN">
+ <input type="hidden" name="token" value="{{token}}">
+ <input type="hidden" name="action" value="reset">
+ <button class="btn btn-default" type="submit" onclick="return confirm('{{lang_resetConfirm}}');">{{lang_resetDefault}}</button>
+</form>
+</div>
+
+<!-- Create Partition Window -->
+<form action="?do=BaseConfig_Partitions_CDN" method="post">
+ <div class="modal fade" id="add-partition" tabindex="-1" role="dialog">
+ <div class="modal-dialog">
+
+ <div class="modal-content">
+ <div class="modal-header">{{lang_newPartition}}</div>
+ <div class="modal-body">
+
+ <div class="input-group">
+ <span class="input-group-addon">{{lang_partitionId}}</span>
+ <input name="new-partition-id" class="form-control" type="text">
+ </div>
+ <p class="help-block">{{lang_helpId}}</p>
+ <div class="input-group">
+ <span class="input-group-addon">{{lang_partitionSize}}</span>
+ <input name="new-partition-size" class="form-control" type="text">
+ </div>
+ <p class="help-block">{{lang_helpSize}}</p>
+ <div class="input-group">
+ <span class="input-group-addon">{{lang_partitionMountPoint}}</span>
+ <input name="new-partition-mount-point" class="form-control" type="text">
+ </div>
+ <p class="help-block">{{lang_helpMountPoint}}</p>
+ <div class="input-group">
+ <span class="input-group-addon">{{lang_partitionOptions}}</span>
+ <input name="new-partition-options" class="form-control" type="text">
+ </div>
+ <p class="help-block">{{lang_helpOptions}}</p>
+ <input type="submit" class="btn btn-primary" value="{{lang_create}}">
+ </div>
+ <div class="modal-footer"><a class="btn btn-primary" data-dismiss="modal">{{lang_close}}</a></div>
+ </div>
+ </div>
+ </div>
+ <input type="hidden" name="action" value="new_partition">
+ <input type="hidden" name="token" value="{{token}}">
+</form>
+<script type="text/javascript">
+ document.getElementById("cat-extra-6").innerHTML = "<div class='list-group'> <div class='list-group-item' style='background-color:#f5f5f5;color:#428bca;'> " +
+ "{{lang_catPartition}} <span style='display:inline-block; float: right; margin-top: -7px;'> <a class='btn btn-default ' data-toggle='modal' " +
+ "data-target='#add-partition'> <span class='glyphicon glyphicon-plus'></span> </a> </span> </div> {{#partitions}} <div class='list-group-item'> " +
+ "<div class='row'> <div class='col-md-1'> <input name='partition-{{id}}-partition_id' type='text' class='form-control' size='30' value='{{partition_id}}'" +
+ " placeholder='{{lang_partitionId}}' /> </div> <div class='col-md-1'> <input name='partition-{{id}}-size' type='text' class='form-control' size='30' " +
+ "value='{{size}}' placeholder='{{lang_partitionSize}}'/> </div> <div class='col-md-4'> <input name='partition-{{id}}-mount_point' type='text' " +
+ "class='form-control' size='30' value='{{mount_point}}' placeholder='{{lang_partitionMountPoint}}'/> </div> <div class='col-md-4'> <input " +
+ "name='partition-{{id}}-options' type='text' class='form-control' size='30' value='{{options}}' placeholder='{{lang_partitionOptions}}'/> </div> " +
+ "<div class='col-md-2'> <a class='btn btn-danger' href='?do=BaseConfig&deletePartition={{id}}&token={{token}}' ><span class='glyphicon glyphicon-trash'>" +
+ "</span> {{lang_delete}}</a> </div> </div> </div> {{/partitions}} </div> </div>";
+
+ function saveConfig(){
+ if(confirm('{{lang_confirm}}'))
+ window.location = 'api.php?do=baseconfig&user={{user}}&save=true';
+ else
+ window.location = 'api.php?do=baseconfig&user={{user}}';
+ }
+
+</script> \ No newline at end of file