From cdaae64a7431af2bf6cb3c916f0e6bfbdd3fd93b Mon Sep 17 00:00:00 2001
From: vogelor <vogelor@ispconfig3>
Date: Sat, 01 May 2010 07:11:31 -0400
Subject: [PATCH] The Interface now supports the first remote-action : do OS-Update

---
 interface/web/admin/lib/lang/en_remote_action.lng        |    8 ++
 interface/web/admin/templates/remote_action_osupdate.htm |   25 ++++++++
 interface/web/admin/lib/lang/de.lng                      |    2 
 interface/web/admin/remote_action_osupdate.php           |   99 +++++++++++++++++++++++++++++++++
 interface/web/admin/lib/lang/de_remote_action.lng        |    8 ++
 interface/web/admin/lib/module.conf.php                  |    9 +++
 interface/web/admin/lib/lang/en.lng                      |    2 
 7 files changed, 153 insertions(+), 0 deletions(-)

diff --git a/interface/web/admin/lib/lang/de.lng b/interface/web/admin/lib/lang/de.lng
index c5fd284..e339bc6 100644
--- a/interface/web/admin/lib/lang/de.lng
+++ b/interface/web/admin/lib/lang/de.lng
@@ -37,4 +37,6 @@
 $wb['Updates'] = 'Updates';
 $wb['Merge'] = 'Merge';
 $wb['Remote Users'] = 'Remote Benutzer';
+$wb['Remote Actions'] = 'Remote Aktionen';
+$wb['Do OS-Update'] = 'Betriebssystem Update ausführen';
 ?>
diff --git a/interface/web/admin/lib/lang/de_remote_action.lng b/interface/web/admin/lib/lang/de_remote_action.lng
new file mode 100644
index 0000000..dcaa104
--- /dev/null
+++ b/interface/web/admin/lib/lang/de_remote_action.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['select_server_txt'] = 'Server auswählen';
+$wb['btn_do_txt'] = 'Aktion ausführen';
+$wb['do_osupdate_caption'] = 'Betriebssystem-Update auf entferntem Server ausführen';
+$wb['do_osupdate_desc'] = "Diese Aktion wird ein 'aptitude -y upgrade' auf Ihrem ausgewählten Server ausführen.<br><br><strong>DIES GESCHIEHT AUF IHRE EIGENE VERANTWORTUNG!</strong>";
+$wb['action_scheduled'] = "Die Aktion wurde zur Ausführung vorgemerkt";
+$wb['select_all_server'] = "Alle Server";
+?>
diff --git a/interface/web/admin/lib/lang/en.lng b/interface/web/admin/lib/lang/en.lng
index 06a3b45..6090602 100644
--- a/interface/web/admin/lib/lang/en.lng
+++ b/interface/web/admin/lib/lang/en.lng
@@ -39,4 +39,6 @@
 $wb['Updates'] = 'Updates';
 $wb['Merge'] = 'Merge';
 $wb['Remote Users'] = 'Remote Users';
+$wb['Remote Actions'] = 'Remote Actions';
+$wb['Do OS-Update'] = 'Do OS-Update';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_remote_action.lng b/interface/web/admin/lib/lang/en_remote_action.lng
new file mode 100644
index 0000000..1742d61
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_remote_action.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['select_server_txt'] = 'Select Server';
+$wb['btn_do_txt'] = 'Execute action';
+$wb['do_osupdate_caption'] = 'Do OS-Update at remote server';
+$wb['do_osupdate_desc'] = "This Action does a 'aptitude -y upgrade' at your selected Server.<br><br><strong>USE THIS AT YOUR OWN RISK!</strong>";
+$wb['action_scheduled'] = "The action is scheduled for execution";
+$wb['select_all_server'] = "All server";
+?>
diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php
index 0d153bd..a9802e7 100644
--- a/interface/web/admin/lib/module.conf.php
+++ b/interface/web/admin/lib/module.conf.php
@@ -155,6 +155,15 @@
 // cleanup
 unset($items);
 
