]> git.sur5r.net Git - bacula/bacula/blob - gui/baculum/protected/Web/Portlets/VolumeConfiguration.php
baculum: Add link to go back from job configuration window
[bacula/bacula] / gui / baculum / protected / Web / Portlets / VolumeConfiguration.php
1 <?php
2 /*
3  * Bacula(R) - The Network Backup Solution
4  * Baculum   - Bacula web interface
5  *
6  * Copyright (C) 2013-2016 Kern Sibbald
7  *
8  * The main author of Baculum is Marcin Haba.
9  * The original author of Bacula is Kern Sibbald, with contributions
10  * from many others, a complete list can be found in the file AUTHORS.
11  *
12  * You may use this file and others of this release according to the
13  * license defined in the LICENSE file, which includes the Affero General
14  * Public License, v3.0 ("AGPLv3") and some additional permissions and
15  * terms pursuant to its AGPLv3 Section 7.
16  *
17  * This notice must be preserved when any source code is
18  * conveyed and/or propagated.
19  *
20  * Bacula(R) is a registered trademark of Kern Sibbald.
21  */
22
23 Prado::using('System.Web.UI.ActiveControls.TActiveDropDownList');
24 Prado::using('System.Web.UI.ActiveControls.TActiveDataGrid');
25 Prado::using('System.Web.UI.ActiveControls.TActiveLabel');
26 Prado::using('System.Web.UI.ActiveControls.TActiveTextBox');
27 Prado::using('System.Web.UI.ActiveControls.TActiveCheckBox');
28 Prado::using('System.Web.UI.ActiveControls.TCallback');
29 Prado::using('Application.Web.Portlets.Portlets');
30
31 class VolumeConfiguration extends Portlets {
32
33         private $volumeStatesByDirectorOnly = array('Recycle', 'Purged', 'Error', 'Busy');
34
35         private $volumeStatesForSet = array('Append', 'Archive', 'Disabled', 'Full', 'Used', 'Cleaning', 'Read-Only');
36
37         public function configure($mediaId) {
38                 $voldata = $this->Application->getModule('api')->get(array('volumes', $mediaId))->output;
39                 $this->VolumeID->Text = $voldata->mediaid;
40                 $this->VolumeName->Text = $voldata->volumename;
41                 $volstates = $this->getVolumeStates(true);
42                 if (!in_array($voldata->volstatus, $volstates)) {
43                         array_push($volstates, $voldata->volstatus);
44                 }
45                 $volstatesSelect = array();
46                 for($i = 0; $i < count($volstates); $i++) {
47                         $volstatesSelect[$volstates[$i]] = $volstates[$i];
48                 }
49                 $this->VolumeStatus->DataSource = $volstatesSelect;
50                 $this->VolumeStatus->SelectedValue = $voldata->volstatus;
51                 $this->VolumeStatus->dataBind();
52                 $this->RetentionPeriod->Text = intval($voldata->volretention / 3600); // conversion to hours
53                 $this->UseDuration->Text = intval($voldata->voluseduration / 3600);  // conversion to hours
54                 $this->MaxVolJobs->Text = $voldata->maxvoljobs;
55                 $this->MaxVolFiles->Text = $voldata->maxvolfiles;
56                 $this->MaxVolBytes->Text = $voldata->maxvolbytes;
57                 $this->Slot->Text = $voldata->slot;
58                 $this->Recycle->Checked = ($voldata->recycle == 1);
59                 $this->Enabled->Checked = ($voldata->enabled == 1);
60                 $this->InChanger->Checked = ($voldata->inchanger == 1);
61                 $pools = $this->Application->getModule('api')->get(array('pools'))->output;
62                 $poolList = array();
63                 foreach($pools as $pool) {
64                         $poolList[$pool->poolid] = $pool->name;
65                 }
66                 $this->Pool->dataSource = $poolList;
67                 $this->Pool->SelectedValue = $voldata->poolid;
68                 $this->Pool->dataBind();
69
70                 $jobs_on_volume = $this->Application->getModule('api')->get(array('volumes', 'jobs', $voldata->mediaid))->output;
71                 $this->JobsOnVolume->DataSource = $this->Application->getModule('misc')->objectToArray($jobs_on_volume);
72                 $this->JobsOnVolume->dataBind();
73         }
74
75         public function prune($sender, $param) {
76                 $this->Application->getModule('api')->get(array('volumes', 'prune', $this->VolumeID->Text));
77         }
78
79         public function purge($sender, $param) {
80                 $this->Application->getModule('api')->get(array('volumes', 'purge', $this->VolumeID->Text));
81         }
82
83         public function apply($sender, $param) {
84                 $isInvalid = $this->RetentionPeriodValidator->IsValid === false || $this->UseDurationValidator->IsValid === false || $this->MaxVolJobsValidator->IsValid === false || $this->MaxVolFilesValidator->IsValid === false || $this->MaxVolBytesValidator->IsValid === false || $this->SlotValidator->IsValid === false;
85                 if($isInvalid) {
86                         return false;
87                 }
88                 $voldata = array();
89                 $voldata['mediaid'] = $this->VolumeID->Text;
90                 $voldata['volstatus'] = $this->VolumeStatus->SelectedValue;
91                 $voldata['poolid'] = $this->Pool->SelectedValue;
92                 $voldata['volretention'] = $this->RetentionPeriod->Text * 3600; // conversion to seconds
93                 $voldata['voluseduration'] = $this->UseDuration->Text * 3600;  // conversion to seconds
94                 $voldata['maxvoljobs'] = $this->MaxVolJobs->Text;
95                 $voldata['maxvolfiles'] = $this->MaxVolFiles->Text;
96                 $voldata['maxvolbytes'] = $this->MaxVolBytes->Text;
97                 $voldata['slot'] = $this->Slot->Text;
98                 $voldata['recycle'] = (integer)$this->Recycle->Checked;
99                 $voldata['enabled'] = (integer)$this->Enabled->Checked;
100                 $voldata['inchanger'] = (integer)$this->InChanger->Checked;
101                 $this->Application->getModule('api')->set(array('volumes', $voldata['mediaid']), $voldata);
102         }
103
104         public function openJob($sender, $param) {
105                 $jobid = $param->CallbackParameter;
106                 $params = array(
107                         'prev_window' => 'VolumeWindow'
108                 );
109                 $this->getPage()->JobConfiguration->configure($jobid, $params);
110         }
111
112         public function getVolumeStates($forSetOnly = false) {
113                 $states = ($forSetOnly === true ) ? $this->volumeStatesForSet : array_merge($this->volumeStatesByDirectorOnly, $this->volumeStatesForSet);
114                 return $states;
115         }
116
117         public function retentionPeriodValidator($sender, $param) {
118                 $isValid = preg_match('/^\d+$/', $this->RetentionPeriod->Text) && $this->RetentionPeriod->Text >= 0;
119                 $param->setIsValid($isValid);
120         }
121
122         public function useDurationValidator($sender, $param) {
123                 $isValid = preg_match('/^\d+$/', $this->UseDuration->Text) && $this->UseDuration->Text >= 0;
124                 $param->setIsValid($isValid);
125         }
126
127         public function maxVolJobsValidator($sender, $param) {
128                 $isValid = preg_match('/^\d+$/', $this->MaxVolJobs->Text) && $this->MaxVolJobs->Text >= 0;
129                 $param->setIsValid($isValid);
130         }
131
132         public function maxVolFilesValidator($sender, $param) {
133                 $isValid = preg_match('/^\d+$/', $this->MaxVolFiles->Text) && $this->MaxVolFiles->Text >= 0;
134                 $param->setIsValid($isValid);
135         }
136
137         public function maxVolBytesValidator($sender, $param) {
138                 $isValid = preg_match('/^\d+$/', $this->MaxVolBytes->Text) && $this->MaxVolBytes->Text >= 0;
139                 $param->setIsValid($isValid);
140         }
141
142         public function slotValidator($sender, $param) {
143                 $isValid = preg_match('/^\d+$/', $this->Slot->Text) && $this->Slot->Text >= 0;
144                 $param->setIsValid($isValid);
145         }
146 }
147 ?>