2003-06-01 11:39:23 +00:00
< ? php
/*
$Id $
2009-10-27 18:47:12 +00:00
This code is part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2011-03-31 18:50:48 +00:00
Copyright ( C ) 2004 - 2011 Roland Gruber
2003-06-01 11:39:23 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
2004-08-31 19:13:32 +00:00
/**
* Start page of file upload
*
* @ author Roland Gruber
* @ package tools
2004-01-10 11:47:48 +00:00
*/
2004-08-31 19:13:32 +00:00
2006-03-26 17:51:25 +00:00
/** security functions */
include_once ( " ../lib/security.inc " );
2004-08-31 19:13:32 +00:00
/** access to configuration */
include_once ( '../lib/config.inc' );
/** status messages */
include_once ( '../lib/status.inc' );
/** account modules */
include_once ( '../lib/modules.inc' );
2004-01-10 11:47:48 +00:00
2004-09-21 18:37:55 +00:00
2004-01-10 11:47:48 +00:00
// Start session
2006-03-26 17:51:25 +00:00
startSecureSession ();
2003-10-22 17:51:44 +00:00
2007-12-30 13:15:39 +00:00
// die if no write access
if ( ! checkIfWriteAccessIsAllowed ()) die ();
2003-10-22 17:51:44 +00:00
// Redirect to startpage if user is not loged in
2008-05-15 17:32:59 +00:00
if ( ! isset ( $_SESSION [ 'loggedIn' ]) || ( $_SESSION [ 'loggedIn' ] !== true )) {
2003-10-22 17:51:44 +00:00
metaRefresh ( " login.php " );
2004-01-10 11:47:48 +00:00
exit ;
2004-09-21 18:37:55 +00:00
}
2003-10-22 17:51:44 +00:00
2003-10-22 13:57:32 +00:00
// Set correct language, codepages, ....
2003-08-10 19:46:21 +00:00
setlanguage ();
2003-06-01 11:39:23 +00:00
2004-10-12 13:12:16 +00:00
// show CSV if requested
if ( isset ( $_GET [ 'getCSV' ])) {
//download file
if ( isset ( $HTTP_SERVER_VARS [ 'HTTP_USER_AGENT' ]) and strpos ( $HTTP_SERVER_VARS [ 'HTTP_USER_AGENT' ], 'MSIE' )) {
Header ( 'Content-Type: application/force-download' );
}
else {
2004-10-12 13:29:06 +00:00
Header ( 'Content-Type: application/msexcel' );
2004-10-12 13:12:16 +00:00
}
Header ( 'Content-disposition: attachment; filename=lam.csv' );
echo $_SESSION [ 'mass_csv' ];
exit ;
}
2010-01-01 17:21:46 +00:00
include 'main_header.php' ;
2004-08-31 19:13:32 +00:00
2010-02-27 19:14:15 +00:00
// get possible types and remove those which do not support file upload
$types = $_SESSION [ 'config' ] -> get_ActiveTypes ();
for ( $i = 0 ; $i < sizeof ( $types ); $i ++ ) {
$myType = new $types [ $i ]();
if ( ! $myType -> supportsFileUpload ()) {
unset ( $types [ $i ]);
}
}
$types = array_values ( $types );
2004-08-31 19:13:32 +00:00
// check if account specific page should be shown
2010-02-15 20:21:44 +00:00
if ( isset ( $_POST [ 'type' ])) {
// get selected type
$scope = $_POST [ 'type' ];
// get selected modules
$selectedModules = array ();
$checkedBoxes = array_keys ( $_POST , 'on' );
for ( $i = 0 ; $i < sizeof ( $checkedBoxes ); $i ++ ) {
if ( strpos ( $checkedBoxes [ $i ], $scope . '_' ) === 0 ) {
$selectedModules [] = substr ( $checkedBoxes [ $i ], strlen ( $scope ) + 1 );
}
}
$deps = getModulesDependencies ( $scope );
$depErrors = check_module_depends ( $selectedModules , $deps );
if ( is_array ( $depErrors ) && ( sizeof ( $depErrors ) > 0 )) {
for ( $i = 0 ; $i < sizeof ( $depErrors ); $i ++ ) {
StatusMessage ( 'ERROR' , _ ( " Unsolved dependency: " ) . ' ' .
getModuleAlias ( $depErrors [ $i ][ 0 ], $scope ) . " ( " .
getModuleAlias ( $depErrors [ $i ][ 1 ], $scope ) . " ) " );
}
}
else {
showMainPage ( $scope , $selectedModules );
exit ;
}
}
2006-01-01 16:30:05 +00:00
2004-08-31 19:13:32 +00:00
// show start page
2010-12-05 13:31:39 +00:00
$divClass = 'user' ;
if ( isset ( $_REQUEST [ 'type' ])) {
$divClass = $_REQUEST [ 'type' ];
}
echo '<div class="' . $divClass . 'list-bright smallPaddingContent">' ;
2010-10-24 13:53:44 +00:00
echo " <div class= \" title \" > \n " ;
echo " <h2 class= \" titleText \" > " . _ ( " Account creation via file upload " ) . " </h2> \n " ;
echo " </div> " ;
2010-02-15 20:21:44 +00:00
echo " <p> </p> \n " ;
echo " <p> \n " ;
echo _ ( " Here you can create multiple accounts by providing a CSV file. " );
echo " </p> \n " ;
echo " <p> </p> \n " ;
echo " <form enctype= \" multipart/form-data \" action= \" masscreate.php \" method= \" post \" > \n " ;
echo " <table style= \" border-color: grey \" cellpadding= \" 10 \" border= \" 0 \" cellspacing= \" 0 \" > \n " ;
echo " <tr><td> \n " ;
echo '<b>' . _ ( " Account type " ) . ':</b>' ;
echo " </td> \n " ;
echo " <td> \n " ;
2010-12-05 13:31:39 +00:00
echo " <select class= \" $divClass\ " name = \ " type \" onChange= \" changeVisibleModules(this); \" > \n " ;
2010-04-04 14:54:58 +00:00
$sortedTypes = array ();
2010-02-15 20:21:44 +00:00
for ( $i = 0 ; $i < sizeof ( $types ); $i ++ ) {
2010-04-04 14:54:58 +00:00
$sortedTypes [ $types [ $i ]] = getTypeAlias ( $types [ $i ]);
}
natcasesort ( $sortedTypes );
foreach ( $sortedTypes as $key => $value ) {
2010-02-15 20:21:44 +00:00
$selected = '' ;
2010-10-31 13:48:15 +00:00
if ( isset ( $_REQUEST [ 'type' ]) && ( $_REQUEST [ 'type' ] == $key )) {
2010-02-15 20:21:44 +00:00
$selected = 'selected' ;
2008-12-27 13:47:41 +00:00
}
2010-04-04 14:54:58 +00:00
echo " <option value= \" " . $key . " \" $selected > " . $value . " </option> \n " ;
2010-02-15 20:21:44 +00:00
}
echo " </select> \n " ;
echo " </td></tr> \n " ;
echo " <tr><td valign= \" top \" > \n " ;
echo '<b>' . _ ( 'Selected modules' ) . ':</b>' ;
echo " </td> \n " ;
echo " <td> \n " ;
// generate one DIV for each account type
2010-04-04 14:54:58 +00:00
$counter = 0 ;
foreach ( $sortedTypes as $type => $label ) {
2010-02-15 20:21:44 +00:00
$style = 'style="display:none;"' ;
2010-10-31 13:48:15 +00:00
if (( ! isset ( $_REQUEST [ 'type' ]) && ( $counter == 0 )) || ( isset ( $_REQUEST [ 'type' ]) && ( $_REQUEST [ 'type' ] == $type ))) {
2010-02-15 20:21:44 +00:00
// show first account type or last selected one
$style = '' ;
}
2010-04-04 14:54:58 +00:00
echo " <div $style id= \" " . $type . " \" class= \" typeOptions \" > \n " ;
2010-02-15 20:21:44 +00:00
echo " <table border=0> " ;
2010-04-04 14:54:58 +00:00
$modules = $_SESSION [ 'config' ] -> get_AccountModules ( $type );
2010-02-15 20:21:44 +00:00
for ( $m = 0 ; $m < sizeof ( $modules ); $m ++ ) {
if ( $m % 3 == 0 ) {
echo " <tr> \n " ;
}
echo " <td> " ;
2010-04-04 14:54:58 +00:00
$module = new $modules [ $m ]( $type );
2010-02-15 20:21:44 +00:00
$iconImage = $module -> getIcon ();
echo '<img align="middle" src="../graphics/' . $iconImage . '" alt="' . $iconImage . '">' ;
echo " </td><td> \n " ;
2010-04-04 14:54:58 +00:00
if ( is_base_module ( $modules [ $m ], $type )) {
echo " <input type= \" hidden \" name= \" " . $type . '_' . $modules [ $m ] . " \" value= \" on \" ><input type= \" checkbox \" checked disabled> " ;
2010-02-15 20:21:44 +00:00
}
else {
$checked = 'checked' ;
2010-04-04 14:54:58 +00:00
if ( isset ( $_POST [ 'submit' ]) && ! isset ( $_POST [ $type . '_' . $modules [ $m ]])) {
2010-02-15 20:21:44 +00:00
$checked = '' ;
}
2010-04-04 14:54:58 +00:00
echo " <input type= \" checkbox \" name= \" " . $type . '_' . $modules [ $m ] . " \" $checked > " ;
2010-02-15 20:21:44 +00:00
}
2010-04-04 14:54:58 +00:00
echo getModuleAlias ( $modules [ $m ], $type );
2010-10-31 13:48:15 +00:00
echo " </td> " ;
2010-02-15 20:21:44 +00:00
if (( $m % 3 == 2 ) && ( $m != ( sizeof ( $modules ) - 1 ))) {
echo " </tr> \n " ;
}
}
echo " </tr> " ;
echo " </table> \n " ;
echo " </div> \n " ;
2010-04-04 14:54:58 +00:00
$counter ++ ;
2010-02-15 20:21:44 +00:00
}
echo " </td></tr> \n " ;
echo " <tr><td> \n " ;
2010-10-18 19:46:03 +00:00
echo " <button id= \" okButton \" class= \" smallPadding \" name= \" submit \" > " . _ ( " Ok " ) . " </button> \n " ;
?>
< script type = " text/javascript " >
jQuery ( document ) . ready ( function () {
jQuery ( '#okButton' ) . button ();
});
2010-10-24 13:53:44 +00:00
function changeVisibleModules ( element ) {
jQuery ( 'div.typeOptions' ) . toggle ( false );
jQuery ( 'div#' + element . options [ element . selectedIndex ] . value ) . toggle ();
}
2010-10-18 19:46:03 +00:00
</ script >
< ? php
2010-02-15 20:21:44 +00:00
echo " </td></tr> \n " ;
echo " </table> \n " ;
echo " </form> \n " ;
2010-10-18 19:46:03 +00:00
echo '</div>' ;
2010-08-21 09:43:52 +00:00
include 'main_footer.php' ;
2004-08-31 19:13:32 +00:00
/**
* Displays the acount type specific main page of the upload .
*
* @ param string $scope account type
2010-02-15 20:21:44 +00:00
* @ param array $selectedModules list of selected account modules
2004-08-31 19:13:32 +00:00
*/
2010-02-15 20:21:44 +00:00
function showMainPage ( $scope , $selectedModules ) {
2010-12-05 13:31:39 +00:00
echo '<div class="' . $scope . 'list-bright smallPaddingContent">' ;
2004-08-31 19:13:32 +00:00
// get input fields from modules
2010-02-15 20:21:44 +00:00
$columns = getUploadColumns ( $scope , $selectedModules );
2004-08-31 19:13:32 +00:00
$modules = array_keys ( $columns );
2010-12-05 13:31:39 +00:00
echo " <form enctype= \" multipart/form-data \" action= \" massBuildAccounts.php \" method= \" post \" > \n " ;
$container = new htmlTable ();
// title
$container -> addElement ( new htmlTitle ( _ ( " File upload " )), true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
// instructions
$container -> addElement ( new htmlOutputText ( _ ( " Please provide a CSV formated file with your account data. The cells in the first row must be filled with the column identifiers. The following rows represent one account for each row. " )), true );
$container -> addElement ( new htmlOutputText ( _ ( " Check your input carefully. LAM will only do some basic checks on the upload data. " )), true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
$container -> addElement ( new htmlOutputText ( _ ( " Hint: Format all cells as text in your spreadsheet program and turn off auto correction. " )), true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
// upload elements
$inputContainer = new htmlTable ();
$inputContainer -> addElement ( new htmlOutputText ( _ ( " CSV file " )));
$inputContainer -> addElement ( new htmlInputFileUpload ( 'inputfile' ));
$inputContainer -> addElement ( new htmlButton ( 'submitfile' , _ ( 'Upload file and create accounts' )));
$inputContainer -> addElement ( new htmlSpacer ( '10px' , null ));
$inputContainer -> addElement ( new htmlLink ( _ ( " Download sample CSV file " ), 'masscreate.php?getCSV=1' ));
$inputContainer -> addElement ( new htmlHiddenInput ( 'scope' , $scope ));
$inputContainer -> addElement ( new htmlHiddenInput ( 'selectedModules' , implode ( ',' , $selectedModules )), true );
$container -> addElement ( $inputContainer , true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
// column list
$columnSpacer = new htmlSpacer ( '10px' , null );
$container -> addElement ( new htmlTitle ( _ ( " Columns " )), true );
$columnContainer = new htmlTable ();
$columnContainer -> setCSSClasses ( $scope . 'list' );
$columnContainer -> addElement ( $columnSpacer );
$columnContainer -> addElement ( new htmlOutputText ( '' ));
$columnContainer -> addElement ( $columnSpacer );
$columnContainer -> addElement ( new htmlOutputText ( '' ));
$columnContainer -> addElement ( $columnSpacer );
$header1 = new htmlOutputText ( _ ( " Identifier " ));
$header1 -> alignment = htmlElement :: ALIGN_LEFT ;
$columnContainer -> addElement ( $header1 , false , true );
$columnContainer -> addElement ( $columnSpacer );
$header2 = new htmlOutputText ( _ ( " Example value " ));
$header2 -> alignment = htmlElement :: ALIGN_LEFT ;
$columnContainer -> addElement ( $header2 , false , true );
$columnContainer -> addElement ( $columnSpacer );
$header3 = new htmlOutputText ( _ ( " Default value " ));
$header3 -> alignment = htmlElement :: ALIGN_LEFT ;
$columnContainer -> addElement ( $header3 , false , true );
$columnContainer -> addElement ( $columnSpacer );
$header4 = new htmlOutputText ( _ ( " Possible values " ));
$header4 -> alignment = htmlElement :: ALIGN_LEFT ;
$columnContainer -> addElement ( $header4 , true , true );
// DN options
$dnTitle = new htmlSubTitle ( _ ( " DN settings " ), '../graphics/logo32.png' );
$dnTitle -> colspan = 20 ;
$columnContainer -> addElement ( $dnTitle );
$dnSuffixRowCells = array ();
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlHelpLink ( '361' );
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlOutputText ( _ ( " DN suffix " ));
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlOutputText ( 'dn_suffix' );
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlOutputText ( $_SESSION [ 'config' ] -> get_Suffix ( $scope ));
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlOutputText ( $_SESSION [ 'config' ] -> get_Suffix ( $scope ));
$dnSuffixRowCells [] = $columnSpacer ;
$dnSuffixRowCells [] = new htmlOutputText ( '' );
$dnSuffixRowCells [] = new htmlSpacer ( null , '25px' );
$dnSuffixRow = new htmlTableRow ( $dnSuffixRowCells );
$dnSuffixRow -> setCSSClasses ( $scope . 'list-dark' );
$columnContainer -> addElement ( $dnSuffixRow );
$dnRDNRowCells = array ();
$dnRDNRowCells [] = $columnSpacer ;
$dnRDNRowCells [] = new htmlHelpLink ( '301' );
$dnRDNRowCells [] = $columnSpacer ;
$dnRDNRowCells [] = new htmlOutputText ( _ ( " RDN identifier " ) . '*' );
$dnRDNRowCells [] = $columnSpacer ;
$dnRDNRowCells [] = new htmlOutputText ( 'dn_rdn' );
$dnRDNRowCells [] = $columnSpacer ;
$rdnAttributes = getRDNAttributes ( $scope , $selectedModules );
$dnRDNRowCells [] = new htmlOutputText ( $rdnAttributes [ 0 ]);
$dnRDNRowCells [] = $columnSpacer ;
$dnRDNRowCells [] = new htmlOutputText ( '' );
$dnRDNRowCells [] = $columnSpacer ;
$dnRDNRowCells [] = new htmlOutputText ( implode ( " , " , $rdnAttributes ));
$dnRDNRowCells [] = new htmlSpacer ( null , '25px' );
$dnRDNRow = new htmlTableRow ( $dnRDNRowCells );
$dnRDNRow -> setCSSClasses ( $scope . 'list-bright' );
$columnContainer -> addElement ( $dnRDNRow );
// module options
2004-08-31 19:13:32 +00:00
for ( $m = 0 ; $m < sizeof ( $modules ); $m ++ ) {
2010-02-15 20:21:44 +00:00
// skip modules without upload columns
if ( sizeof ( $columns [ $modules [ $m ]]) < 1 ) {
continue ;
}
2007-11-19 19:16:08 +00:00
$icon = '' ;
$module = new $modules [ $m ]( $scope );
$iconImage = $module -> getIcon ();
if ( $iconImage != null ) {
2010-12-05 13:31:39 +00:00
$icon = '../graphics/' . $iconImage ;
2007-11-19 19:16:08 +00:00
}
2010-12-05 13:31:39 +00:00
$moduleTitle = new htmlSubTitle ( getModuleAlias ( $modules [ $m ], $scope ), $icon );
$moduleTitle -> colspan = 20 ;
$columnContainer -> addElement ( $moduleTitle );
$odd = true ;
2004-08-31 19:13:32 +00:00
for ( $i = 0 ; $i < sizeof ( $columns [ $modules [ $m ]]); $i ++ ) {
2010-12-05 13:31:39 +00:00
$required = '' ;
if ( isset ( $columns [ $modules [ $m ]][ $i ][ 'required' ]) && ( $columns [ $modules [ $m ]][ $i ][ 'required' ] == true )) {
$required = '*' ;
}
$rowCells = array ();
$rowCells [] = $columnSpacer ;
$rowCells [] = new htmlHelpLink ( $columns [ $modules [ $m ]][ $i ][ 'help' ], $modules [ $m ], $scope );
$rowCells [] = $columnSpacer ;
$rowCells [] = new htmlOutputText ( $columns [ $modules [ $m ]][ $i ][ 'description' ] . $required );
$rowCells [] = $columnSpacer ;
$rowCells [] = new htmlOutputText ( $columns [ $modules [ $m ]][ $i ][ 'name' ]);
$rowCells [] = $columnSpacer ;
2011-03-31 18:50:48 +00:00
$example = '' ;
if ( isset ( $columns [ $modules [ $m ]][ $i ][ 'example' ])) {
$example = $columns [ $modules [ $m ]][ $i ][ 'example' ];
}
$rowCells [] = new htmlOutputText ( $example );
2010-12-05 13:31:39 +00:00
$rowCells [] = $columnSpacer ;
if ( isset ( $columns [ $modules [ $m ]][ $i ][ 'default' ])) {
$rowCells [] = new htmlOutputText ( $columns [ $modules [ $m ]][ $i ][ 'default' ]);
}
else {
$rowCells [] = new htmlOutputText ( '' );
}
$rowCells [] = $columnSpacer ;
if ( isset ( $columns [ $modules [ $m ]][ $i ][ 'values' ])) {
$rowCells [] = new htmlOutputText ( $columns [ $modules [ $m ]][ $i ][ 'values' ]);
}
else {
$rowCells [] = new htmlOutputText ( '' );
}
$rowCells [] = new htmlSpacer ( null , '25px' );
$row = new htmlTableRow ( $rowCells );
if ( $odd ) {
$row -> setCSSClasses ( $scope . 'list-dark' );
}
else {
$row -> setCSSClasses ( $scope . 'list-bright' );
}
$odd = ! $odd ;
$columnContainer -> addElement ( $row );
2004-08-31 19:13:32 +00:00
}
2003-08-28 18:37:27 +00:00
}
2010-12-05 13:31:39 +00:00
$container -> addElement ( $columnContainer , true );
$tabindex = 1 ;
parseHtml ( null , $container , array (), false , $tabindex , $scope );
echo " </form> \n " ;
2004-08-31 19:13:32 +00:00
2010-09-04 12:39:32 +00:00
// build sample CSV
2004-10-12 13:12:16 +00:00
$sampleCSV_head = array ();
$sampleCSV_row = array ();
2010-09-04 12:39:32 +00:00
// DN attributes
$sampleCSV_head [] = " \" dn_suffix \" " ;
$sampleCSV_head [] = " \" dn_rdn \" " ;
// module attributes
for ( $m = 0 ; $m < sizeof ( $modules ); $m ++ ) {
if ( sizeof ( $columns [ $modules [ $m ]]) < 1 ) continue ;
for ( $i = 0 ; $i < sizeof ( $columns [ $modules [ $m ]]); $i ++ ) {
$sampleCSV_head [] = " \" " . $columns [ $modules [ $m ]][ $i ][ 'name' ] . " \" " ;
2003-09-28 16:00:13 +00:00
}
2010-09-04 12:39:32 +00:00
}
$RDNs = getRDNAttributes ( $scope , $selectedModules );
// DN attributes
$sampleCSV_row [] = " \" " . $_SESSION [ 'config' ] -> get_Suffix ( $scope ) . " \" " ;
$sampleCSV_row [] = " \" " . $RDNs [ 0 ] . " \" " ;
// module attributes
for ( $m = 0 ; $m < sizeof ( $modules ); $m ++ ) {
if ( sizeof ( $columns [ $modules [ $m ]]) < 1 ) continue ;
for ( $i = 0 ; $i < sizeof ( $columns [ $modules [ $m ]]); $i ++ ) {
2011-03-31 18:50:48 +00:00
if ( isset ( $columns [ $modules [ $m ]][ $i ][ 'example' ])) {
$sampleCSV_row [] = '"' . $columns [ $modules [ $m ]][ $i ][ 'example' ] . '"' ;
}
else {
$sampleCSV_row [] = '""' ;
}
2003-06-01 15:14:16 +00:00
}
2010-09-04 12:39:32 +00:00
}
2004-10-12 13:12:16 +00:00
$sampleCSV = implode ( " , " , $sampleCSV_head ) . " \n " . implode ( " , " , $sampleCSV_row ) . " \n " ;
$_SESSION [ 'mass_csv' ] = $sampleCSV ;
2010-10-18 19:46:03 +00:00
echo '</div>' ;
2010-08-21 09:43:52 +00:00
include 'main_footer.php' ;
2004-08-31 19:13:32 +00:00
die ;
}
2003-06-01 11:39:23 +00:00
?>