e422608eebaff2e300c417fa5022608502c76222
[gnucomo.git] / src / web / page.class.php
1 <?php
2 /**************************************************************************
3 **  (c) Copyright 2003, Andromeda Technology & Automation
4 ** This is free software; you can redistribute it and/or modify it under the
5 ** terms of the GNU General Public License, see the file COPYING.
6 ***************************************************************************
7 ** MODULE INFORMATION *
8 ***********************
9 **      FILE NAME      : page.class.php
10 **      SYSTEM NAME    : Gnucomo - Gnu Computer Monitoring
11 **      VERSION NUMBER : $Revision: 1.12 $
12 **
13 **  DESCRIPTION      : Base class for Gnucomo web interface pages.
14 **
15 **  EXPORTED OBJECTS : 
16 **  LOCAL    OBJECTS : 
17 **  MODULES  USED    :
18 ***************************************************************************
19 **  ADMINISTRATIVE INFORMATION *
20 ********************************
21 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
22 **      CREATION DATE   : Jan 22, 2003
23 **      LAST UPDATE     : Feb 19, 2003
24 **      MODIFICATIONS   : 
25 **************************************************************************/
26
27 /*****************************
28    $Log: page.class.php,v $
29    Revision 1.12  2007-12-12 09:11:06  arjen
30    Prepared for version 0.0.12
31
32    Revision 1.11  2007/11/21 14:40:48  arjen
33    New version number and release date.
34
35    Revision 1.10  2007/11/21 14:38:06  arjen
36    The buttonbar at the top of each page is now a fixed 'div' element
37    instead of a framed page.
38    Contributed by Edwin Nadorp.
39
40    Revision 1.9  2007/10/23 14:47:42  arjen
41    Prepared for release 0.0.10
42
43    Revision 1.8  2007/01/11 13:44:29  arjen
44    Manually edit parameters.
45    View logs from abusing IP addresses.
46
47    Revision 1.7  2003/12/24 07:41:23  arjen
48    Changed version number
49
50    Revision 1.6  2003/09/04 06:53:40  arjen
51    Prepared for release 0.0.8
52
53    Revision 1.5  2003/08/14 10:37:04  arjen
54    Prepared for release 0.0.7
55
56    Revision 1.4  2003/07/15 11:05:32  arjen
57    Chnaged version number to 0.0.6 in login form.
58
59    Revision 1.3  2003/02/19 09:12:27  arjen
60    Added the 'form' class on table and td elements. This class is intended
61    for borderless tables that are used to layout HTML forms.
62
63    Revision 1.2  2003/02/13 08:59:52  arjen
64    Use our own error handler for PHP errors and warnings
65
66    Revision 1.1  2003/02/05 09:38:42  arjen
67    A base class for all web interface pages
68
69 ******************************/
70
71 // RCSID = "$Id: page.class.php,v 1.12 2007-12-12 09:11:06 arjen Exp $";
72
73
74 require_once('gnucomo_config.php');
75
76 $last_error = "&nbsp;";
77
78 function error($errno, $errstr, $errfile, $errline)
79 {
80    global $last_error;
81
82    $last_error = $errstr;
83 }
84
85 function login_form()
86 {
87    global $last_error;
88
89 ?>
90    <div class='login'>
91    <h1 align="center">GNU Computer Monitoring</h1>
92    <h4 align="center"><i>Version 0.0.12, December 12, 2007</i></h4>
93    <h2 class='error'><?php echo $last_error?></h2>
94    <center><table class='form'>
95    <tr>
96    <td width='50%' class='form'>
97       <a href='http://gnucomo.org/' target='_top'><img src='logo.png' alt='GnuCoMo logo'></a></td>
98    <td class='form'><form name="login" method="POST">
99        <table class='form'>
100        <tr>
101        <td class='form'>Username</td>
102        <td class='form'><input type="text" name="username"></td>
103        </tr>
104        <tr>
105        <td class='form'>Password</td>
106        <td class='form'><input type="password" name="password"></td>
107        </tr>
108        <tr>
109        <td class='form'>&nbsp;</td>
110        <td align="right" class='form'><input type="submit" value="signin"></td>
111        </tr>
112        </table>
113        </form>
114    </td>
115    </tr>
116    </table></center>
117    </div>
118 <?php
119 }
120
121 class page
122 {
123    var  $the_title;       //  The title used on the page.
124    var  $database;        //  Connection to the database server.
125    var  $path;            //  Directory path to stylesheets and images.
126    var  $config;          //  The XML configuration object.
127
128    //   Page constructor.
129
130    function page($title, $path = "")
131    {
132       $this->the_title = $title;
133       $this->database = false;
134       $this->path = $path;
135       session_start();
136       //set_error_handler("error");
137    }
138
139    function Head()
140    {
141 ?>
142       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
143                     "http://www.w3.org/TR/html4/loose.dtd">
144       <html>
145       <head>
146       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
147       <meta name="author" content="Arjen Baart">
148       <meta name="expires" content="0">
149
150       <link rel='stylesheet' href='<?php echo $this->path ?>gnucomo.css' type='text/css'>
151       <title><?php echo $this->the_title ?></title>
152       </head>
153       <body>
154         <div id="header">
155            <a href='index.php'><img src='small-logo.png' title='Gnucomo' alt='Gnucomo'></a>
156            <a href='objects.php'><img src='server.png' title='Objects' alt='Objects'></a>
157            <a href='users.php'><img src='user.png' title='Users' alt='Users'></a>
158            <a href='services.php'><img src='service.png' title='Services' alt='Services'></a>
159            <a href='issues.php'><img src='bell.png' title='Issues' alt='Issues'></a>
160            <a href='classes.php'><img src='change.png' title='Classes' alt='Classes'></a>
161            <!-- a href='notification2.php'>N2</a -->
162            <a href='logout.php'><img src='exit.png' title='Logout' alt='Logout'></a>
163         </div>
164
165         <div id="menu_title">&nbsp;</div>
166
167         <div id="content">
168 <?php
169    }
170
171    function Body()
172    {
173       //echo "The default body.";
174       echo "<div id='content'>
175                  <img src='logo.png' alt='GnuCoMo'>
176             </div>";
177    }
178
179    function Tail()
180    {
181       if ($this->database)
182       {
183          pg_close($this->database);
184       }
185       echo "<br></div>
186             <div id='footer'>
187             &copy; <a href='http://www.gnucomo.org'>GnuCoMo</a>
188             </div>";
189       echo "</body>";
190       echo "</html>";
191    }
192
193    function Showpage()
194    {
195       $this->config = new gnucomo_config;
196
197       $this->config->read("gnucomo");
198
199       $this->Head();
200       if (empty($_SESSION['username']))
201       {
202          //  Nobody logged in yet.
203
204          if (isset($_POST['username']) && isset($_POST['password']))
205          {
206             //  Login form submitted. Try to start a new session.
207
208             $name   = $_POST['username'];   // PostgreSQL username
209             $passw  = $_POST['password'];   // PostgreSQL user password
210
211             //  Connect to the database
212             $this->database = pg_connect($this->config->Database($name, $passw));
213             if ($this->database == false)
214             {
215                login_form();
216             }
217             else
218             {
219                session_register('username');
220                $_SESSION['username'] = $name;
221                session_register('password');
222                $_SESSION['password'] = $passw;
223                $this->Body();
224             }
225
226          }
227          else
228          {
229             //  Nobody tried to login yet. Present the login form.
230             login_form();
231          }
232       }
233       else
234       {
235          $name   = $_SESSION['username'];   // PostgreSQL username
236          $passw  = $_SESSION['password'];   // PostgreSQL user password
237
238          //  Connect to the database
239          $this->database = pg_connect($this->config->Database($name, $passw));
240          $this->Body();
241       }
242       $this->Tail();
243    }
244 }