+$items[] = array( 'title' 	=> 'Do OS-Update',
+				  'target' 	=> 'content',
+				  'link'	=> 'admin/remote_action_osupdate.php');
+
+$module['nav'][] = array(	'title'	=> 'Remote Actions',
+							'open' 	=> 1,
+							'items'	=> $items);
+
+
 // Getting the admin options from other modules
 $modules = explode(',', $_SESSION['s']['user']['modules']);
 if(is_array($modules)) {
diff --git a/interface/web/admin/remote_action_osupdate.php b/interface/web/admin/remote_action_osupdate.php
new file mode 100644
index 0000000..afa0ec6
--- /dev/null
+++ b/interface/web/admin/remote_action_osupdate.php
@@ -0,0 +1,99 @@
+<?php
+/*
+Copyright (c) 2010, Till Brehm, projektfarm Gmbh and Oliver Vogel www.muv.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('admin');
+
+//* This is only allowed for administrators
+if(!$app->auth->is_admin()) die('only allowed for administrators.');
+
+$app->uses('tpl');
+
+$app->tpl->newTemplate('form.tpl.htm');
+$app->tpl->setInclude('content_tpl', 'templates/remote_action_osupdate.htm');
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_remote_action.lng';
+include($lng_file);
+
+/*
+ * We need a list of all Servers
+ */
+$sysServers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name");
+$dropDown = "<option value='*'>" . $wb['select_all_server'] . "</option>";
+foreach ($sysServers as $server) {
+	$dropDown .= "<option value='" . $server['server_id'] . "'>" . $server['server_name'] . "</option>";
+}
+$app->tpl->setVar('server_option', $dropDown);
+
+$msg = '';
+
+/*
+ * If the user wants to do the action, write this to our db
+*/
+if (isset($_POST['server_select'])) {
+	$server = $_POST['server_select'];
+	$servers = array();
+	if ($server == '*') {
+		/* We need ALL Servers */
+		foreach ($sysServers as $server) {
+			$servers[] = $server['server_id'];
+		}
+	}
+	else {
+		/* We need only the selected Server */
+		$servers[] = $_POST['server_select'];
+	}
+	foreach ($servers as $serverId) {
+		$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_status, response) " .
+				"VALUES (".
+				(int)$serverId . ", " .
+				time() . ", " .
+				"'os_update', " .
+				"'', " .
+				"'pending', " .
+				"''" .
+				")";
+		$app->db->query($sql);
+	}
+	$msg = $wb['action_scheduled'];
+}
+
+$app->tpl->setVar('msg',$msg);
+
+$app->tpl->setVar($wb);
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+
+
+?>
\ No newline at end of file
diff --git a/interface/web/admin/templates/remote_action_osupdate.htm b/interface/web/admin/templates/remote_action_osupdate.htm
new file mode 100644
index 0000000..27dc8e9
--- /dev/null
+++ b/interface/web/admin/templates/remote_action_osupdate.htm
@@ -0,0 +1,25 @@
+<h2><tmpl_var name="do_osupdate_caption"></h2>
+<p><tmpl_var name="do_osupdate_desc"></p>
+
+<div class="panel panel_language_add">
+  
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>{tmpl_var name='do_osupdate_caption'}</legend>
+      <div class="ctrlHolder">
+      	<label for="server_select">{tmpl_var name='select_server_txt'}</label>
+        <select name="server_select" id="server" class="selectInput" onchange="document.getElementById('OKMsg').style.visibility = 'hidden'; ">
+					{tmpl_var name='server_option'}
+				</select>
+      </div>
+    </fieldset>
+
+	<tmpl_if name="msg">
+	<div id="OKMsg"><p><tmpl_var name="msg"></p></div>
+  </tmpl_if>
+
+	  <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_do_txt'}" onClick="submitForm('pageForm','admin/remote_action_osupdate.php');"><span>{tmpl_var name='btn_do_txt'}</span></button>
+    </div>
+  </div>
+  
+</div>

--
Gitblit v1.9.1