home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / CMCD0404.ISO / Software / Freeware / Programare / dotproject / index.php < prev   
PHP Script  |  2004-01-29  |  8KB  |  230 lines

  1. <?php /* $Id: index.php,v 1.64 2004/01/29 09:26:32 ajdonnison Exp $ */
  2.  
  3. /**  BSD LICENSE  **
  4.  
  5. Copyright (c) 2003, The dotProject Development Team sf.net/projects/dotproject
  6. All rights reserved.
  7.  
  8. Redistribution and use in source and binary forms, with or without modification,
  9. are permitted provided that the following conditions are met:
  10.  
  11. * Redistributions of source code must retain the above copyright notice,
  12.   this list of conditions and the following disclaimer.
  13. * Redistributions in binary form must reproduce the above copyright notice,
  14.   this list of conditions and the following disclaimer in the documentation
  15.   and/or other materials provided with the distribution.
  16. * Neither the name of the dotproject development team (past or present) nor the
  17.   names of its contributors may be used to endorse or promote products derived
  18.   from this software without specific prior written permission.
  19.  
  20. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  23. DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  24. FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  26. SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  27. CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  28. OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.  
  31. **/
  32.  
  33. error_reporting( E_PARSE | E_CORE_ERROR | E_WARNING );
  34.  
  35. // If you experience a 'white screen of death' or other problems,
  36. // uncomment the following line of code:
  37. //error_reporting( E_ALL );
  38.  
  39. is_file( "./includes/config.php" )
  40.     or die( "Fatal Error.  You haven't created a config file yet." );
  41.  
  42. // required includes for start-up
  43. $dPconfig = array();
  44. require_once( "./includes/config.php" );
  45. require_once( "./classes/ui.class.php" );
  46. require_once( "./includes/main_functions.php" );
  47.  
  48. // don't output anything. Usefull for fileviewer.php, gantt.php, etc.
  49. $suppressHeaders = dPgetParam( $_GET, 'suppressHeaders', false );
  50.  
  51. // manage the session variable(s)
  52. session_name( 'dotproject' );
  53. if (get_cfg_var( 'session.auto_start' ) > 0) {
  54.     session_write_close();
  55. }
  56. session_start();
  57. session_register( 'AppUI' ); 
  58.   
  59. // write the HTML headers
  60. header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
  61. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");    // always modified
  62. header ("Cache-Control: no-cache, must-revalidate");    // HTTP/1.1
  63. header ("Pragma: no-cache");    // HTTP/1.0
  64.  
  65. // Check that the user has correctly set the root directory
  66. is_file( "{$dPconfig['root_dir']}/includes/config.php" ) or die( "FATAL ERROR: Root directory in configuration file probably incorrect." );
  67.  
  68. // check if session has previously been initialised
  69. if (!isset( $_SESSION['AppUI'] ) || isset($_GET['logout'])) {
  70.     $_SESSION['AppUI'] = new CAppUI();
  71. }
  72. $AppUI =& $_SESSION['AppUI'];
  73. $AppUI->setConfig( $dPconfig );
  74. $AppUI->checkStyle();
  75.  
  76. // load the commonly used classes
  77. require_once( $AppUI->getSystemClass( 'date' ) );
  78. require_once( $AppUI->getSystemClass( 'dp' ) );
  79.  
  80. // load the db handler
  81. require_once( "./includes/db_connect.php" );
  82. require_once( "./misc/debug.php" );
  83.  
  84. // load default preferences if not logged in
  85. if ($AppUI->doLogin()) {
  86.     $AppUI->loadPrefs( 0 );
  87. }
  88.  
  89. // check if the user is trying to log in
  90. if (isset($_POST['login'])) {
  91.     $username = dPgetParam( $_POST, 'username', '' );
  92.     $password = dPgetParam( $_POST, 'password', '' );
  93.     $redirect = dPgetParam( $_REQUEST, 'redirect', '' );
  94.     $ok = $AppUI->login( $username, $password );
  95.     if (!$ok) {
  96.         @include_once( "./locales/core.php" );
  97.         $AppUI->setMsg( 'Login Failed' );
  98.     }
  99.     $AppUI->redirect( "$redirect" );
  100. }
  101.  
  102. // supported since PHP 4.2
  103. // writeDebug( var_export( $AppUI, true ), 'AppUI', __FILE__, __LINE__ );
  104.  
  105. // set the default ui style
  106. $uistyle = $AppUI->getPref( 'UISTYLE' ) ? $AppUI->getPref( 'UISTYLE' ) : $AppUI->cfg['host_style'];
  107.  
  108.  
  109.  
  110. // clear out main url parameters
  111. $m = '';
  112. $a = '';
  113. $u = '';
  114.  
  115. // check if we are logged in
  116. if ($AppUI->doLogin()) {
  117.     $AppUI->setUserLocale();
  118.     // load basic locale settings
  119.     @include_once( "./locales/$AppUI->user_locale/locales.php" );
  120.     @include_once( "./locales/core.php" );
  121.     setlocale( LC_TIME, $AppUI->user_locale );
  122.  
  123.     $redirect = @$_SERVER['QUERY_STRING'];
  124.     if (strpos( $redirect, 'logout' ) !== false) {
  125.         $redirect = '';
  126.     }
  127.  
  128.     if (isset( $locale_char_set )) {
  129.         header("Content-type: text/html;charset=$locale_char_set");
  130.     }
  131.  
  132.     require "./style/$uistyle/login.php";
  133.     // destroy the current session and output login page
  134.     session_unset();
  135.     session_destroy();
  136.     exit;
  137. }
  138.  
  139. // bring in the rest of the support and localisation files
  140. require_once( "./includes/permissions.php" );
  141.  
  142.  
  143. // set the module and action from the url
  144. $m = $AppUI->checkFileName(dPgetParam( $_GET, 'm', getReadableModule() ));
  145. $a = $AppUI->checkFileName(dPgetParam( $_GET, 'a', 'index' ));
  146.  
  147. /* This check for $u implies that a file located in a subdirectory of higher depth than 1
  148.  * in relation to the module base can't be executed. So it would'nt be possible to
  149.  * run for example the file module/directory1/directory2/file.php
  150.  * Also it won't be possible to run modules/module/abc.zyz.class.php for that dots are
  151.  * not allowed in the request parameters.
  152. */
  153.  
  154. $u = $AppUI->checkFileName(dPgetParam( $_GET, 'u', '' ));
  155.  
  156. // load module based locale settings
  157. @include_once( "./locales/$AppUI->user_locale/locales.php" );
  158. @include_once( "./locales/core.php" );
  159.  
  160. $user_locale = $AppUI->user_locale;
  161. if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
  162.     // This is a server using Windows, locales screwed up, not ISO standard 
  163.     switch ($user_locale) {
  164.         case "es":
  165.             $user_locale = "sp";
  166.             break;
  167.     }
  168. }     
  169. setlocale( LC_TIME, $user_locale );
  170.  
  171. @include_once( "./functions/" . $m . "_func.php" );
  172.  
  173. // TODO: canRead/Edit assignements should be moved into each file
  174.  
  175. // check overall module permissions
  176. // these can be further modified by the included action files
  177. $canRead = !getDenyRead( $m );
  178. $canEdit = !getDenyEdit( $m );
  179. $canAuthor = $canEdit;
  180. $canDelete = $canEdit;
  181.  
  182. if ( !$suppressHeaders ) {
  183.     // output the character set header
  184.     if (isset( $locale_char_set )) {
  185.         header("Content-type: text/html;charset=$locale_char_set");
  186.     }
  187. }
  188.  
  189. /*
  190.  * 
  191.  * TODO: Permissions should be handled by each file.
  192.  * Denying access from index.php still doesn't asure
  193.  * someone won't access directly skipping this security check.
  194.  * 
  195. // bounce the user if they don't have at least read access
  196. if (!(
  197.       // however, some modules are accessible by anyone
  198.       $m == 'public' ||
  199.       ($m == 'admin' && $a == 'viewuser')
  200.       )) {
  201.     if (!$canRead) {
  202.         $AppUI->redirect( "m=public&a=access_denied" );
  203.     }
  204. }
  205. */
  206.  
  207. // include the module class file
  208. @include_once( $AppUI->getModuleClass( $m ) );
  209. @include_once( "./modules/$m/" . ($u ? "$u/" : "") . "$u.class.php" );
  210.  
  211. // do some db work if dosql is set
  212. // TODO - MUST MOVE THESE INTO THE MODULE DIRECTORY
  213. if (isset( $_REQUEST["dosql"]) ) {
  214.     //require("./dosql/" . $_REQUEST["dosql"] . ".php");
  215.     require ("./modules/$m/" . $AppUI->checkFileName($_REQUEST["dosql"]) . ".php");
  216. }
  217.  
  218. // start output proper
  219. include "./style/$uistyle/overrides.php";
  220. ob_start();
  221. if(!$suppressHeaders) {
  222.     require "./style/$uistyle/header.php";
  223. }
  224. require "./modules/$m/" . ($u ? "$u/" : "") . "$a.php";
  225. if(!$suppressHeaders) {
  226.     require "./style/$uistyle/footer.php";
  227. }
  228. ob_end_flush();
  229. ?>
  230.